android視頻採集
❶ Android音視頻【十三】OpenSL ES介紹&基於OpenSL ES實現音頻採集
Android音視頻開發中,通常使用AudioRecord進行音頻採集,但OpenSL ES提供了C/C++性能優勢,避免了Java層的復雜性和性能消耗。本文著重介紹如何在JNI層通過OpenSL ES進行音頻採集。OpenSL ES,作為無授權、跨平台的音頻加速API,旨在提升嵌入式設備應用的音頻處理性能。它支持C語言介面,運行於native層,允許直接處理PCM數據,降低數據傳輸和通信成本。
與Android的關系是,Android實現的OpenSL ES基於OpenSL 1.0.1,擴展了一些功能。在使用時需注意Android特有的API限制。OpenSL ES支持16000Hz采樣率的單通道PCM數據採集和播放,且兼容多種配置,但不支持所有平台。相較於Java API,OpenSL ES能提供更靈活的控制和深度優化,但對設備版本有要求,不支持MIDI和加密內容播放。
在實際開發中,首先在AndroidManifest.xml中添加錄音許可權,然後在項目中鏈接OpenSLES庫。OpenSL ES的開發基於Objects和Interfaces概念,通過創建和管理對象來實現音頻功能。創建SLEngineItf對象後,設置輸入輸出配置,創建錄音器並開始錄音,通過SLRecordItf介面控制錄音狀態。採集到的音頻數據通過回調函數處理,並在完成後釋放資源。
一個簡單的示例展示了如何在JNI層使用OpenSL ES進行錄音,並提供了測試方法。通過學習OpenSL ES,開發者可以構建高效、低延遲的音頻應用。相關學習資源可進一步深化理解。更多詳情可參考Android中文官網,以及GitHub項目。
❷ Android WebRTC 音頻採集揚聲器聲音
webrtc 默認情況下,採集的視頻和音頻,大部分採集的是麥克風和攝像頭的內容,
但有的時候,需要採集屏幕的內容和揚聲器的聲音,並將其發送出去。
關於屏幕的採集不做陳述,github上的例子很多,本文主要講隱頌解如何採集揚聲器的聲音。
對於Android系統來說,漏裂如果你要進行錄制揚聲器的聲音,是需要系統許可權的。
所以,如果你沒有系統許可權的話,(也就是system用戶),那本文是無法實現的。
具體實現步驟:
1.
在 AndroidManifest.xml 中
android:sharedUserId="android.uid.system" //用戶許可權
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
2.
在創建peerconnection的時候,需灶搜鄭要添加setAudioDeviceMole(admbuilder.createAudioDeviceDole());
admbuilder 默認情況下使用麥克風的聲音,所以我們把麥克風的聲音修改掉:
admbuilder.setAudioSource( MediaRecorder.AudioSource.REMOTE_SUBMIX);
這里的揚聲器就是MediaRecorder.AudioSource.REMOTE_SUBMIX。