解决方案

Android-DRM详解

seo靠我 2023-09-23 05:24:26

DRM简介:

  DRM: Digital Rights Management(数字版权管理)。

日常生活中,我们经常听到“版权“这两个字,到底是什么版权的呢?你大概可以理解: 版权就是别人拥有的东西你需要按SEO靠我照所有者的条款才能对这个东西进行观看,转发或者存储等。例如: 爱奇艺视频最近热播的电视剧《在远方》,你需要会员才可观看最新的剧集,这就是爱奇艺拥有的版权。

但是如果没有版权保护,你可以下载会员才可观看的SEO靠我视频,然后分享到网络上,别人只需要访问你的链接就可以不用会员也能观看。这对版权拥有者来说是一个重要的损失。综上: 数字版权保护特别重要!!!那安卓手机中对数字版权保护的视频是怎么处理的呢?本文将带大家SEO靠我来一起了解~

DRM工作原理:

DRM技术的工作原理是,首先建立数字节目授权中心。编码压缩后的数字节目内容,可以利用密钥(Key)进行加密保护(lock),加密的数字节目头部存放着KeyID和节目授权中心SEO靠我的URL。用户在点播时,根据节目头部的KeyID和URL信息,就可以通过数字节目授权中心的验证授权后送出相关的密钥解密(unlock),节目方可播放。

DRM标准:

严格来讲,DRM是一类技术,而不是一项SEO靠我技术,很多机构也曾提出了关于DRM的标准,例如:Open Mobile Alliance推出的OMA DRM、Marlin Developer Community提出的Marlin DRM,而GoogSEO靠我le則通過收購Widevine公司推出了Widevine DRM。

  目前安卓终端应用的大多数都是google原生的Widevine DRM。

DRM框架和集成:

和codec一样,为了方便厂商集成自己的DRSEO靠我M方案,DRM提供了一个通用的软件框架,厂商可以通过Plugin的方式把自己的DRM解决方案整合到安卓系统中。具体的软件框架如下:

如上图:

DRM Framework API从Framework层暴露给SEO靠我App。(framework层的实现详见DrmManagerClient)DRM Framework通过binder的方式和DRM manger通信,获取服务。(具体代码: framework/av/SEO靠我drm/drmserver)各个不同的DRM解决方案通过plugin的方式注册到DRM manger中。解密工作的具体实现都在plugin中。

Android中DRM架构中重要类图:

如上图:

FileSoSEO靠我urce代表一个媒体文件。如果媒体文件中有DRM信息,它将创建一个DrmManagerClient对象。该对象用于处理媒体文件中和DRM相关的操作。DrmManagerClient内部通过DrmManSEO靠我agerClientImpl和位于drmserver进程中的DrmManagerService进行跨Binder通信。MediaExtractor类封装了用于解析媒体文件中元数据的相关函数。对于DRMSEO靠我来说,系统会根据的DRM种类创建不同的MediaExtractor子类。和FileSource类似,MediaExtractor也通过DrmManagerClient和drmserver通信。DrmMSEO靠我anagerService运行于drmserver进程中,它是整个DRM框架的核心。DrmManagerService借助DrmManager管理系统中的DRM插件。DRM插件必须实现IDrmEngiSEO靠我ne接口。为了方便开发者,Android提供了DrmEngineBase类,该类继承了IDrmEngine接口并实现了一些通用的接口函数。这样,DRM Plugin只需要从DrmEngineBase派SEO靠我生即可。如前文所述,DRM框架中真正完成DRM处理工作的是DRMPlugins,这些Plugins大都需要得到相关机构的授权后才能得到相应的专利代码包。图1中列出了三个DRM Plugin。其中FwdSEO靠我LockEngine(OMA-V1的Forward Lock)由AOSP提供。Marlin Plugin和WidevinePlugin则需要相关DRM机构提供专利代码包。

DRM在Android中的应用SEO靠我:

如上图:

DrmServer 启动流程:在init进程启起来之后,会启动各种服务,其中就有drmserver服务。在init.rc 文档里:service drm /system/bin/drmserSEO靠我verDrmManagerService实例对象由drmserver进程在main函数中调用instantiate创建。

DrmManagerService内部会创建一个DrmManager实例对象并调SEO靠我用loadPlugins来加载设备可能提供的DRM Plugin。

DRM Plugin通过动态库的方式集成到设置中去。Android 中有两个目录可存放DRM Plugin。一个是/vendor/liSEO靠我b/drm/,例如Widevine对应的libdrmwvmplugin.so一般放在这个目录中。另一个目录是/system/lib/drm/。每一个DRM Plugin对应为一个IDrmManagerSEO靠我实例。所有被加载的DRM Plugin由DrmManager来统一管理。

DrmManagerService最后将通过addService把自己注册到Binder系统中以为广大客户端服务。

OMA DRMSEO靠我调用流程:

DRM 媒体文件播放:

Android支持的DRM播放方式分为两种:

1.  基于基本码流的(Elementary Stream Based,简称ES Based)播放方式。ES Based DSEO靠我RM意味着每一个数据基元在播放时都需要解密。这种DRM的媒体文件或流可以使用普通方式正常读取,但读取出来的数据是经过加密的。如果不能对数据正确解密,那么该数据将无法正常播放。目前Widevine DRSEO靠我M、Marline DRM都属于这一种类型。

2. 基于容器的(Container Base)播放方式,目前OMA DRM支持这种方法。(目前Android5.0默认使用)

DRM媒体文件播放 - 初始化SEO靠我DRM插件:

如上图:

MediaExtractor首先通过sniff函数检查媒体内容的类型,然后创建相应的Extractor来分析数据。在DRM检查开启的情况下,SniffDRM函数就会被用来检查文件是SEO靠我否有DRM控制。 SniffDRM将调用DataSource中的DrmInitialization函数,从而在DataSource中创建一个DrmManagerClient实例。如此,MediaExtSEO靠我ractor就将DataSource与DrmManagerService联系起来。 DrmInitialization函数非常重要,其  主要工作包括:

(1)调用openDecryptSession,SEO靠我该函数内部会根据文件中的DRM信息来初始化正确的DRM Plugin(Widevine、OMV,还是其他DRM类型)。

(2)创建DecryptSession,并将DRM信息封装在DecryptHandSEO靠我ler实例中传给FileSource。 DrmInitialization之后,SniffDRM会通过DecryptHandler来判断该文件是否有DRM控制,并分析出该DRM是ES Based,还是SEO靠我Container Based。如果属于ES Based DRM,MediaExtractor会创建一个DRMExtrator,而在DRMExtrator中,会创建一个MPEG4Extractor。 SEO靠我MediaExtrator创建完后,播放器即可开始播放。

DRM 媒体文件播放 - ES Based DRM播放流程:

如上图:

第一个阶段是资源初始化过程。该过程中,媒体播放器将通过getTrack以后获SEO靠我取一个媒体文件中代表媒体数据的DRMSource实例,DRMSource只负责DRM的控制和解密,而实际媒体数据的分析仍交给MPEG4Extractor来完成。对于播放器来说,它只和DRMExtratSEO靠我or和DRMSource交互。另外,在这一阶段中,initializeDecryptUnit函数将初始化解密相关的资源。 第二阶段就是媒体数据读取,针对每一个数据基元,DRMExtrator都会先通过SEO靠我MPEG4Extractor取得未解密的原始数据,然后通过decrypt函数来请求DRM Plugin进行解密。解密后的数据会被放到另外一处缓存中供Codec使用。如果解密失败,decrypt将会返回SEO靠我错误,故播放器将无法解析这些数据。 媒体播放完毕后将释放播放资源。和DRM相关的资源将由finalizeDecryptUnit来释放。 回顾上述流程,对ES Based DRM的特点是,不论用户是否有SEO靠我权限,播放器都能读取到媒体数据。

DRM 媒体文件播放 - Container Based DRM播放流程:

和ES Based DRM截然不同的是Container Based DRM。受控于这种DRMSEO靠我管理的媒体文件在被读取时就会进行DRM的权限验证,如果验证失败,则无法从中读取到数据。故Container Based DRM最关键的是其pread接口,相关流程如下图所示:

如上图:

首先要进行的工作仍SEO靠我是判别数据格式和DRM类型并创建DrmManagerClient。这一过程和ES Based DRM流程相同,此处不拟赘述。 接下来需创建MediaExtractor实例。与ES Based DRM不SEO靠我同的是,Container Based DRM在播放时无需创建DRMExtractor,而是直接创建MPEG4Extractor,并在该MediaExtractor中设定DRM的标识。 ContainSEO靠我er Based DRM关键在于pread函数。当MediaExtractor从FileSource中提取数据时,readAt最终通过DrmManagerClient的pread函数来访问DrmManSEO靠我ager以从中读取数据。DrmManager将调用具体的DRMPlugin实现的pread。数据的权限检查和解密的工作都在该DRMPlugin完成。如果DRM解密失败,pread将不会得到数据。

DRMSEO靠我媒体文件播放 - DRM文件的读取:

DRM 媒体文件播放 - DRM文件的播放:

Android平台中播放Widevine DRM媒体:

有两种播放方法:

第一种方法和前文介绍的一样。Widevine DRSEO靠我M按照ES Based的流程进行播放。但和一般DRM不同的是,Widevine使用的Extractor是WVMExtractor,而不是DRMExtractor。

第二种方法是MediaCodec模式,SEO靠我相关结构如下图。

MediaCodec、MediaCrypto以Java API的形式直接暴露给应用层。这样,应用层能够控制解码、解密的过程。 Crypto Plugin是实际完成解密的模块,其结构和前SEO靠我文提到的DRM Plugin有所不同。 需要特别指出的是,Android目前对MediaCodec模式支持还不是很完善。根据笔者的试验,一些市面上流行的高端Android 4.1手机还不支持这种播放方SEO靠我式。 另外,Widevine的代码结构大体可分为三部分: 第一部分是Android中的基本框架,包括WVMExtractor等。这部分代码在AOSP中都可以看到,属于Open Source的内容。这部SEO靠我分代码大多没有实质性内容,相关功能的实现封装在第二部分的专利代码包中。 第二部分是Widevine的专利代码包。这部分代码需要得到Google授权后才能得到。该包提供了很多Widevine专用库用于完SEO靠我成Widevine DRM权限检查和解密。同时,它还提供了一些Sample App用于测试。 第三部分是手机厂商自身的安全认证。Widevine是一个很强的版权控制体系,它甚至可在硬件层与厂商的安全机SEO靠我制绑定。很多知名的手机厂商都在boot等底层中加入自己的安全机制,只有通过可信赖的boot loader进行刷机才能得到具有正常权限的手机软件,并可以使用Widevine。这也是为什么很多破解的手机无SEO靠我法使用Widevine的原因。 由于专利代码包和厂商安全机制都涉及到版权问题,故本文就不拟对Widevine做进一步讨论了。如果厂商希望在自己的产品上也搭载Widevine,那么首先需要与GoogleSEO靠我联系。Google会提供Widevine的专业培训。

OMA DRM文件分为以下三种类型: 

forward lock 类型: 后缀为.dm 文件。文件由文件头和媒体内容组成,媒体内容是二进制明码。文件头部SEO靠我分,记录了媒体内容编码方式,媒体内容类型等。该类型不允许通过设备应用转发给其他设备。针对手机举例,不允许作为 Mms,Email 附件,不允许通过蓝牙共享。可以在本机上无限制使用,一般为铃声。(forSEO靠我ward lock只加密头信息,不加密媒体内容???加密算法不管数据类型,只对二进制数据进行加密)Combined delivery类型: 后缀为.dm 文件。文件有两部分组成,第一部分是权限信息,第SEO靠我二部分为媒体信息, 文件内容也是明码形式。权限信息为 info结构,并包含有一个 content-id 元素,媒体信息部分也包含有一个文件头有 content-id,这两个 id 完全相同,并且这两个SEO靠我不同 id 一定是对应到 DRM 服务器上不同的媒体文件。 该类型文件的使用由其中包含的权限文件进行约束。Seperate delivery类型: 后缀为.dcf 文件。它的文件由文件头与媒体信息组成SEO靠我,文件头有 content-id, 媒体信息是加密的。它的权限文件是通过 wap push 或者其他形式单独传送的,后缀为.drc 形式。权限文件会包括 id 以及 key这两个节点。

forward SEO靠我lock 类型:

forward lock 类型的识别:

1) 以 46 57 4C 4B 四个字符开始

2) 第五个字符为00

满足以上两个标准就是orward lock类型的文件。

用特定工具,或者是手动编SEO靠我写,将一个普通的视频文件(例如mp4) 生成一个符合标准的DRM文件,放到服务器上;用户付费后,用下载工具将此DRM文件下载到本地;下载工具必须支持这种DRM文件,下载的时候,其内部实际上是把此DRMSEO靠我文件进行了加密,加密算法可以采用AES等算法。密钥应该是每台机器生成一个唯一的密钥,加密和解密密钥是相同的。这样,在本地端就有了一个加密的媒体文件,用户可以在本机上进行播放,但如果COPY到另外的机器SEO靠我上,由于密钥不同,所以不以成功解密,这样就达到了ForwardLock的目的。

Combined delivery类型:

combined delivery类型的识别:

1) 以 46 57 4C 4B 四SEO靠我个字符开始

2) 第五个字符为01

满足以上两个标准就是combined delivery类型的文件。

文件有两部分组成,第一部分是权限信息,第二部分为媒体信息, 文件内容也是明码形式。权限信息为xml结构SEO靠我,并包含有一个content-id元素,媒体信息部分也包含有一个content-id,这两个id完全相同。不同id一定是对应到DRM服务器上不同的媒体文件。该类型文件的使用由其中包含的权限文件进行约束SEO靠我

目前的CD文件有RO权限.RO+Content绑定在一起,大致包括下列几种类型: 

有次数限制的,如count 5 times,只允许播放5次 

有期限限制的,如2013年7月8日12点—2013年7月10SEO靠我日18点

期限截止的, 如2013年9月5日之前. 

次数和期限结合的,,如2013年7月10日—-2013年7月13日,count 5,,就是在这期间只能播放5次

且用户不可以手动更改时间来把已过期的CD文SEO靠我件变为有效的文件。

Seperate Delivery:

SD的文件和CD文件类似,只是用户需要去服务业者的网络上先去下载内容文件.当下载内容文件后.还得花钱去购买权限RO。只有获得有效的RO,才可以播放SEO靠我SD文件,同CD一样,SD文件也是无法通过更改手机时间来把已过期的SD文件变为有效的文件。SD文件可以通过MMS进行发送.但是发送之前,用户必须购买SD的RO权限才可以经过MMS,BT,EMAIL等发SEO靠我送。如果用户只是用SD的内容文件去发送,可以发送出去,但是接收端的用户也是无法使用该SD文件的。对于.dcf内容文件,它的文件由文件头与媒体信息组成,文件头有content-id, 媒体信息是加密的。SEO靠我

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2