Android Media Framework(1): 總綱

Android系統(tǒng)整體架構(gòu):

我們先看一下多媒體框架在整個Android系統(tǒng)所處的位置


Android多媒體框架opencore和stagefright分析

從框架圖可以看出Media Framework處于Libraries這一層迅矛,這層的Library不是用Java實現(xiàn)谴返,一般是C/C++實現(xiàn)矾睦,它們通過Java的JNI方式調(diào)用枪狂。


Android多媒體框架opencore和stagefright分析

Android系統(tǒng)的多媒體業(yè)務(wù):

Android多媒體框架opencore和stagefright分析

多媒體框架變動:

Android froyo版本多媒體引擎做了變動,新添加了stagefright框架,并且默認情況android選擇stagefright藻茂,棄用之前的opencore,僅僅對opencore中的omx-component部分做了引用。Stagefright自android2.0后才添加辨赐,其穩(wěn)定性有待商榷优俘,是否存在bug也未知,opencore自android誕生起便存在掀序,穩(wěn)定性有保障帆焕。
Opencore上的開發(fā)較stagefright上要復雜耗時些。不過森枪,從目前android代碼看视搏,opencore有被stagefright取代的趨勢,從Android2.3 (Gingerbread) 開始县袱,預設(shè)的多媒體框架為 Stagefright浑娜。


Android多媒體框架opencore和stagefright分析

以MediaPlayer為例,我們先看一下多媒體的簡單框架式散。


Android多媒體框架opencore和stagefright分析

上圖可知筋遭,stagefright是在MediaPlayerService這一層加入的,和opencore是并列的暴拄,在選用opencore還是stagefright的代碼切換上也非常容易漓滔。

OpenCore框架介紹:

Open Core是Android 多媒體框架的核心,所有Android平臺的音視頻采集乖篷,播放的操作都是通過它來實現(xiàn)响驴。它也被稱為PV(Packet Video), Packet Video是一家專門提供多媒體解決方案的公司。
通過Open Core程序員可以方便快速的開發(fā)出想要的多媒體應(yīng)用程序撕蔼,例如:音視頻的采集豁鲤,回放,視頻會議鲸沮,實時的流媒體播放等等應(yīng)用琳骡。在實際開發(fā)中我們并不會過多的研究Open Core的實現(xiàn),Android提供了上層的Media API給開發(fā)人員使用讼溺,MediaPlayer和MediaRecorder楣号。
CODEC(編解碼器)使用OpenMAX IL interface 接口進行擴展,可以方便得支持hardware / software codec plug-ins怒坯,支持的格式包括:MPEG4炫狱、H.264、MP3剔猿、AAC毕荐、AMR、JPG艳馒、PNG、GIF等。


Android多媒體框架opencore和stagefright分析

Open Core的代碼在Android代碼的External/Opencore目錄中弄慰。這個目錄是OpenCore的根目錄第美,其中包含的子目錄如下所示:
· android:這里面是一個上層的庫,它實現(xiàn)了一個為Android使用的音視頻采集陆爽,播放的接口什往,和DRM數(shù)字版權(quán)管理的接口實現(xiàn)。
· baselibs:包含數(shù)據(jù)結(jié)構(gòu)和線程安全等內(nèi)容的底層庫
· codecs_v2:音視頻的編解碼器慌闭,基于OpenMAX實現(xiàn)
· engines:核心部分别威,多媒體引擎的實現(xiàn)
· extern_libs_v2:包含了khronos的OpenMAX的頭文件
· fileformats:文件格式的解析(parser)工具
· nodes:提供一些PVMF的NODE,主要是編解碼和文件解析方面的驴剔。
· oscl:操作系統(tǒng)兼容庫
· pvmi: 輸入輸出控制的抽象接口
· protocols:主要是與網(wǎng)絡(luò)相關(guān)的RTSP省古、RTP、HTTP等協(xié)議的相關(guān)內(nèi)容
· pvcommon:pvcommon庫文件的Android.mk文件丧失,沒有源文件豺妓。
· pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件布讹。
· pvauthor:pvauthor庫文件的Android.mk文件琳拭,沒有源文件。
· tools_v2:編譯工具以及一些可注冊的模塊描验。


Android多媒體框架opencore和stagefright分析

StageFright框架介紹:
具體stagefright的內(nèi)部變動白嘁,可見下圖概述。Stagefright并沒有完全拋棄opencore膘流,主要是做了一個OMX層絮缅,用來引用opencore的omx-component部分。而stagefright內(nèi)部而言睡扬,與opencore是完全不同的設(shè)計盟蚣。


Android多媒體框架opencore和stagefright分析

Stagefright的內(nèi)部組成模塊


Android多媒體框架opencore和stagefright分析

AwesomePlayer的內(nèi)部組成模塊
Android多媒體框架opencore和stagefright分析

調(diào)用openMAX IL層時的Video Buffer傳輸流程
Android多媒體框架opencore和stagefright分析

Video Rendering內(nèi)部組成模塊


Android多媒體框架opencore和stagefright分析

Video Playback流程
Android多媒體框架opencore和stagefright分析

VideoEvent事件驅(qū)動
Android多媒體框架opencore和stagefright分析

Audio Playback流程
Android多媒體框架opencore和stagefright分析

awesomeplayer初始化流程
Android多媒體框架opencore和stagefright分析

兩個框架之間的具體差異:
Opencore所支持的格式


Android多媒體框架opencore和stagefright分析

Stagefright所支持的格式


Android多媒體框架opencore和stagefright分析

Opencore與stagefright兩套機制,對于我們的開發(fā)而言卖怜,主要體現(xiàn)在parser和codec部分屎开。Opencore方面,必須按照其規(guī)范完成相應(yīng)的parser-node马靠,codec則要按照omx規(guī)范實現(xiàn)相應(yīng)的component奄抽。Stagefright方面,則要按照其規(guī)范實現(xiàn)相應(yīng)的extractor和decoder甩鳄。 最基本的實現(xiàn)逞度,二者是相同的,可以共用妙啃,差別在封裝上档泽,opencore難度和工作量要大俊戳。

Opencore處理流程如下圖示


Android多媒體框架opencore和stagefright分析

engine分別創(chuàng)建audio/video datapath,parser/dec/sink作為node節(jié)點由各自datapath連接起來馆匿,后續(xù)node節(jié)點由統(tǒng)一調(diào)度器調(diào)度抑胎。
Stagefright處理流程如下圖示。


Android多媒體框架opencore和stagefright分析

Audioplayer為AwesomePlayer的成員渐北,audioplayer通過callback來驅(qū)動數(shù)據(jù)的獲取阿逃,awesomeplayer則是通過videoevent來驅(qū)動。二者有個共性赃蛛,就是數(shù)據(jù)的獲取都抽象成mSource->Read()來完成恃锉,且read內(nèi)部把parser和dec綁在一起。
Opencore和stagefright處理機制對比:

(1)Opencore的parser與dec是分離的呕臂,各行其職破托;stagefright則是綁在一起作為一個獨立的原子操作。
(2)Stagefright通過callback和videoevent來驅(qū)動數(shù)據(jù)輸出诵闭;opencore是通過sink-node節(jié)點控制輸出炼团。
(3)Opencore中parser/dec/sink是并行處理的;stagefright中為串行處理疏尿。
Opencore有一個主clock瘟芝,audio/video分別與該主clock同步,作為輸出的判定依據(jù)褥琐,且audio會不斷校準主clock锌俱。
Stagefright部分,audio完全是callback驅(qū)動數(shù)據(jù)流敌呈,video部分在onVideoEvent里會獲取audio的時間戳贸宏,是傳統(tǒng)的AV時間戳做同步。

  1. Opencore相對成熟穩(wěn)定磕洪,作為框架采用吭练,風險小析显;parser/codec集成相對復雜鲫咽,如果android后續(xù)版本棄用opencore轉(zhuǎn)用stagefright,那多媒體引擎的選擇是個問題谷异。
  2. Stagefright新推出分尸,肯定有未預知的bug,直接采用有潛在風險歹嘹;parser/codec集成相對容易箩绍,架構(gòu)較opencore做了極大簡化,通俗易懂尺上。
  3. 目前來看opencore支持的文件格式多些材蛛。
  4. Opencore與stagefright在數(shù)據(jù)處理機制及AV同步上有很大差異圆到,需要在實際板子上評估性能差異。
  5. 如果在android froyo版本開發(fā)多媒體相關(guān)產(chǎn)品仰税,建議采用opencore框架构资,這樣舊版本opencore上的成果可以沿用,且節(jié)省項目時間陨簇。
  6. Opencore支持的文件格式較stagefright豐富。

stagefright框架中調(diào)用OMX的時序圖

Android多媒體框架opencore和stagefright分析

Openmax架構(gòu)在Android中位置


Android多媒體框架opencore和stagefright分析

Openmax架構(gòu)


Android多媒體框架opencore和stagefright分析
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迹淌,一起剝皮案震驚了整個濱河市河绽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唉窃,老刑警劉巖耙饰,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纹份,居然都是意外死亡苟跪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門蔓涧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來件已,“玉大人,你說我怎么就攤上這事元暴∨窭” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵茉盏,是天一觀的道長鉴未。 經(jīng)常有香客問我,道長鸠姨,這世上最難降的妖魔是什么铜秆? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮讶迁,結(jié)果婚禮上连茧,老公的妹妹穿的比我還像新娘。我一直安慰自己添瓷,他們只是感情好梅屉,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳞贷,像睡著了一般坯汤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搀愧,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天惰聂,我揣著相機與錄音疆偿,去河邊找鬼。 笑死搓幌,一個胖子當著我的面吹牛杆故,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溉愁,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼处铛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拐揭?” 一聲冷哼從身側(cè)響起撤蟆,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堂污,沒想到半個月后家肯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡盟猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年讨衣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片式镐。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡反镇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碟案,到底是詐尸還是另有隱情愿险,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布价说,位于F島的核電站辆亏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鳖目。R本人自食惡果不足惜扮叨,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望领迈。 院中可真熱鬧彻磁,春花似錦、人聲如沸狸捅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尘喝。三九已至磁浇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朽褪,已是汗流浹背置吓。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工无虚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衍锚。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓友题,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戴质。 傳聞我的和親對象是個殘疾皇子度宦,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容