音頻系統(tǒng)架構(gòu)基礎(chǔ)
層次說明
音頻管理模塊主要分成4個層次:
1.Audio本地框架類:是libmediaso.so的一部分,這些Audio接口對上層提供接口,由下層的本地代碼實現(xiàn)
2.AudioFlinger:繼承了libmedia中的接口,提供實現(xiàn)庫libaudioflinger.so,上層調(diào)用只是libmedia部分的接口,實際調(diào)用的內(nèi)容是libaudioflinger.so
3.JNI:JNI和java對上層提供接口,JNI部分通過調(diào)用libmedia庫提供的接口來實現(xiàn)
4.Audio硬件抽象層:提供硬件的接口,供AudioFlinger調(diào)用
上圖構(gòu)成部分說明:
1.Audio的java部分
代碼:framework/base/media/java/android/media
與Audio系統(tǒng)相關(guān)的java包是android.meida,里面包含了與AudioManager和Audio系統(tǒng)相關(guān)的類
2.Audio的JNI部分
代碼:framework/base/core/jni
生成庫是libandroid_runtime.so
3.Audio的框架部分
框架部分頭文件:framework/base/include/media/或framework/av/include/media/
實現(xiàn)代碼:framework/base/media/libmedia/或framework/av/media/libmedia/
Audio本地框架是Media庫的一部分,會編譯成庫libmedia.so,提供Audio部分的接口
4.Audio Flinger
部分代碼:framework/base/lib/audioflinger或framework/av/service/audioflinger
編譯成庫libaudioflinger.so,是Audio系統(tǒng)的本地服務(wù)部分
5.Audio的硬件抽象層接口
代碼:hardware/libhardware_legacy/include/hardware/
Media庫中的Audio框架
Media庫提供Audio系統(tǒng)的核心框架,實現(xiàn)了AudioSystem.AudioTrack,AudioRecorder類
頭文件IAudioFlinger.h,IAudioTrack.h和IAudioRecorder.h接口是通過下層的繼承實現(xiàn)
頭文件AudioFlinger.h,AudioTrack.h,AudioRecorder.h是對上層提供的接口
libmedia庫提供的只是一個Audio系統(tǒng)框架,類AudioSystem,AudioTrack和AudioRecord分別調(diào)用下層的接口IAudioFlinger,IAudioTrack和IAudioRecord實現(xiàn),IAudioFlingerClient是IAudioFlinger中注冊的監(jiān)聽器,回調(diào)獲取IAudioFlinger運行信息