Android 的音頻硬件抽象層 (HAL) 將android.media中更高級別的音頻特定框架 API 連接到底層音頻驅動程序和硬件。本節包括用於提高性能的實施說明和提示。
Android 音頻架構定義了音頻功能是如何實現的,並指向了實現中涉及的相關源代碼。
- 應用框架
- 應用程序框架包括應用程序代碼,它使用android.media API 與音頻硬件進行交互。在內部,此代碼調用相應的 JNI 粘合類來訪問與音頻硬件交互的本機代碼。
- JNI
- 與android.media關聯的 JNI 代碼調用較低級別的本機代碼來訪問音頻硬件。 JNI 位於
frameworks/base/core/jni/
和frameworks/base/media/jni
中。 - 原生框架
- 本機框架提供了與android.media包等效的本機,調用 Binder IPC 代理來訪問媒體服務器的音頻特定服務。本機框架代碼位於
frameworks/av/media/libmedia
中。 - 粘合劑工控機
- Binder IPC 代理促進跨進程邊界的通信。代理位於
frameworks/av/media/libmedia
並以字母“I”開頭。 - 媒體服務器
- 媒體服務器包含音頻服務,它們是與您的 HAL 實現交互的實際代碼。媒體服務器位於
frameworks/av/services/audioflinger
中。 - 哈爾
- HAL 定義了音頻服務調用的標準接口,您必須實現該接口才能使您的音頻硬件正常運行。更多詳情請參考對應HAL版本目錄下的
*.hal
文件中的音頻HAL接口和註釋。 - 內核驅動程序
- 音頻驅動程序與您的硬件和 HAL 實現進行交互。您可以使用高級 Linux 聲音架構 (ALSA)、開放聲音系統 (OSS) 或自定義驅動程序(HAL 與驅動程序無關)。
注意:如果您使用 ALSA,我們建議將
external/tinyalsa
用於驅動程序的用戶部分,因為它的許可兼容(標準用戶模式庫是 GPL 許可的)。 - 基於 Open SL ES 的 Android 原生音頻(未顯示)
- 此 API 作為Android NDK的一部分公開,與android.media處於同一架構級別。