android多媒體分析(1)-整體架構

最近一個月在做android5.1的多媒體調試工作,根據自己跟源代碼的理解和結合網上的一些資料做一些總結。

一、android多媒體結構圖(上下文關係)
這裏寫圖片描述

從文件角度看多媒體架構:從最上層到底層調用關係依次是apk、jar、.so。
apk就是圖庫,jar包是javaAPI,.so是C++代碼。

二、android多媒體代碼目錄結構
android5.1媒體的相關代碼都放到framework/av/的目錄中,
其中視頻相關的代碼在media/下

|----- media   
|       |  
|       |-- libmedia   //一個服務端的代理,對應用層提供相關的接口,和服務端交互  
|       |  
|       |-- libmediaplayerservice //服務段 (分發器,交換機的作用,個人理解)  
|       |  
|       |-- libstagefright  //一個服務端的分支,支持工作(分流,解碼,傳輸)  
|       |  
|       |-- mediaserver     //android多媒體後臺核心服務進程
|       |  
|       |-- mtp           //文件夾操作媒體的相關東西  
|       |  

進一步看libstagefright目錄

|-- stagefright  
|   |  
|   |-- codecs   //提供解碼器實現  
|   |  
|   |-- colorconversion   //顏色空間轉換  
|   |  
|   |-- foundation   //基本數據結構的實現  
|   |  
|   |-- httplive   //m3u8解析  
|   |  
|   |-- id3        // ID3 TAG解析(一般用於MP3格式的metadata容器)  
|   |  
|   |-- include    //基本頭文件  
|   |   
|   |-- matroska   //matroska文件解析  
|   |  
|   |-- mpeg2ts    //mpeg2ts文件解析和數據獲取一些處理  
|   |  
|   |-- mp4        //MP4的格式解析  
|   |  
|   |-- omx        //IOMX接口實現  
|   |  
|   |-- rtsp       //rtsp文件解析  
|   |  
|   |-- wifi-display //關於wifi的處理  
|   |  
|   |-- yuv         //YUV數據的處理  
|   |  
|   |-- AwesomePlayer //android核心播放器代碼實現文件
|   |      

三、發展歷史

因爲現在android設備廠商都是用的自己的VPU硬件設備去解碼(不用自帶的軟解,效率太低),所以對應 有hal層的實現,其實hal只是修改了libstagefright目錄中的omx和component目錄的相關代碼,增加了自己的解碼器組件。再單獨新建了hal層目錄。總體還是遵循stagefright框架的。

接下來聊一下android多媒體框架的發展史:
android2.3以前多媒體框架用的是opencore,現在改成了stagefright框架,其中兩種框架都使用了openmax標準接口(簡稱omx),openmax是NVIDIA和KHRONOS公司推出的多媒體應用程序標準,共分三層:應用層、集成層、開發層。其中集成層用於引擎插件(解碼器)。前面提到的compoment目錄就是包含組件。

四、從進程線程角度看架構
結合圖一,多媒體視頻播放涉及到的進程主要有gallery、mediaserver、servicemanager、surfaceflinger。
其中mediaserver進程是整個多媒體的核心,裏面包含多個線程運行(有audioflinger、mediaplayerservice、cameraservice、audiopolicyservice)。當然也涉及到進程間通信的binder問題。

後續會講解細節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章