WebRTC占用麥克風(fēng)問題(iOS&&Android)

WebRTC在SDP協(xié)商后會(huì)默認(rèn)打開手機(jī)的音頻資源,這中體驗(yàn)不友好,因此需要對(duì)源碼進(jìn)行改動(dòng),如下為需要更改的流程:

RTCAudioTrack->RTCAudioSource->RTCRemoteAudio->AudioRtpReceiver->WebRtcVoiceMediaChannel->WebRtcVoiceEngine->AudioDeviceModuleIOS->AudioDeviceIOS->VoiceProcessingAudioUnit

首先需要對(duì)VoiceProcessingAudioUnit進(jìn)行更改,防止WebRTC直接開啟麥克風(fēng),如下所示:

1、VoiceProcessingAudioUnit::Init()該方法內(nèi)部會(huì)開啟AudioUnit,注釋掉其內(nèi)容

2、VoiceProcessingAudioUnit::Initialize(Float64 sample_rate)記住采樣率即可,其他實(shí)現(xiàn)注釋掉

3、新增方法SetupAudioUnit(初始化蘋果的音頻單元),SetupCapture(配置麥克風(fēng)),SetupPlay(配置外放)

4、新增外部接口SetSpeakMute來控制麥克風(fēng)是否需要啟用,iOS中并不能單獨(dú)的開關(guān)麥克風(fēng),每次開關(guān)都需要把整個(gè)音頻單元卸載重新初始化,如下實(shí)現(xiàn):


接下來主要實(shí)現(xiàn)上層如何調(diào)用到底層,WebRTC在創(chuàng)建的時(shí)候會(huì)生成RTCAudioTrack,本人是直接對(duì)track中的isEnable進(jìn)行更改,其中isEnable源碼已經(jīng)寫好,只需要在中間截取就好。OC配置isEnable的時(shí)候會(huì)通過source走到WebRtcVoiceMediaChannel::MuteStream,源碼默認(rèn)的實(shí)現(xiàn)方式是靜音的時(shí)候會(huì)把rtp的數(shù)據(jù)變成0,發(fā)0音頻到對(duì)端。在WebRtcVoiceEngine新增SetSpeakMute實(shí)現(xiàn),在MuteStream中調(diào)用SetSpeakMute,如下所示:


再通過AudioDeviceModuleIOS->AudioDeviceIOS->VoiceProcessingAudioUnit一層層往下實(shí)現(xiàn),具體方法不貼出。

后續(xù)音頻的控制走向都可以按照該流程來實(shí)現(xiàn),本人還實(shí)現(xiàn)了是否開啟外放、降噪配置、增益配置等,都可以從Track新增方法一層層實(shí)現(xiàn)。

至此iOS的麥克風(fēng)資源占用問題就此解決。Android的后續(xù)貼出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容