本文共 2712 字,大约阅读时间需要 9 分钟。
付费观看视频的模式是很多平台的核心业务,如果视频被录制并非法传播,付费业务将受到严重威胁。因此对视频服务进行加密的技术变得尤为重要。
本文所指的视频加密是为了让要保护的视频不能轻易被下载,即使下载到了也是加密后的内容,其它人解开加密后的内容需要付出非常大的代价。
无法做到严格的让要保护的视频不被录制,原因在于你需要在客户端播放出视频的原内容,解密的流程在客户端的话不法分子就能模拟整个流程,最保守也能用屏幕录制软件录制到视频的原内容。我们的目标是让他获取原内容的代价更大。
视频加密技术分为两种:
一般结合这两种技术一起用,本文主要介绍第2种加密技术。
看视频分为两种,看点播和看录播。
要看点播可以通过下载完整个视频后再看,或者通过流媒体边下边看。 看直播只能通过流媒体看最新的画面。加密整个视频的技术很简单,把视频看成一个文件采用加密文件的技术,这种技术太多就不介绍了。
加密流媒体的技术很少,也很难找到学习资料,本文主要介绍流媒体加密技术。常见的应用与浏览器播放的流媒体传输协议有:
可以看出一个规律这些流媒体传输协议都必须把视频流拆分成连续的小块之后再被传送,只不过分块的大小和视频容器的格式不一样而已。
流媒体加密技术的核心就在于对这每一小块视频分别使用对称加密算法,在服务端加密客户端解密,通过权限验证的用户才能拿到解密一小块视频的密钥。
可能有人会问为什么不用 HTTPS 加密?原因是 HTTPS 在网络传输层进行非对称加密,目的是为了防止中间人窃听劫持,任何人都可以和我们的服务器建立 HTTPS 链接获取到原数据。而视频加密的目的不是为了防止有中间人窃听我们的视频数据,而是要让视频数据本身被加密。
HLS 是目前最成熟的支持流媒体加密的能应用在浏览器里的流媒体传输协议,HLS 原生支持加密,下面来详细介绍它。
在介绍如何加密 HLS 先了解下 HLS 相比于其它流媒体传输协议的优缺点。
优点在于:缺点在于:
HLS 由两部分构成,一个是 .m3u8 文件,一个是 .ts 视频文件(TS 是视频文件格式的一种)。整个过程是,浏览器会首先去请求 .m3u8 的索引文件,然后解析 m3u8,找出对应的 .ts 文件链接,并开始下载。
hlsm3u8 文件是一个文本文件,在开启 HLS 加密时,内容大致如下:
#EXTM3U#EXT-X-VERSION:6#EXT-X-TARGETDURATION:10#EXT-X-MEDIA-SEQUENCE:26#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=1"#EXTINF:9.901,http://media.example.com/segment26.ts#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=2"#EXTINF:9.501,http://media.example.com/segment28.ts
这个文件描述了每个 TS 分片的 URL ,但这些分片都是加密后的内容,要还原出原内容需要从
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=1"
中解析出获取解密密钥的URL https://priv.example.com/key.do
和对称加密算法 AES-128
。
这会带来更多的网络请求和计算量,可能会对延迟和性能造成一定的不良影响。
支持 HLS 的客户端都原生支持加密,所以要开启 HLS 加密你只需要修改你的服务端:
EXT-X-KEY
字段。https://priv.example.com/key.do?k=1
所指向的服务。目前大多数云服务都支持 HLS 加密服务,如果你想直接搭建 HLS 加密服务可以使用 。
目前 HLS 存在兼容性问题:
flashls 和 hls.js 都支持 HLS 加密技术。
目前流媒体加密技术还不成熟,除了 HLS 协议提供了方便成熟的方案外,其它协议的加密技术还不成熟。
RTMP 协议提供了一个变种版 RTMPE 可以加密流媒体,原理和 HLS 加密类似,但是我还找不到合适的服务端去支持 RTMPE 协议。转载地址:http://xjzoi.baihongyu.com/