聊聊Android中的DRM工具-Widevine
曾几何时,我一直好奇,像爱奇艺、腾讯视频、优酷这些视频平台是如何控制版权的,就比如,如何防止用户下载后发布到其他渠道,最近接触了DRM技术,瞬间就懂了。
DRM介绍
DRM(Digital Rights Management),即数字版权管理,是在数字内容交易过程中,对知识产权进行保护的技术、工具和处理过程。它的目的是防止数字内容被未经授权的用户复制、修改和分发,以保护知识产权所有者的权益。在日常生活中,我们经常与 DRM 技术打交道。比如,电影上映前,我们不能在视频网站上观看电影,只能去电影院。这是内容提供(发行)商对自己的数字内容进行管理的一种结果。
DRM工作原理
先贴一张图,然后我们再做简单的说明
上图中,RAM想要给SHYAM传递小纸条,但因为距离较远,中间需要三个人进行传达,为了防止这三个人偷看小纸条内容,他们找来了HARI,HARI手上有一本密码本,每次RAM传递小纸条之前先找HARI拿到密码本,然后根据密码本的规则对小纸条内容进行加密,然后再将加密后的小纸条传递给SHYAM,这样,即使中间三个人偷看了小纸条,因为没有密码本,所以也看不懂纸条的内容。SHYAM收到小纸条后,再向HARI获取密码本,然后对小纸条内容进行解密,这样SHYAM就能看到原始内容了。
现在,我们把RAM看成是视频发行商,SHYAM看成是观众,HARI看成是版权管理商,就有了以下这种关系图
从上图中可以看出,我们想要向认证用户安全地发送一部电影。需要:
- 向DRM厂商的服务器请求密码本
- 然后使用密码本加密视频
- 将电影视频发送给用户
- 用户向DRM厂商的服务器请求密码本解密视频
- 现在用户就可以观看电影了
这下视频版权管理是不是就一目了然了。但以上只是最初DRM的设计思想,现实中却无法正常运行,因为还没有解决多种分辨率的问题,这就需要对视频进行切片(ABR)和打包。
视频切片和打包
ABR: 通过使用ABR技术,电影可以被编码成不同的码率-分辨率组合(也称为码率阶梯)并被分割成小的视频块或者切片。每个视频切片包含几秒钟视频,可以被单独解码。
打包是指将电影分割成小的视频切片,并使用清单(manifest)或者播放列表对其进行描述。当用户想要播放电影的时候,他需要按照播放列表的信息播放。
根据可用带宽,播放器请求特定码率版本的视频切片,CDN响应后返回被请求切片。
这就结束了吗?不,这里面还存在很大的一个问题需要解决,视频的加密问题。
视频加密
前面说,视频发行商在发布视频时,需要向DRM服务商获取密码本,这里的密码本实际上是一种授权,就是说经过DRM服务商的授权,他才会对你的视频进行版权保护,并不是对视频内容进行加密,真正的视频加密还得涉及到密码学相关的技术,最常用的加密方式是AES,AES属于对称加密,这就涉及到密钥的保存。在DRM中,密钥也保存在DRM服务商手上,随着视频清单一起发送给视频播放器
好了,DRM的核心原理大概就是这些,如果想了解更详细的内容,可阅读下面的参考文献。
DRM厂商
上述DRM工作原理图中,有一个很重要的角色就是DRM服务商,目前主要有三大服务商,分别对应自己的DRM技术方案,分别是:
Apple FairPlay
Google Widevine
Microsoft PlayReady
国内爱奇艺最近也自主研发了自己的DRM解决方案:iQIYI DRM-S。而国内的视频平台几乎都是打包了所有的的DRM方案,以针对不同的平台和系统。以下是爱奇艺的整体DRM解决方案
Widevine介绍
Widevine仅适用于基于Chromium的操作系统、Android设备以及其他Google相关设备和浏览器。
Widevine的安全级别
- L1
在L1级别,提供了最高的安全性。内容在设备内进行解密,并使用硬件保护,以防止原始数据泄露。通常用于高质量视频和高分辨率的流媒体。获得L1认证的设备可以播放高质量的内容。像Amazon Prime Video和Netflix等流媒体服务需要L1安全性。如果在未获得认证的设备上观看,无法播放高清或超高清的高质量内容。
- L2
L2具有较高的安全性,但不像L1那么严格。即使设备未获得L1认证,仍然可以播放内容。一些设备使用软件来保护数据。对于较低分辨率的视频和音乐内容,可能会使用L2。如果想要享受更高质量的内容,建议使用获得L1认证的设备,而不是L2。虽然L2可能不够满足要求,但某些内容仍然可能提供高质量的视频。因此,不能一概而论地认为必须使用L1。
- L3
L3的安全级别最低。主要用于模拟器和一些旧设备等情况,内容保护相对较弱,分析和复制相对容易。此外,一些服务如Amazon Prime Video和Netflix也可能使用L3。虽然可以使用L3,但风险较高,不应期望高质量的内容。使用L3时需要谨慎考虑这些因素。
查看Widevine级别
可以使用DRM Info App查看设备的widevine安全级别,该App可以在Google Play上找到,文末贴了App的下载链接。大多数主流制造商的智能手机通常都支持L1至L3的某一个级别。如果发现您的设备不支持Widevine,那可能是制造商为了简化流程或者您的智能手机不符合标准。
如果app打开闪退,说明设备并不支持Widevine。
测试Widevine功能
许多流媒体app都使用了Widevine,比如Youku、腾讯视频、IQIYI、YouTube、Netflix等,这里推荐使用Google的官方播放器ExoPlayer进行测试,文末提供下载链接
(重点)在Android中集成Widevine
step1:获取Widevine源码
从官网下载Widevine源码,注意,AOSP默认是没有Widevine源码的,需要手动集成,因为需要跟Google签订法律协议,然后由Google授权访问Widevine代码库,具体见Google官网流程。
step2:将源码放置到vendor目录下vendor/widevine/
step3:添加编译配置
device/qcom/{product combo name}/BoardConfig.mk
中添加
#这里设置的L3级别,L1级别需要跟Google签订协议,获取Keybox
BOARD_WIDEVINE_OEMCRYPTO_LEVEL := 3
device/qcom/{product combo name}/{product combo name}.mk
中添加
PRODUCT_PROPERTY_OVERRIDES += drm.service.enabled=true
PRODUCT_PACKAGES += com.google.widevine.software.drm.xml \
com.google.widevine.software.drm
PRODUCT_PACKAGES += libwvdrmengine
vendor/qcom/proprietary/common/config/device-vendor.mk
中修改
SECUREMSM += InstallKeybox
#L3级别需要删除oemcrypto库
#SECUREMSM += liboemcrypto
#SECUREMSM += liboemcrypto.a
SECUREMSM += libhdcpsrm
最后编译刷机,使用app工具验证即可,如果能显示Widevine级别,说明集成成功。
总结
好了,现在你应该彻底知道Widevine是怎么回事了
参考链接
构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
Widevine安全级别查看app:
链接:pan.baidu.com/s/1lIJq-_eg…
提取码:fnk6
ExoPlayer:
链接:pan.baidu.com/s/1dUseWHIi…
提取码:nszh
来源:juejin.cn/post/7303723984180101139