Android操作系統已經占領了當今設備的很大一部分,包括智能手機,電視和Tab。根據Statista的數據,谷歌創建的Android移動操作系統(OS)是目前使用最廣泛的智能手機操作系統,以接近71.8%的市場份額主導移動操作系統市場。
Android 在所有硬件平臺上被廣泛采用,因為它是一個開源軟件代碼和一個定義明確的框架結構。Linux內核是Android操作系統的核心,因為它提供了硬件和各種Android組件之間的抽象。音頻處理需要大量復雜的操作和密集的算法來產生高保真音頻輸出。Android 音頻架構涉及許多復雜的軟件,必須處理許多方面,例如支持揚聲器、聽筒、耳機、HDMI、麥克風、藍牙 SCO、A2DP 等音頻硬件,以及不同的軟件應用程序,如電話、媒體播放器錄音機、VIOP 應用程序和 SIP 應用程序。本文重點介紹 Android 音頻架構中不同組件的高級功能。
安卓音頻架構概述
Android 音頻架構概述了音頻功能的實現方式,并提供了指向相關源代碼的鏈接。
安卓音頻架構
安卓音頻APP和JAVA框架
Android 框架由一組定義明確的 Java API 組成,使開發人員能夠輕松編寫 Android 應用程序。Android 音頻應用代碼使用這組不同的多媒體 (android.media) 框架 API。在內部,這些 API 調用相應的 Java 本機接口 (JNI) 粘附軟件代碼來訪問本機組件,這些組件進一步與較低層交互以在硬件上播放音頻。
粘結 劑
進程間通信 (IPC) 是所有不同 Android 組件交換信息的重要機制。Android 進程使用名為“Binder”的特定于 Android 的 IPC 來調用另一個 Android 進程中的例程,并通過參數交換數據。上層使用 Binder API 與本機音頻服務和下層硬件層進行通信。
音頻管理器
音頻管理器是原生的Android服務,是整個音頻子系統的核心組件。從Android 7 Nougat版本開始,它不是原生媒體服務的一部分,而是在用戶空間中作為單獨的Android進程運行。它為不同的服務運行三個線程,即音頻策略、音頻投點和音頻以執行其功能。
音頻策略服務
策略決策主要包括打開新的輸入/輸出音頻流,并在通過 UI 和流音量管理更改或選擇后將音頻重新路由到不同的音頻設備。音頻策略服務處理執行這些策略決策所需的所有操作。此服務還跟蹤用戶事件和當前系統狀態,以通知音頻投點服務。
音頻投擲器服務
音頻傳票服務調用音頻硬件抽象層 (HAL) API 以與音頻硬件交互。它為上層提供了一個可訪問的界面。音頻策略服務定義的策略決策和策略由此服務執行。它還負責與音頻設備通信并維護其狀態。它處理多個音頻流(通知和音樂)的混合、音量縮放、音頻流寫入,并為媒體播放器提供寫入音頻幀等信息。
音頻服務
Audio 是 Android 8 Oreo 版本中引入的新 Android C API。它專為需要低延遲的高性能音頻應用而設計。Android 音頻應用調用音頻 API 來讀取和寫入音頻流中的數據。音頻服務處理這些低延遲音頻 API。音頻 API 中有兩種模式,即“獨占模式”,它允許客戶端應用程序代碼直接寫入與 ALSA 驅動程序共享的內存映射緩沖區,以及“共享模式”,它混合所有共享流并遵循音頻 HAL 路徑。
音頻 HAL
硬件抽象層 (HAL) 是 Android 堆棧中的一個層,它為上層運行的本機音頻服務提供標準訪問接口。音頻 HAL 將上層橋接到較低級別的音頻驅動程序實現。供應商必須使用特定的音頻驅動程序代碼實現音頻 HAL 接口。音頻 HAL 作為單獨的 Android 進程在用戶空間中運行,以執行上層所需的功能。
下面列出了音頻 HAL 提供的主要功能。
管理音頻輸入/輸出流的打開和關閉,包括設置音頻通道、采樣率和音頻格式等流參數。它還必須處理媒體播放器的不同狀態,包括播放、暫停、恢復和待機,并為硬件上寫入的音頻幀和時間戳提供反饋路徑數據。
加載需要特殊音頻處理和解碼的特定庫集,從而將原始數據發送到音頻硬件。
音頻設備接口
Android 音頻架構支持不同類型的音頻設備,包括藍牙設備、電視調諧器系統、HMDI 連接和 I2S 揚聲器。音頻 HAL 負責將音頻數據包從上層發送到這些設備。選擇特定音頻設備或將其插入 Android 硬件后,音頻策略管理器將執行一組定義并與音頻設備關聯的策略,并且所有層都配置為支持音頻數據流經它。Audio HAL 特別加載與音頻設備交互的接口代碼并對其執行讀寫操作,此接口代碼還為連接到其他 HAL 的音頻設備執行 HAL 間 IPC,例如,需要藍牙 HAL 交換數據的藍牙音頻設備。
內核驅動程序
音頻 HAL 實現具有與音頻驅動程序交互的代碼。Android 內核使用高級 Linux Sound Architecture (ALSA) 子系統,或者供應商可以引入與 HAL 無關的自定義驅動程序。Tiny ALSA是一個小型庫,用于與Linux內核中的ALSA接口,音頻HAL使用它與不同的聲卡進行交互。
Android堆棧是需要為不同的硬件平臺構建的巨大軟件代碼。理解和修改較低的Android層非常困難,因為它需要大量的調試技能。硬件級實現因每個供應商而異,需要與為上層定義的接口準確映射。代碼庫中許多未記錄的部分更加復雜且特定于供應商,并且它使用復雜的IPC機制,并在編程語言之間切換。
Softnautics使多媒體公司能夠設計和開發連接的多媒體解決方案。我們幫助客戶進行Android底層所需的不同自定義和集成,其中主要包括用戶和內核空間中的本機代碼。我們還協助客戶添加基于音頻的無線設備并將其集成到Android音頻子系統中。我們在了解 Android 架構中的不同層以進行定制和圍繞它的新設計方面擁有專業知識。我們在設計高性能媒體應用程序、構建完整的視頻管道、音頻/視頻編解碼器開發、應用程序移植等方面擁有實踐經驗。
審核編輯?:郭婷
-
智能手機
+關注
關注
66文章
18504瀏覽量
180471 -
Android
+關注
關注
12文章
3939瀏覽量
127575 -
操作系統
+關注
關注
37文章
6853瀏覽量
123434
發布評論請先 登錄
相關推薦
評論