Android多媒體架構簡介
一 主要内容
1 Android Media
2 mediaCodec
3 mediaCodec 流程
4 NuPlayer
//5 MediaRecorder
//6 MediaRecorder 流程
二 Android Media
2.1 android多媒體架構曆史回顧
Android 1.0 ->Packet video - Open core
Android 1.6 ->Open core 2.0
Android 2.0 ->StageFright
Android 2.1 ->StageFright
Android 3.0 ->增強版StageFright
Android 4.1 ->支援編解碼功能
Android 5.0->增加MediaSession 和MediaController功能
2.2 android多媒體體系結構
Stagefright 是本地的媒體播放引擎,支援多種的媒體格式的軟解碼,功能包括音頻視訊播放,會話管理,時間同步,傳輸控制等等,還支援內建自定義硬體編解碼。
2.3 Stagefright進階别調用流程
android的終端應用調用framework層的AudioManager,MediaPlayer,Ringtone等接口擷取媒體相關的服務。本地媒體播放系統由Stagefright架構支撐,媒體播放器服務系統,主要包含位于frameworks/av/media/libmediaplayerservice目錄下的C++類,處理本地Media Player誇程序的請求,Stagefright系統位于frameworks/av/media/libstagefright目錄下,實作先關的算法邏輯。
二 MediaCodec
MediaCodec主要為應用程式和播放器服務,提供解析器和資料對象,支援編解碼,支援DRM加密内容的解密。MediaCodec類在Java和C++源碼中都有存在,隻有位于java中的接口是公開的,MediaCodec功能是在Android 4.1中引進的。mediaCodec體系結構如下圖
三 MediaCodec流程
四 NuPlayer播放器
4.1 nuplayer簡介
Nuplayer内置于Stagefright架構中,利用消息循環/消息處理機制,處理各種異步請求,從消息隊列中擷取消息進而降低死鎖現象,Nuplayer::Source接口(屬于parser module)是由MediaExtractor和MediaSource組合而成,可精準定位資料源,Nuplayer::Decoder連接配接到ACodec,可為AVC提供解碼功能,為AAC解碼提供解碼包裝,ACodec在Stagefright架構中是一個功能類似于OMXCodec的解碼器,但不具有應用的狀态模式和圍繞消息模式傳送的資料的功能。NuPlayer::Render負責渲染音頻,負責音視訊同步,在合适的時間将視訊資料傳送到本地視窗。OMXCodec和ACodec都是底層OMX元件的高度抽象,提供音頻視訊的編解碼功能。
4.1 nuplayer類圖