WebRTC在SDP协商后会默认打开手机的音频资源,这中体验不友好,因此需要对源码进行改动,如下为需要更改的流程:
RTCAudioTrack->RTCAudioSource->RTCRemoteAudio->AudioRtpReceiver->WebRtcVoiceMediaChannel->WebRtcVoiceEngine->AudioDeviceModuleIOS->AudioDeviceIOS->VoiceProcessingAudioUnit
首先需要对VoiceProcessingAudioUnit进行更改,防止WebRTC直接开启麦克风,如下所示:
1、VoiceProcessingAudioUnit::Init()该方法内部会开启AudioUnit,注释掉其内容
2、VoiceProcessingAudioUnit::Initialize(Float64 sample_rate)记住采样率即可,其他实现注释掉
3、新增方法SetupAudioUnit(初始化苹果的音频单元),SetupCapture(配置麦克风),SetupPlay(配置外放)
4、新增外部接口SetSpeakMute来控制麦克风是否需要启用,iOS中并不能单独的开关麦克风,每次开关都需要把整个音频单元卸载重新初始化,如下实现:
接下来主要实现上层如何调用到底层,WebRTC在创建的时候会生成RTCAudioTrack