WebRTC占用麦克风问题(iOS&&Android)

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,本人是直接对track中的isEnable进行更改,其中isEnable源码已经写好,只需要在中间截取就好。OC配置isEnable的时候会通过source走到WebRtcVoiceMediaChannel::MuteStream,源码默认的实现方式是静音的时候会把rtp的数据变成0,发0音频到对端。在WebRtcVoiceEngine新增SetSpeakMute实现,在MuteStream中调用SetSpeakMute,如下所示:

再通过AudioDeviceModuleIOS->AudioDeviceIOS->VoiceProcessingAudioUnit一层层往下实现,具体方法不贴出。

后续音频的控制走向都可以按照该流程来实现,本人还实现了是否开启外放、降噪配置、增益配置等,都可以从Track新增方法一层层实现。

至此iOS的麦克风资源占用问题就此解决。Android的后续贴出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值