]android多媒體本地播放流程video playback–base on jellybean (二)

    我們學習一種新事物必然首先都要對該事物要有個大體的瞭解,熟悉它的整體架構,然後進行劃分歸類,接下來才是各個擊破,逐步學習乃至掌握。對於要學習android Multimedia的人來說也是如此,先來個總括吧 !我打算分三部分來講解,請聽我娓娓道來….
一:多媒體簡介
     為啥要講多媒體的概念呢?可能很多人都對這個名稱解釋不怎麼瞭解,所以在這普及普及。
     媒體(Media)就是人與人之間實現信息交流的中介,簡單地說,就是信息的載體,也稱為媒介。多媒體是計算機和視頻技術的結合,實際上它是兩個媒體;聲音和圖像,或者用現在的術語:音響和電視。多媒體本身有兩個方面,和所有現代技術一樣它是由硬件和軟件,或機器和思想混合組成。可以將多媒體技術和功能在概念上區分為控制系統和信息。多媒體之所以能夠實現是依靠數字技術。多媒體代表數字控制和數字媒體的匯合,電腦是數字控制系統,而數字媒體是當今音頻和視頻最先進的存儲和傳播形式。事實上有人就簡單地認為多媒體是電腦和電視的結合。電腦的能力達到實時處理電視和聲音數據流的水平,這時多媒體就誕生瞭。
二:android多媒體框架演變歷史
       android 的多媒體框架從android誕生以來,發生瞭天翻地覆的變化,包括引擎的更改,單獨處理流媒體的播放器nuplayer的加入,到最新jellybean(android4.1)nuplayer逐步加入stagefrightplayer的功能,可能以後stagefight引擎會被nuplayer取代,那都是後話瞭。但是openomx(即引擎連接codec的紐帶)一直都得到瞭保持。
       在Froyo2.2 以前,multimedia framework 的引擎是一直都是opencore,但為啥用stagefright替代呢,由於我沒有開發過opencore,不便下結論,但從網上一些言論來看,估計是opencore太過龐大,不太好維護,具體真正原因就得問google瞭,如果你知道具體原因,可以給我留言,在此多謝瞭!
       Gingerbread  android2.3,加入瞭真正的支持流媒體的播發器nuplayer,如果你下有源碼,可以用gitk \nuplayer,從gitk可以看到如下提交:Initial support for a true streaming player for mpeg2 transport streams. 2010.12。
      android 3.0 到android 4.0 ,總體框架沒有多大變化。
      android4.1 (jellybean) 最大的變化是給c/c++部分的多媒體框架單獨設立瞭一個framework/av的目錄,給它開辟瞭一個git庫,即從framework/base下的git庫分離瞭出來,總算給多媒體找瞭個港灣。
三:jellybean多媒體架構
        multimedia framework 架構 由三大部分構成:供上層程序調用的java API,連接java和C/C++的jni部分,多媒體引擎(stagefright)和codec接口(openmax interface)。前面兩部代碼在framework/base/media 下,後一部分在framework/av文件夾下。如果你修改的是java API接口或加LOG後編譯可以用如下命令:make framework ,JNI 部分 make media_jni,第三部分有三個libs組成:libmedia ,libmediaplayerservice, libstagefright,命令如下 make media ,make stagefright , make mediaplayerservice. 生成各自的.so文件,用adb push 到system/下就可以調試瞭。記得重啟!講瞭好多廢話,還是沒有看到總體架構,罪      
 
 
 
 
     
 我們可以發現上層APK要播放視頻,首先得獲得一個player,而這個player的類型根據你媒體文件的類型來決定的,分配的任務由mediaplayerservice來完成,除瞭獲得player外最主要的是到底選用哪種編碼器進行編解碼,這個過程由awesomeplayer和omxcodec來完成,至於聲音和圖像就交由audioflinger和surfaceflinger來完成瞭。具體的調用實現,下一篇videoplayerback將會慢慢討論和學習。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。