DRM,英文全称为Digital Rights Management,译为数字版权管理。它是目前业界使用非常广泛的一种数字内容版权保护技术。随着知识产权保护受重视的程度日益提高,Android也加入了DRM来有效保护数字版权。
DRM不是一项技术,而是一类技术。很多机构和联盟都提出过相应的DRM标准。例如Open Mobile Alliance推出的OMA DRM、Marlin Developer Community提出的Marlin DRM,苹果的Fairplay和微软的Play Ready/Windows DRM。而Google则通过收购Widevine公司推出了Widevine DRM。
DRM代码结构大体可分为三部分:
第一部分是Android中的基本框架,包括WVMExtractor等。这部分代码在AOSP中都可以看到,属于Open Source的内容。这部分代码大多没有实质性内容,相关功能的实现封装在第二部分的专利代码包中。
第二部分是Widevine的专利代码包。这部分代码需要得到Google授权后才能得到。该包提供了很多Widevine专用库用于完成Widevine DRM权限检查和解密。同时,它还提供了一些Sample App用于测试。
第三部分是手机厂商自身的安全认证。Widevine是一个很强的版权控制体系,它甚至可在硬件层与厂商的安全机制绑定。很多知名的手机厂商都在boot等底层中加入自己的安全机制,只有通过可信赖的boot loader进行刷机才能得到具有正常权限的手机软件,并可以使用Widevine。这也是为什么很多破解的手机无法使用Widevine的原因.
Android设计了一个通用的DRM软件框架,不同的DRM解决方案可通过Plugin的方式集成到Android系统中,左图所示为Android中的DRM软件架构
1).DRM Framework API模块是Framework层暴露给App的接口。
2).DRM Framework API模块通过Binder机制和位于drmserver进程中的DRM Manager模块通信。DRM Manager加载并管理系统中所有的DRM插件。
3).DRM Plugins是真正实现权限管理、数字内容解密等工作的模块。根据DRM标准的不同,这些Plugins的实现亦不相同。另外,一个手机可能会集成多个DRM Plugin。这是因为媒体文件如果采用不同的DRM解决方案进行加密的话,手机在播放它们时,DRM Manager需找到对应的DRM Plugin以进行解密。
MediaCodec模式:MediaCodec、MediaCrypto以Java API的形式直接暴露给应用层。应用层能够控制解码、解密的过程。
Crypto Plugin是实际完成解密的模块。