AndroidO audio系統之框架簡介(一)
1、概述
Audio系統在Android中負責音訊方面的資料流傳輸和控制功能,也負責音訊裝置的管理,它是Android中最複雜的子系統之一。本文將粗略分析一下audio的整體框架及播放、錄製流程。不足之處,敬請指正,謝謝!
2、音訊框架圖
2.1 Application層
音訊相關的應用軟體有: 音樂播放器,電話,聲音設定,視訊播放器等等。
2.2 Application Framework層
該層程式碼位置frameworks/base/media/java/android/media。其中關鍵類的作用如下:
- MediaPlayer和MediaRecorder,AudioTrack和AudioRecorder,提供聲音播放和錄製介面,但是MediaPlayer/MediaRecorder功能更強大,也更易於使用。
- AudioManager、AudioService及AudioSystem等類提供聲音控制、通道選擇、音效設定等功能。
2.3 Jni
Audio的JNI程式碼在framewoks/base/core/jni目錄下面,會和其他一些系統檔案生成libandroid_runtime.so供上層呼叫。
2.4 Native Framework層
客戶端:
AudioTrack、AudioRecorder、MediaPlayer、MediaRecorder、AudioSystem對應Java層的相關類,程式碼放置在frameworks/av/media/libmedia中, C++語言編寫,編譯後成為libmedia庫。
服務端:
AudioFlinger和AudioPolicyService是核心程式碼,它們的程式碼在frameworks/av/services/audioflinger,編譯後成為libaudioflinger庫,執行在AudioServer系統程序。
2.5 HAL層
HAL是AudioFlinger向下訪問的物件,廠商會在這一層實現自己的介面層,橋接硬體驅動和上層框架,形成的檔案會編譯成audio.primary.,audio.a2dp.等so庫檔案供音訊模組載入。
2.6 驅動
一般情況下用的ALSA音訊架構
3、音訊各層程式碼結構圖
Audio Application Framework:音訊應用框架
AudioTrack:負責回放資料的輸出,屬 Android 應用框架 API 類
AudioRecord:負責錄音資料的採集,屬 Android 應用框架 API 類
AudioSystem: 負責音訊事務的綜合管理,屬 Android 應用框架 API 類
Audio Native Framework:音訊本地框架
AudioTrack:負責回放資料的輸出,屬 Android 本地框架 API 類
AudioRecord:負責錄音資料的採集,屬 Android 本地框架 API 類
AudioSystem: 負責音訊事務的綜合管理,屬 Android 本地框架 API 類
Audio Services:音訊服務
AudioPolicyService:音訊策略的制定者,負責音訊裝置切換的策略抉擇、音量調節策略等
AudioFlinger:音訊策略的執行者,負責輸入輸出流裝置的管理及音訊流資料的處理傳輸
Audio HAL:音訊硬體抽象層,負責與音訊硬體裝置的互動,由 AudioFlinger 直接呼叫
4、小結
通過上述的框架圖,很容易就可以對audio系統層次架構有個大概的瞭解。下一篇開始,將深入各層如何初始化、關聯工作做個深入的分析。未完待續。。。