DRM in Android

本文详细探讨了Android系统中DRM在OMADRM1.0和libDrmFramework之间的支持与区别,深入解析了OMADRM1.0的MIME类型及其在Java中的应用,以及DrmFramework在Android中的结构与使用场景。同时,提供了关键代码位置及参考文献,为开发者深入了解Android DRM技术提供指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1, 总体

DRM在Android中的支持目前应该有两个部分,一部分是早期版本中就存在的对于OMA DRM 1.0的支持,还有一部分是在Android 4.0版本之后提出来的libDrmFramework,这两个部分我在代码中没有看到交集。我认为libDrmFramework应该是大势所趋,框架才能够把不同的实现统一起来,为上层提供相同的接口,尤其Android系统这种开源的项目,要规范大家的行为就必须把有些东西框架,进行限制。下面的图大体上体现了这两部分的结构:


相关代码可以再Android的如下目录中找到。


OMA DRM 1.0:

Frameworks/base/media/libdrm/mobile1

Frameworks/base/media/java/android/drm/mobile1

DrmFramework:

Frameworks/av/drm

Frameworks/base/drm/java/android/drm


2, OMA DRM 1.0

OMA DRM 1.0有几种的MIME,具体如下:


      1.   Forward-Lock

          application/vnd.oma.drm.message (.dm)

      2.   Combineddelivery

          application/vnd.oma.drm.message andapplication/vnd.oma.drm.rights+xml (.dm)

      3.   Separatedelivery

          application/vnd.oma.drm.rights+xml, (.dr)

          application/vnd.oma.drm.rights+wbxml, (.drc)

         application/vnd.oma.drm.content(.dcf)

这个模块中所有的处理都是在session中进行的,通过调用SVC_drm_openSession() 可以打开一个session,drm file依据MIME将在这个session中进行解析,解析结果将保存在两个文件中,一个是 /data/drm/rights/uid.txt用来保存uid和id的对应关系,uid是一个drm file的唯一标识,还有一个文件 /data/drm/rights/id.info 用来保存right object,这样在下次打开同一个文件的时候就可通过uid找到其rightobject了。关于right object的解析可以参考 drm_relParser() 函数,right object管理在drm_rights_manager.c中实现。如果有一个drm right file,可以直接调用SVC_drm_installRights()进行解析,并把rightobject安装到系统中。

OMA DRM 1.0在Java还是可以看到应用的,具体可以参考Frameworks/base/media/java/android/drm/mobile1/DrmRawContent,支持ringtone和image。


3.DrmFramework

DrmFramework的类图如下:

Drm所有的特性最终都是在plugin中实现的,原生的代码中只是提供了一个框架,实现了两个plugin,这两个plugin并没有太多的实际意义,更多的plugin应该由第三方或者系统提供者提供,上图只是native层的结构,关于Java层的可以参考代码:

Frameworks/base/drm/java/android/drm


在代码中我没有发现对于Java层框架的应用,但是在native层这个框架被应用到了player中,具体类图如下:

SniffDRM() register inDataSource by RegisterDefaultSniffers()

One source set to AwesomePlayer, the finishSetDataSouce_l() will be called

SniffDRM() be called if the MIME of source is unknown

SniffDRM() callsource-> DrmInitialization(), then one drm session will be opened

mDectyptHandle be set inChromiumHTTPDataSource or NuCachedSource2 if the plugin detect the MIME successful

DRMExtractor be createdby MediaExtractor::Create() in finishSetDataSouce_l()

DecryptHandle and DrmManagerClientbe retrieved by source->getDrmInfo() in DRMExtractor

Now the DRMExtractor cancommunicate with drm session

3.一些参考

Standardization of OMADRM:

http://www.nttdocomo.co.jp/english/binary/pdf/corporate/technology/rd/technical_journal/bn/vol6_4/vol6_4_043en.pdf

 

DRM in Andoird:

http://developer.samsung.com/android/technical-docs/DRM-in-Android

Android developers DRM:

http://developer.android.com/reference/android/drm/package-summary.html

 

Stagefright :

http://blog.youkuaiyun.com/flyingqr/article/details/8576537



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值