前言
随着视频行业的快速发展,越来越多的视频内容需要保护。不论腾讯视频、优酷、爱奇艺等视频媒体平台播放的独播剧、版权电影,还是在线教育网站提供的教学视频,抑或游戏主播录制的操作技巧,都离不开视频内容保护。防盗链是最常见的保护机制,但如果视频被盗链,则可以非法获取视频并传播。前段时间独播剧《使徒行者3》提供付费超前点播服务,结果很多第三方网站都可以在线观看,试想版权方的心里阴影面积……
还有其他方式补救吗?当然,可以对视频内容进行加密。下面来看下针对多分辨率规格文件的加密和播放方法。其中用到的服务:
• 腾讯云点播VOD
内容保护方法介绍
在介绍加密方法之前,我们首先了解下视频内容的常见保护方法。
为保障视频媒体平台、在线教育网站等平台上视频创作者辛苦录制的付费视频内容安全,防止视频被盗链、非法下载和传播,可采用多种机制进行保护:
1、 防盗链:主要对视频播放请求来源的合法性进行控制,但防盗链不对视频内容加密,用户下载后可以二次分发,在版权保护上的安全级别不高。常见的防盗链有下面两种:
1) Referer 防盗链:通过播放请求 Header 中携带的 Referer 字段识别请求的来源,支持黑名单或白名单配置,对来源进行识别和鉴权。
2) Key 防盗链:在播放链接中加入控制参数,随机生成key,并使用 Key 做签名,可以控制链接的有效时间、试看时长、允许播放的 IP 数等。
2、 视频加密:使用密钥对内容本身进行加密,他人获取后无法直接播放。需要对加密的视频解密才能播放。
1) m3u8切片加密:各种视频的网站广泛采用的技术,切片使用AES加密算法。获取视频后使用密钥解密视频播放。
2) 文件流加密:采用AES或异或 等文件流加密方式,对文件数据进行处理。播放时动态解密相应的数据到内存再播放。需使用专用的播放器才能解密,加密强度较弱。
3) 视频逐帧转码加密:加密强度最高,采用私有视频编码协议,需熟知视频内部编码规则,对开发者技术要求较高,但安全性也极高。通过软件获取源视频内部编码,逐帧把视频编码转为私有视频编码,通常是基于H264来改写为私有协议(即非标准H264算法)。
在了解上述方法后,考虑到独播剧等视频文件为多分辨率,为避免播放器在切换不同分辨率的版本时由于缓冲而卡顿,需要集成自适应码流,保证IDR 帧对齐。需选定一个 IDR 帧的参照模板,并在转码各个分辨率时采用相同的参照模板。这两个步骤实现起来难度较大。另外,还需要将转出的多种分辨率版本分别打包,输出一个描述性文件。对开发者来说门槛高,这可如何是好,有没有便捷的实现方式呢?
不用担心,腾讯云、阿里云、华为云等云厂商点播都集成了自适应码流的技术,并基于HLS 的AES encryption对视频内容进行加密,配合令牌服务等身份验证来获取解密的播放地址。接下来我们以腾讯云点播为例来实现视频加密和播放。当终端通过业务后台鉴权,获得解密密钥后才能播放。只需要通过简单的界面按钮操作,即可使用预设模板,完成自适应码流转码及加密的功能。
解决方案
这里以控制台使用为例说明,包含以下几步操作:
1、 视频上传
在控制台【媒资管理】-视频管理页面下,上传本地文件即可:
2、 转自适应码流处理
【媒资管理】-视频管理页面,提供10和12两种预设自适应码流模版。其中10为未加密模版,12为基于HLS提供的AES encryption 的加密模版,这里我们选择12加密模版:
两种系统预设转自适应码流模板,分别包含流畅、标清、高清、全高清、2K、4K六条子流。默认禁止转高分辨率,即向下转码。如果分辨率规格不符合业务场景,也可以自定义自适应码流模版,在【视频处理设置】-模板设置页面,“转自适应码流模板”页签下创建新模板。其中视频参数包括编码标准、码率、分辨率和帧率。音频参数包含编码标准、采样率、码率和声道数。这里以创建流畅、标清、高清3条子流为例说明,子流的参数如下:
子流编号 | 视频码率 | 分辨率 | 帧率 | 音频码率 | 声道 |
---|---|---|---|---|---|
子流1 | 256kbps | 长边0px,短边480px | 24 | 48 Kbps | 2 |
子流2 | 512kbps | 长边0px,短边720px | 24 | 48 Kbps | 2 |
子流3 | 1024kbps | 长边0px,短边1080px | 24 | 48 Kbps | 2 |
其中子流1的配置如下,其他子流参考配置即可:
当然,看剧的时候播放进度条必不可少,同时一个好看的剧情图封面会更吸引眼球,所以需要增加雪碧图和视频封面。这一系列处理可以串到任务流中执行,也便于使用超级播放器播放。在【视频处理设置】-任务流设置下,创建自定义任务流,自适应码流选择我们刚刚创建的模版,雪碧图和封面用系统预置模版:
创建完任务流之后,我们可以在视频处理下对视频进行任务流操作。
3、 加密播放
自适应码流处理完毕后,需要通过云点播的超级播放器才能播放。系统预置播放器配置可以播放包含10和12自适应码流模版的任务流处理过的视频,如果自定义了自适应码流模版和对应的任务流,则需要增加新的播放器配置来播放。在控制台超级播放器配置下新建,添加自定义的自适应码流模板和系统预设的雪碧图模版:
如果想在分发之前体验预览效果,可以在视频的管理页面,【超级播放器预览】页签选择刚创建的超级播放器配置MyTestCfg,在【Web 播放器】中,可在体验Web播放效果。移动端扫码下载并安装腾讯云工具包,即可在移动端播放体验。
预览没问题后,如何分发给客户观看呢?这里以web端为例介绍。播放加密视频,超级播放器需要使用有效期内的签名。在终端请求播放时,若 App 播放服务允许终端播放,则派发一个合法的签名。终端在签名有效时间内可以播放视频内容。接下来我们使用Demo来验证,使用签名工具快速生成签名。打开超级播放器 - 签名生成工具,填写参数,其中超级播放器配置填写自定义配置名MyTestCfg。如果使用了子应用,则AppId填子应用 AppId 。为防止他人将视频 URL 转移到其他站点后长期使用,可以设置Key防盗链过期时间,这里使用6小时后的十六进制 Unix 时间:5fd0aa39。防盗链 Key在控制台分发播放设置-域名管理下的默认域名下获取。
结合超级播放器预览效果中的web代码,嵌入到自定义网页中,需引入服务器文件如下:
代码语言:javascript复制<!-- 引入播放器 css 文件 -->
<link href="https://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.min.css" rel="stylesheet">
<!-- 如需在IE8、9浏览器中初始化播放器,浏览器需支持Flash并在页面中引入 -->
<!--[if lt IE 9]>
<script src="//imgcache.qq.com/open/qcloud/video/tcplayer/ie8/videojs-ie8.js"></script>
<![endif]-->
<!-- 如果需要在 Chrome Firefox 等现代浏览器中通过H5播放hls,需要引入 hls.js -->
<script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/lib/hls.min.0.8.8.js"></script>
<!-- 引入播放器 js 文件 -->
<script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.v4.min.js"></script>
<!-- 设置播放器容器 -->
<video id="player-container-id" preload="auto" width="640" height="360" playsinline webkit-playsinline</video>
另外需填写fileID、appID以及psign(签名生成工具中生成的结果):
代码语言:javascript复制<script src="vconsole.min.js"></script>
<script>
var player = TCPlayer('player-container-id', { // player-container-id 为播放器容器ID,必须与html中一致
fileID: '5285890811042529602', /**请传入需要播放的视频fileID 必须 */
appID: '1500002721',/**请传入点播账号的子应用appID 必须 */
psign:'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTUwMDAwMjcyMSwiZmlsZUlkIjoiNTI4NTg5MDgxMTA0MjUyOTYwMiIsImN1cnJlbnRUaW1lU3RhbXAiOjE2MDc0ODUyNjksInBjZmciOiJNeVRlc3RDZmciLCJ1cmxBY2Nlc3NJbmZvIjp7InQiOiI1ZmQwYWEzOSJ9fQ.HdI6tRDeY5-CRgLibfFAIcFcZQ7aTVi9nrEuilChfT4'
});
</script>
即可在自定义网页中查看视频:
小结
以上首先对视频内容保护方法进行了介绍,然后以腾讯云点播为例,实现自适应码流视频的加密和播放。在后续遇到播放版权电影或视频的场景,可以结合以上方法,防止视频被恶意盗链分发。