相关原创文章:
数字版权管理DRM
DRM在Android中
DRM在Android中(2)——HAL
DRM-Playready总结
ExoPlayer+Shaka-packager播放自制DRM视频
1. 前言
Widevine是google在ICS(android4.0)版本上新推出的一种DRM数字版权管理功能,有这个功能的话,就能从google指定的服务器上,下载经过google加密的版权文件,例如视频、应用等等。
google推出这个功能主要的目的是为了在应用内容上可以和苹果更好的竞争,由于目前android的开放性,导致基本上所有的android应用都可以很快的扩散并免费安装,因此导致给android开发应用的开发商以及个人很难从中充分获利,而苹果这点保护的很好,因此苹果的应用商店中的应用内容质量和档次明显更高。因此google推出它,最终目的就是可以进行收费。
Widevine按照安全级别分为三种层次的支持,如图所示:
Level 1使用secure bootloader和arm trust zone,key保护方法是factory provisioning,host cpu接触不到key,视频流受到保护。
Level 2与level 1不同的只是视频流的保护,所以google不单独提供level 2的库,level 2都是用level 1的库来实现的。
Level 3使用trusted bootloader,key保护方法是field provisioning,host cpu接触到key,视频流不需要保护。
总体来说,level 3是安全级别很低的实现,google已不推荐实现,只是用于那些已经出厂,又想支持widevine的设备。Google推荐新设备都使用level 1实现。
以下内容是基于AndroidQ进行描述。
2. 架构
widevine是DRM的一种插件,在Android中应用,使用的架构是固定的DRM架构,具体可参看《DRM在Android中》和《DRM在Android中——HAL》。这里对widevine在Android中的位置具体化:
L3:
基于AndroidQ的版本,widevine使用的是[email protected]/widevine
,一般不使用default service
。
如果不使用lazy hal,widevine服务会在设备启动的时候就加载,上图是没有使用lazy hal的示意图,而使用了lazy hal后,widevine服务会在使用到的时候才启动,使用完后就会关闭服务。使用lazy hal的服务是:[email protected]
。
L1:
博文为ganqiuye原创,转载请附上原文出处链接和本声明。
3. 移植
由于L3的实现基本不涉及到硬件,而L1需要搭配secuer os和drm buffer等,故先调试L3代码,之后再调试L1。
L3:
- 获取源码(向google获取)
- 参考DRM步骤进行配置
- 调试播放通路,mediacodec(mediaplayer一般不使用)
- 使用源码中自带的Exoplayerdemo,单元测试demo等方法进行测试。
L1:
L1的原理,简单的归纳就是将解密部分的代码移植到secure os
上进行,这就需要tee模块
,通过各种ta
实现,通过命令发送到secure os
中运行。同时,要适配好secure os
里的一些规则,例如,timer模块
,log模块
等,buffer
等。
另外,这样将解密部分代码移植到secure os
上进行,最终使用的也是cpu的运算能力,那么如果需要硬件运算,又需要调试CE硬件解密模块,将widevine里的解密算法,调试到CE硬件上运算。
移植完后,需要进行各种测试。
4. 应用
- google认证测试GMS
- netflix等播放器
- 盒子上一些vip片源
- 片源商,HBO等