成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DRM in Android詳解

移動開發(fā) Android
RM,英文全稱為Digital Rights Management,譯為數(shù)字版權(quán)管理。它是目前業(yè)界使用非常廣泛的一種數(shù)字內(nèi)容版權(quán)保護(hù)技術(shù)。隨著知識產(chǎn)權(quán)保護(hù)受重視的程度日益提高,快速攻城略地得Android智能手機是如何利用DRM來有效保護(hù)數(shù)字版權(quán)的呢?本文將通過剖析Android中的DRM框架以及相關(guān)工作流程來向讀者揭示DRM的神秘面紗。

RM,英文全稱為Digital Rights Management,譯為數(shù)字版權(quán)管理。它是目前業(yè)界使用非常廣泛的一種數(shù)字內(nèi)容版權(quán)保護(hù)技術(shù)。隨著知識產(chǎn)權(quán)保護(hù)受重視的程度日益提高,快速攻城略地得Android智能手機是如何利用DRM來有效保護(hù)數(shù)字版權(quán)的呢?本文將通過剖析Android中的DRM框架以及相關(guān)工作流程來向讀者揭示DRM的神秘面紗。

一  DRM架構(gòu)介紹

嚴(yán)格來講,DRM不是一項技術(shù),而是一類技術(shù)。很多機構(gòu)和聯(lián)盟都提出過相應(yīng)的DRM標(biāo)準(zhǔn)。例如Open Mobile Alliance推出的OMA DRM、Marlin Developer Community提出的Marlin DRM,而Google則通過收購Widevine公司推出了Widevine DRM。

從Android智能終端來看,Google的原生Android(Android Open Source Project,簡稱AOSP)系統(tǒng)僅僅集成了OMA DRM V1的一部分功能,它遠(yuǎn)未構(gòu)成一個完整的DRM解決方案。在這種情況下,設(shè)備廠商只能根據(jù)情況選擇合適的DRM解決方案并集成到Android平臺中來。例如,手機廠商可以通過Google的授權(quán)以獲取Widevine DRM對應(yīng)的軟件包從而將Widevine DRM集成到自己的產(chǎn)品中。

為了方便設(shè)備廠商的集成,Android設(shè)計了一個通用的DRM軟件框架,不同的DRM解決方案可通過Plugin的方式集成到Android系統(tǒng)中。圖1所示為Android中的DRM軟件架構(gòu)。

圖1  Android中DRM軟件架構(gòu)

由圖1可知:

  • DRM Framework API模塊是Framework層暴露給App的接口。該模塊中最主要的類是DrmManagerClient。
  • DRM Framework API模塊通過Binder機制和位于drmserver進(jìn)程(以Android 4.1為例,drmserver的代碼位于framework/av/drm/drmserver)中的DRM Manager模塊通信。DRM Manager加載并管理系統(tǒng)中所有的DRM插件。
  • DRM Plugins是真正實現(xiàn)權(quán)限管理、數(shù)字內(nèi)容解密等工作的模塊。根據(jù)DRM標(biāo)準(zhǔn)的不同,這些Plugins的實現(xiàn)亦不相同。另外,一個手機可能會集成多個DRM Plugin。這是因為媒體文件如果采用不同的DRM解決方案進(jìn)行加密的話,手機在播放它們時,DRM Manager需找到對應(yīng)的DRM Plugin以進(jìn)行解密。

圖2所示為DRM架構(gòu)中幾個重要的類及其關(guān)系。

圖2  Android中DRM架構(gòu)中重要類圖

由圖2可知:

  • FileSource代表一個媒體文件。如果媒體文件中有DRM信息,它將創(chuàng)建一個DrmManagerClient對象。該對象用于處理媒體文件中和DRM相關(guān)的操作。DrmManagerClient內(nèi)部通過DrmManagerClientImpl和位于drmserver進(jìn)程中的DrmManagerService進(jìn)行跨Binder通信。
  • MediaExtractor類封裝了用于解析媒體文件中元數(shù)據(jù)的相關(guān)函數(shù)。對于DRM來說,系統(tǒng)會根據(jù)的DRM種類創(chuàng)建不同的MediaExtractor子類。和FileSource類似,MediaExtractor也通過DrmManagerClient和drmserver通信。
  • DrmManagerService運行于drmserver進(jìn)程中,它是整個DRM框架的核心。DrmManagerService借助DrmManager管理系統(tǒng)中的DRM插件。
  • DRM插件必須實現(xiàn)IDrmEngine接口。為了方便開發(fā)者,Android提供了DrmEngineBase類,該類繼承了IDrmEngine接口并實現(xiàn)了一些通用的接口函數(shù)。這樣,DRM Plugin只需要從DrmEngineBase派生即可。
  • 如前文所述,DRM框架中真正完成DRM處理工作的是DRMPlugins,這些Plugins大都需要得到相關(guān)機構(gòu)的授權(quán)后才能得到相應(yīng)的專利代碼包。圖1中列出了三個DRM Plugin。其中FwdLockEngine(OMA-V1的Forward Lock)由AOSP提供。Marlin Plugin和WidevinePlugin則需要相關(guān)DRM機構(gòu)提供專利代碼包。

下面來看看Android中DRM的工作流程。

二  DRM工作流程介紹

2.1  DrmManagerService的初始化

DRM的工作流程和多媒體播放密切相關(guān)。首先來了解一下DrmManagerService的創(chuàng)建過程,相關(guān)流程如圖3所示:

圖3  DrmManagerService啟動流程

由圖3可知:

  • DrmManagerService實例對象由drmserver進(jìn)程在main函數(shù)中調(diào)用instantiate創(chuàng)建。
  • DrmManagerService內(nèi)部會創(chuàng)建一個DrmManager實例對象并調(diào)用loadPlugins來加載設(shè)備可能提供的DRM Plugin。DRM Plugin通過動態(tài)庫的方式集成到設(shè)置中去。Android 4.1中有兩個目錄可存放DRM Plugin。一個是/vendor/lib/drm/,例如Widevine對應(yīng)的libdrmwvmplugin.so一般放在這個目錄中。另一個目錄是/system/lib/drm/。每一個DRM Plugin對應(yīng)為一個IDrmManager實例。所有被加載的DRM Plugin由DrmManager來統(tǒng)一管理。
  • DrmManagerService最后將通過addService把自己注冊到Binder系統(tǒng)中以為廣大客戶端服務(wù)。

下面來介紹DRM的工作流程。Android支持的DRM播放方式分為兩種:

  • 一種是基于基本碼流的(Elementary Stream Based,簡稱ES Based)播放方式。目前Widevine DRM、Marline DRM都屬于這一種類型。
  • 另一種是基于容器的(Container Base)播放方式,目前OMA DRM支持這種方法。

這兩種不同的方式在播放流程上不盡相同。下文將以一個播放具有DRM保護(hù)的MP4文件為例,介紹DRM的工作流程。首先來看ES BasedDRM媒體播放工作流程

2.2  ES BasedDRM播放流程

ES Based DRM意味著每一個數(shù)據(jù)基元在播放時都需要解密。這種DRM的媒體文件或流可以使用普通方式正常讀取,但讀取出來的數(shù)據(jù)是經(jīng)過加密的。如果不能對數(shù)據(jù)正確解密,那么該數(shù)據(jù)將無法正常播放。

在播放媒體文件之前,播放器首先要識別該文件是否被DRM保護(hù)。如果受DRM保護(hù)的話,還行初始化對應(yīng)的DRM插件。這部分工作所涉及的流程如圖4所示:

圖4  ES BasedDRM插件初始化

#p#

由圖4可知:

  • MediaExtractor首先通過sniff函數(shù)檢查媒體內(nèi)容的類型,然后創(chuàng)建相應(yīng)的Extractor來分析數(shù)據(jù)。在DRM檢查開啟的情況下,SniffDRM函數(shù)就會被用來檢查文件是否有DRM控制。
  • SniffDRM將調(diào)用DataSource中的DrmInitialization函數(shù),從而在DataSource中創(chuàng)建一個DrmManagerClient實例。如此,MediaExtractor就將DataSource與DrmManagerService聯(lián)系起來。
  • DrmInitialization函數(shù)非常重要,其主要工作包括:

(1)調(diào)用openDecryptSession,該函數(shù)內(nèi)部會根據(jù)文件中的DRM信息來初始化正確的DRM Plugin(Widevine、OMV,還是其他DRM類型)。

(2)創(chuàng)建DecryptSession,并將DRM信息封裝在DecryptHandler實例中傳給FileSource。

  • DrmInitialization之后,SniffDRM會通過DecryptHandler來判斷該文件是否有DRM控制,并分析出該DRM是ES Based,還是Container Based。如果屬于ES Based DRM,MediaExtractor會創(chuàng)建一個DRMExtrator,而在DRMExtrator中,會創(chuàng)建一個MPEG4Extractor。

MediaExtrator創(chuàng)建完后,播放器即可開始播放。ES Based DRM播放相關(guān)流程如圖5所示:

圖5  ES Based的DRM媒體文件播放流程

圖5所示的流程圖可分為三個階段:

  • 第一個階段是資源初始化過程。該過程中,媒體播放器將通過getTrack以后獲取一個媒體文件中代表媒體數(shù)據(jù)的DRMSource實例,DRMSource只負(fù)責(zé)DRM的控制和解密,而實際媒體數(shù)據(jù)的分析仍交給MPEG4Extractor來完成。對于播放器來說,它只和DRMExtrator和DRMSource交互。另外,在這一階段中,initializeDecryptUnit函數(shù)將初始化解密相關(guān)的資源。
  • 第二階段就是媒體數(shù)據(jù)讀取,針對每一個數(shù)據(jù)基元,DRMExtrator都會先通過MPEG4Extractor取得未解密的原始數(shù)據(jù),然后通過decrypt函數(shù)來請求DRM Plugin進(jìn)行解密。解密后的數(shù)據(jù)會被放到另外一處緩存中供Codec使用。如果解密失敗,decrypt將會返回錯誤,故播放器將無法解析這些數(shù)據(jù)。
  • 媒體播放完畢后將釋放播放資源。和DRM相關(guān)的資源將由finalizeDecryptUnit來釋放。

回顧上述流程,對ES Based DRM的特點是,不論用戶是否有權(quán)限,播放器都能讀取到媒體數(shù)據(jù)。

下面來看看Container Based DRM的播放流程。

2.3  Container Based DRM播放流程

和ES Based DRM截然不同的是Container Based DRM。受控于這種DRM管理的媒體文件在被讀取時就會進(jìn)行DRM的權(quán)限驗證,如果驗證失敗,則無法從中讀取到數(shù)據(jù)。故Container Based DRM最關(guān)鍵的是其pread接口,相關(guān)流程如圖6所示:

圖6  ContainerBasedDRM播放流程圖

如圖6可知:

  • 首先要進(jìn)行的工作仍是判別數(shù)據(jù)格式和DRM類型并創(chuàng)建DrmManagerClient。這一過程和ES Based DRM流程相同,此處不擬贅述。
  • 接下來需創(chuàng)建MediaExtractor實例。與ES Based DRM不同的是,Container Based DRM在播放時無需創(chuàng)建DRMExtractor,而是直接創(chuàng)建MPEG4Extractor,并在該MediaExtractor中設(shè)定DRM的標(biāo)識。
  • Container Based DRM關(guān)鍵在于pread函數(shù)。當(dāng)MediaExtractor從FileSource中提取數(shù)據(jù)時,readAt最終通過DrmManagerClient的pread函數(shù)來訪問DrmManager以從中讀取數(shù)據(jù)。DrmManager將調(diào)用具體的DRMPlugin實現(xiàn)的pread。數(shù)據(jù)的權(quán)限檢查和解密的工作都在該DRMPlugin完成。如果DRM解密失敗,pread將不會得到數(shù)據(jù)。

上文介紹了Android平臺中DRM播放的大體流程。下面來看看Google主推的Widevine DRM。

三  Widevine DRM介紹

2010年12月,Google不惜重金將視頻數(shù)字版權(quán)管理軟件公司W(wǎng)idevine招安。現(xiàn)在看來,Google的這一招為Android陣營增添了一員上將,有Widevine坐陣中軍,Android就有實力在數(shù)字內(nèi)容這片戰(zhàn)場上與已故喬幫主的蘋果一較高下。

在收購Widevine之前,Android沒有系統(tǒng)的數(shù)字版權(quán)保護(hù)機制,而蘋果則在iTunes、iPod時代就建立了完善的版權(quán)體系,這讓很多內(nèi)容提供商更愿意在iOS上發(fā)布自己的數(shù)字內(nèi)容,從而使得iOS的生態(tài)系統(tǒng)更加豐富和成熟。Widevine的引入彌補了Android在這方面的短板,它是幫助Android成為當(dāng)今移動OS霸主的功臣之一。

Android從3.0開始就支持Widevine,這距離Google收購Widevine僅僅過去了三個月,可見Google對于數(shù)字版權(quán)保護(hù)的迫切性。現(xiàn)在Widevine已經(jīng)成為GMS(Google Mobile Service)中必備的內(nèi)容,所有想要得到GMS的手機廠商,都需要根據(jù)GMS的要求搭載Widevine。

作為Google帳下的愛將,Google為支持Widevine也煞費苦心。目前Android平臺中播放Widevine DRM媒體有兩種方法:

  • 第一種方法和前文介紹的一樣。Widevine DRM按照ES Based的流程進(jìn)行播放。但和一般DRM不同的是,Widevine使用的Extractor是WVMExtractor,而不是DRMExtractor。
  • 第二種方法是MediaCodec模式,相關(guān)結(jié)構(gòu)如圖7所示。

圖7  Widevine Crypto Plugin

由圖7可知:

  • MediaCodec、MediaCrypto以Java API的形式直接暴露給應(yīng)用層。這樣,應(yīng)用層能夠控制解碼、解密的過程。
  • Crypto Plugin是實際完成解密的模塊,其結(jié)構(gòu)和前文提到的DRM Plugin有所不同。

需要特別指出的是,Android目前對MediaCodec模式支持還不是很完善。根據(jù)筆者的試驗,一些市面上流行的高端Android 4.1手機還不支持這種播放方式。

另外,Widevine的代碼結(jié)構(gòu)大體可分為三部分:

  • 第一部分是Android中的基本框架,包括WVMExtractor等。這部分代碼在AOSP中都可以看到,屬于Open Source的內(nèi)容。這部分代碼大多沒有實質(zhì)性內(nèi)容,相關(guān)功能的實現(xiàn)封裝在第二部分的專利代碼包中。
  • 第二部分是Widevine的專利代碼包。這部分代碼需要得到Google授權(quán)后才能得到。該包提供了很多Widevine專用庫用于完成Widevine DRM權(quán)限檢查和解密。同時,它還提供了一些Sample App用于測試。
  • 第三部分是手機廠商自身的安全認(rèn)證。Widevine是一個很強的版權(quán)控制體系,它甚至可在硬件層與廠商的安全機制綁定。很多知名的手機廠商都在boot等底層中加入自己的安全機制,只有通過可信賴的boot loader進(jìn)行刷機才能得到具有正常權(quán)限的手機軟件,并可以使用Widevine。這也是為什么很多破解的手機無法使用Widevine的原因。

由于專利代碼包和廠商安全機制都涉及到版權(quán)問題,故本文就不擬對Widevine做進(jìn)一步討論了。如果廠商希望在自己的產(chǎn)品上也搭載Widevine,那么首先需要與Google聯(lián)系。Google會提供Widevine的專業(yè)培訓(xùn)。

四  總結(jié)

本文主要講述了Android中DRM的運行機制。事實上,DRM是一個不易觸及的領(lǐng)域。由于其安全性高,保密性強,世界上真正掌握DRM核心技術(shù)的公司并不多。根據(jù)筆者的調(diào)查,DRM產(chǎn)業(yè)鏈中的相關(guān)者大概可分為如下三類:

  • 第一類是制定DRM標(biāo)準(zhǔn)的公司或機構(gòu),他們掌握DRM的核心技術(shù),對外推廣自己的DRM標(biāo)準(zhǔn),為需要搭載DRM的公司提供支持。
  • 第二類是數(shù)字內(nèi)容提供商,他們是最迫切應(yīng)用DRM來保護(hù)自己數(shù)字版權(quán)的人,他們會向提供標(biāo)準(zhǔn)的公司夠買DRM技術(shù),在服務(wù)器端加密,并制定數(shù)字內(nèi)容的買賣租賃機制以及相應(yīng)的密鑰配發(fā)原則。
  • 第三類是終端設(shè)備制造商,為了讓自己的設(shè)備具有更廣泛的應(yīng)用性,他們需要搭載主流的DRM以適應(yīng)市場需求,在搭載過程中,他們也需要標(biāo)準(zhǔn)公司的支持,拿到一些有專利的代碼包,有時還會與內(nèi)容提供商合作。當(dāng)然,還有的時候,一家公司會擔(dān)當(dāng)其中的兩個或全部角色,比如亞馬遜,他即是內(nèi)容提供商,提供電子書籍等內(nèi)容,又是終端設(shè)備商,出品Kindle Fire這樣的終端設(shè)備,這樣做可以讓他把內(nèi)容和終端更好地整合在一起。

然而,國內(nèi)DRM并不非常受歡迎。筆者對于國內(nèi)的版權(quán)保護(hù)并無批評之意。只是由于國內(nèi)數(shù)字內(nèi)容發(fā)展的過程比較特殊,最終形成了當(dāng)下這種以免費內(nèi)容占主流的市場氛圍和消費習(xí)慣。對于國內(nèi)市場,任何一種強行主推DRM的收費模式的方法目前看起來還不合適。相信很多互聯(lián)網(wǎng)巨頭已經(jīng)在其長期的摸索中體會了這一點。

當(dāng)然這并不是說DRM在國內(nèi)沒有市場。目前很多公司在免費業(yè)務(wù)之上都加入了基于更高質(zhì)量的收費業(yè)務(wù),從而豐富了盈利的方式。更為重要的是,現(xiàn)在很多中國公司都在向國外擴張,而中國公司走到外面,就必須入鄉(xiāng)隨俗,遵從國外的游戲規(guī)則。這時,數(shù)字版權(quán)保護(hù)以及建立在其之上的DRM技術(shù)就成了一個必須要重視的問題。在此,筆者真心希望有一天國內(nèi)能有更多優(yōu)秀的公司走出國門,在中國模式和世界模式間找到平衡點,將我們自己的數(shù)字內(nèi)容和終端產(chǎn)品推向世界。

責(zé)任編輯:張葉青 來源: 博客園
相關(guān)推薦

2011-05-17 14:01:46

DRMGameloftAndroid

2014-07-28 10:09:30

Android

2011-05-27 15:02:15

Android ListView

2013-11-14 10:42:48

MTPAndroid

2014-07-24 09:11:34

2017-01-11 19:05:45

AndroidAndroid Loa詳解

2021-06-01 08:37:45

Linuxdrm內(nèi)存

2013-12-25 09:34:26

Android SDKAndroid組件

2010-07-13 09:02:19

Widget開發(fā)

2021-09-07 08:49:35

Android

2011-09-09 20:14:58

Android Wid

2013-01-11 13:48:41

Android開發(fā)組件Notificatio

2013-01-10 14:39:28

Android開發(fā)Content Pro組件

2013-05-13 10:24:05

HTML 5

2010-02-03 15:59:08

Android組件

2010-01-28 14:07:59

Android Ale

2013-01-05 09:21:55

Ubuntu for UbuntuAndroid

2009-11-30 16:38:30

Android

2016-03-17 13:19:01

2011-05-31 09:36:46

Android 布局屬性
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本一二区视频 | 中文字幕亚洲在线 | 亚洲一区二区精品视频 | 国内av在线 | 亚洲精品久久久久久首妖 | 不卡一区二区在线观看 | 日韩中文电影 | 365夜爽爽欧美性午夜免费视频 | 久久亚洲欧美日韩精品专区 | 成人精品一区二区三区中文字幕 | 久久精品a级毛片 | 国产精品夜色一区二区三区 | 欧美日韩福利视频 | 亚洲一区二区三区在线 | 久久69精品久久久久久久电影好 | 西西裸体做爰视频 | 日韩成人免费 | 美女黄色在线观看 | 一区二区播放 | 久久精品亚洲 | 国产精品一区二区欧美 | 男女激情网站免费 | 黄色一级大片在线免费看产 | 久久久久久蜜桃一区二区 | 亚洲国产精品久久人人爱 | 最新国产精品精品视频 | aaaaaaa片毛片免费观看 | 中文字幕视频在线 | 91伊人 | 久久精品免费观看 | 欧美精品网站 | 国产精品视频久久久 | 一区二区国产精品 | 操久久 | 久久久精 | 亚洲黄色成人网 | 黄色av大片| 天堂中文在线播放 | 一级a爱片性色毛片免费 | 国产精品欧美一区二区三区 | 亚洲免费一区二区 |