1. 程式人生 > >AndroidO audio系統之框架簡介(一)

AndroidO audio系統之框架簡介(一)

1、概述

       Audio系統在Android中負責音訊方面的資料流傳輸和控制功能,也負責音訊裝置的管理,它是Android中最複雜的子系統之一。本文將粗略分析一下audio的整體框架及播放、錄製流程。不足之處,敬請指正,謝謝!

2、音訊框架圖

這裡寫圖片描述

2.1 Application層

       音訊相關的應用軟體有: 音樂播放器,電話,聲音設定,視訊播放器等等。

2.2 Application Framework層

該層程式碼位置frameworks/base/media/java/android/media。其中關鍵類的作用如下:

  1. MediaPlayer和MediaRecorder,AudioTrack和AudioRecorder,提供聲音播放和錄製介面,但是MediaPlayer/MediaRecorder功能更強大,也更易於使用。
  2. 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系統層次架構有個大概的瞭解。下一篇開始,將深入各層如何初始化、關聯工作做個深入的分析。未完待續。。。