关于流媒体加密的一些分享

2021-02-25

为什么要加密视频

付费观看视频的模式是很多平台的核心业务,如果视频被录制并非法传播,付费业务将受到严重威胁。因此对视频服务进行加密的技术变得尤为重要。本文所指的视频加密是为了让要保护的视频不能轻易被下载,即使下载到了也是加密后的内容,其它人解开加密后的内容需要付出非常大的代价。无法做到严格的让要保护的视频不被录制,原因在于你需要在客户端播放出视频的原内容,解密的流程在客户端的话不法分子就能模拟整个流程,最保守也能用屏幕录制软件录制到视频的原内容(可以通过加水印的方法缓解下)。我们的目标是让他获取原内容的代价更大。

常见视频加密技术

视频加密技术分为两种:防盗链:通过验证的用户才能访问到没有加密的视频内容,这种方案存在视频很容易就被下载的风险,严格来说这不属于加密。这种方式其实是资源访问授权,它实现起来简单;加密视频本身:通过对称加密算法加密视频内容本身,用户获得加密后的视频内容,通过验证的用户可以获取解密视频的密钥,在客户端解密后播放。这种方式实现起来流程复杂会带来更多的计算量。一般结合这两种技术一起用,第1种技术很成熟也有很多教程就不再复述,本文主要介绍第2种加密技术。

流媒体加密技术原理

看视频分为两种,看点播和看录播。要看点播可以通过下载完整个视频后再看,或者通过流媒体边下边看。看直播只能通过流媒体看最新的画面。加密整个视频的技术很简单,把视频看成一个文件采用加密文件的技术,这种技术太多就不介绍了。加密流媒体的技术很少,也很难找到学习资料,本文主要介绍流媒体加密技术。常见的应用与浏览器播放的流媒体传输协议有:HLS:Apple 推出的基于 HTTP 协议的 MP4 分片传输协议,可用于点播和直播场景。每下载一个分片都需要发生一次 HTTP 请求,所以严格来说 HLS 不能称为流媒体传输协议。HTTP-FLV:基于 HTTP 长连接的 FLV 分块 tag 传输协议,可用于点播和直播场景。RTMP:基于 TCP 的 FLV 分块 message 传输协议,用于 Flash 客户端。

流媒体加密原理

可以看出一个规律这些流媒体传输协议都必须把视频流拆分成连续的小块之后再被传送,只不过分块的大小和视频容器的格式不一样而已。流媒体加密技术的核心就在于对这每一小块视频分别使用对称加密算法,在服务端加密客户端解密,通过权限验证的用户才能拿到解密一小块视频的密钥。

为什么不用 HTTPS 加密

可能有人会问为什么不用 HTTPS 加密?原因是 HTTPS 在网络传输层进行非对称加密,目的是为了防止中间人窃听劫持,任何人都可以和我们的服务器建立 HTTPS 链接获取到原数据。而视频加密的目的不是为了防止有中间人窃听我们的视频数据,而是要让视频数据本身被加密。

为什么选择对称加密

现代成熟的加密技术分为对称加密算法和公钥密码算法(非对称加密)。之所以选择对称加密是因为流媒体要求很强的实时性,数据量又很大。公钥密码算法的计算都比较复杂,效率较低,适合对少量数据进行加密。对称加密效率相对较高,所以流媒体加密首选对称加密。例如在 SSH 登入的时候会先通过公钥密码算法传输一个密钥,再用这个密钥用作对称加密算法的密钥,在数据传输过程中使用对称加密算法来提示数据传输效率。

HLS 加密

HLS 是目前最成熟的支持流媒体加密的能应用在浏览器里的流媒体传输协议,HLS 原生支持加密,下面来详细介绍它。在介绍如何加密 HLS 先了解下 HLS 相比于其它流媒体传输协议的优缺点。优点在于:建立在 HTTP 之上,使用简单,接入代价小;分片技术有利于 CDN 加速技术的实施;部分浏览器原生支持,支持点播和录播。缺点在于:用作直播时延迟太大;移动端支持还好,PC端只有 Safari 原生支持。

HLS 加密原理

HLS 由两部分构成,一个是 .m3u8 文件,一个是 .ts 视频文件(TS 是视频文件格式的一种)。整个过程是,浏览器会首先去请求 .m3u8 的索引文件,然后解析 m3u8,找出对应的 .ts 文件链接,并开始下载。
hls

1.png


获取到密钥后再在客户端解密出原内容,可以看出启用 HLS 加密后会多出更多的事情:针对每个 TS 需要去请求获取密钥;需要多提供一个给客户端获取密钥的鉴权服务;针对每个 TS 需要去执行对称加密的解密计算。这会带来更多的网络请求和计算量,可能会对延迟和性能造成一定的不良影响。


HLS 加密实战

支持 HLS 的客户端都原生支持加密,所以要开启 HLS 加密你只需要修改你的服务端:修改 HLS 视频服务,对 TS 加密,往m3u8中加入EXT-X-KEY字段;提供给客户端获取密钥的鉴权服务,即上面的https://priv.example.com/key.do?k=1所指向的服务。目前大多数云服务都支持 HLS 加密服务,如果你想直接搭建 HLS 加密服务可以使用nginx-rtmp-module.

HLS 兼容方案

目前 HLS 存在兼容性问题:

针对桌面端低版本浏览器例如 IE,可以使用 Flash 技术来播放 HLS ,详细使用见开源项目flashls

针对非Safari高版本浏览器例如 Chrome ,可以使用 Media Source Extensions API 去实现播放 HLS,详细使用见开源项目hls.js

针对既不原生支持 HLS又不支持 Media Source Extensions 也不支持 Flash 的浏览器,常见于部分低版本移动端浏览器,我也找不到什么好办法。flashls 和 hls.js 都支持 HLS 加密技术。

扫一扫联系客服

  • 客服小刘
  • 客服小耿
  • 客服小芹
山东济南高新区联合财富广场1#1903 投诉建议:advice@dolit.cn
商务合作:market@dolit.cn 售后服务:support@dolit.cn
电话:0531-66561946 15562577050 求职应聘:hr@dolit.cn
行业资讯
友情链接: 点量官网 点量淘宝店铺 视频加密 H5网站视频加密
鲁ICP备13019824号-8