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

車載安卓系統(tǒng)的設計方案和注意事項
【原創(chuàng)】Dex分包架構(gòu)設計—實現(xiàn)安卓熱修復
基于安卓的視頻遙控小車——安卓紅外詳解
鴻蒙 vs 安卓 六大維度對比
安卓支持RISC-V架構(gòu)的技術(shù)剖析
安卓系統(tǒng)存在漏洞,可無需獲得用戶許可就能捕獲視頻和音頻
鴻蒙系統(tǒng)是基于安卓嗎
鴻蒙是基于安卓嗎 鴻蒙與安卓區(qū)別
安卓主板_MTK6765安卓開發(fā)板-聯(lián)發(fā)科安卓主板方案介紹

評論