為了盡可能降低音頻延遲,我們建議您使用基於 OpenSL ES 1.0.1 的 Android 原生音頻。
實施清單
要使用 Android 原生音頻:
- 下載並安裝Android NDK 。在本文檔的其餘部分,我們將假設
NDKroot
是您安裝 NDK 的目錄。 - 閱讀支持文檔。
- 檢查 API 級別 9 或更高級別。
- 檢查功能android.hardware.audio.low_latency。
- 使用android.media.AudioManager.getProperty(java.lang.String)返回的推薦本機緩衝區大小和採樣率
注意:同樣的緩衝區大小和採樣率也應該用於輸入。
- 通常,OpenSL ES 緩衝區計數為 1 就足夠了。
- 保持你的回調處理程序簡短,沒有突然的 CPU 使用或無限阻塞。避免優先級倒置。
- 考慮使用非阻塞算法在輸入和輸出回調處理程序之間以及回調處理程序和應用程序的其餘部分之間進行通信。
支持文檔
OpenSL ES 1.0.1
使用 PDF 查看器查看OpenSL 1.0.1 規範。這是一個相當長的參考資料,並非所有內容都與您相關;但是您需要查閱它以獲取有關 API 的詳細信息。
注意:本文檔描述了完整的 OpenSL ES 1.0.1,但 Android 原生音頻實際上是基於 OpenSL ES 1.0.1 的一個子集以及一些 Android 特定的擴展。
描述 OpenSL ES 更高版本(例如 1.1)的文檔與 Android 無關。
適用於 Android 的 OpenSL ES
NDK 安裝中提供了“OpenSL ES for Android”文檔,目前無法在線獲取。在瀏覽器中打開此鏈接:
NDKroot/docs/Additional_library_docs/opensles/index.html
您需要瀏覽整個文檔,但要特別注意“編程筆記”部分的“性能”小節。
“OpenSL ES 1.0.1 支持的功能”部分描述了 Android 支持的子集。
“Android 擴展”部分描述了未包含在基本 OpenSL ES 1.0.1 中的 Android 特定擴展。
與 OpenSL ES 1.0.1 的關係
此維恩圖顯示了 Android 原生音頻與 OpenSL ES 1.0.1 之間的關係。
其他資源
來源.android.com
網站source.android.com主要為構建 Android 設備的 OEM 以及為這些 OEM 提供組件的 SoC 供應商而設計。
但是,此站點上有大量有關延遲的有用信息,因此您可能需要查看它。請參閱音頻延遲中的文章。
安卓-ndk
如果您對如何使用 Android 原生音頻有任何疑問,可以在討論組android-ndk 中提問。
視頻
- Android 上的高性能音頻(Google I/O 2013)
- 整個視頻都是關於延遲的。
- 在 Android 上構建出色的多媒體體驗(Google I/O 2014)
- 前 14 分鐘一般是關於音頻,特別是輸入延遲。
- 音頻延遲:緩衝區大小(Google Dev 的 100 天)
- 描述音頻延遲、緩衝區大小和任務調度之間的關係。