火山引擎视频点播服务提供了完善的内容保护机制,为您的业务安全保驾护航。您可以根据自身业务场景,选择不同的安全措施。本文为您介绍视频安全的概述、URL 鉴权和视频加密的详细说明。
视频点播默认提供包含鉴权的的视频播放地址,您可根据自身业务安全需求,在点播控制台,分发加速设置 > 域名管理的域名配置中对 Referer 黑白名单、IP 黑白名单、链接有效期等进行配置。详细操作配置请参见域名配置。
整体流程说明如下所示。
规则 | 示例 |
---|---|
访问 URL 格式 |
|
访问 URL 示例 |
|
|
|
详细的参数说明如下表所示。
参数 | 释义 | 描述 | 配置位置 | 备注/极限 |
---|---|---|---|---|
path | 路径 | 访问路径,通过访问 URL 获取 | 客户端 | 取值以 "/" 开头 |
timestamp | 过期时间 | 过期 Unix 时间,十进制整数,从 UTC 1970 年 1 月 1日 0 时 0 分 0 秒起至现在的总秒数,不考虑闰秒 | 客户端 | 十进制整数 |
rand | 随机数 | 随机字符串 | 客户端 | 可由 1-100 位大小写字母与数字组成 |
uid | 用户 ID | 固定写为 0 | 客户端 | |
key | 密钥 | 密钥作为待签算明文串的一部分进行 md5 计算 | 客户端/CDN | 火山引擎 CDN URL 签算校验功能支持至多2组密钥同时生效,密钥为必填;可由 6-40 位大小写字母与数字组成 |
注意
火山引擎 CDN 会在签名校验通过后,将存在于查询字符串中的签名参数,即auth_key=timestamp-rand-uid-md5hash
部分删去。
URL 鉴权无法解决用户拿到链接下载到本地后进行二次分发的场景。针对安全性要求更高的业务场景,建议对视频媒体内容进行加密处理。对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发。视频加密可有效防止视频泄露和盗链问题。
如下图所示是 Vid 播放方式完整流程。需要 AppServer 下发播放凭证。点播 SDK 处理了其中多个环节,您需要重点关注:加密转码和解密播放。
登录视频点播控制台,进入指定空间。
单击左侧导航栏媒资管理 > 视频管理,上传视频文件。
单击左侧导航栏媒体处理设置 > 媒体处理模板,选择视频转码模板页签,您可根据自身业务需求,配置视频转码模板参数,开启 DRM 加密按钮。详情请参见视频转码模板。
单击左侧导航栏媒体处理设置 > 工作流模板,勾选视频转码模板设置不同配置,完成工作流模板创建。详情请参见工作流模板。
在媒资管理 > 视频管理页面,勾选视频文件,单击列表上方的处理视频按钮。
在工作流任务中,查看任务处理状态。详情请参见工作流任务。
处理完成后,在视频管理页面,单击详情按钮,进行视频详情页面,查看视频地址。详情请参见视频详情。
移动端解密播放,需要 2 个步骤完成,即生成播放凭证后,使用客户端进行播放。
生成播放凭证即为playAuthToken
,客户端获取视频播放地址时使用。您需要开发AppServer 用于下发播放凭证给客户端。
为方便您的使用,我们对播放临时安全凭证(PlayAuthToken)
使用进行了封装,提供了多语言的 SDK。建议您使用服务端 SDK 来调用。
说明
针对加密视频,需设置 FileType = evideo
。
Android 端解密播放的代码示例如下所示。
final String vid = "your video id"; // appServer 下发 final String playAuthToken = "your video id's play auth token"; // appServer 下发 final int encodeType = TTVideoEngine.CODEC_TYPE_H264; // final int encodeType = TTVideoEngine.CODEC_TYPE_H265; // final int encodeType = TTVideoEngine.CODEC_TYPE_H266; // 1.组装 vid 播放源 StrategySource vidSource = new VidPlayAuthTokenSource.Builder() .setVid(vid) .setPlayAuthToken(playAuthToken) // 设置 Codec 类型(h264,h265、h266),不传则使用默认值 h264 .setEncodeType(encodeType) // 启播清晰度设置,这里演示设置为 480P。不传使用默认值 360P .setResolution(Resolution.High) .build(); // 2.设置播放源 ttVideoEngine.setStrategySource(vidSource);
iOS 端解密播放的代码示例如下所示。
// VideoID 方式播放,需要同时设置 playAuthToken NSString *videoId = @"video id"; NSString *playAuthToken = @"play auth token"; [self.engine setVideoID:videoId]; [self.engine setPlayAuthToken:playAuthToken];
媒体处理将视频内容按照 HLS AES-128 标准协议进行加密,加密后的视频支持 HLS 规定的播放器进行播放。安全级别低于私有加密,需要您根据自身实际业务需求,进行密钥保护,如登录 cookie、refer 限制等。
Web 端解密播放,需要 2 个步骤完成,即生成解密凭证后,使用 Web 端进行播放。
与移动端只需要设置playauthtoken
不同,web 端需要同时设置 keyToken
。为方便您的使用,我们对播放临时安全凭证(keyToken)
使用进行了封装,提供了多语言的 SDK。建议您使用服务端 SDK 来调用。
Web 端播放的代码示例如下所示:
<!DOCTYPE html> <html lang="zh"> <head> <title>视频云播放器</title> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" /> <meta name="referrer" content="no-referrer"> <link rel="stylesheet" href="//unpkg.byted-static.com/volcengine/veplayer/1.0.1/dist/index.min.css"> <script>window.gfdatav1="env":"prod","ver":"1.0.0.138","canary":0,"garrModules":null,"envName":"prod","region":"cn"</script><script src="//unpkg.byted-static.com/volcengine/veplayer/1.0.1/dist/index.min.js"></script> </head> <body> <div id="mse"></div> <script> const playerSdk = new VePlayer({ id: 'mse', width: 800, height: 500, getVideoByToken: { playAuthToken: 'playAuthToken', keyToken: 'keyToken' } }); </script> </body> </html>