背景:
用于项目的需求是只使用webrtc 的视频功能,不使用语音功能。语音的设备节点在另一个业务进程会使用,所以这就要去webrtc 不能对音频设备节点做任何操作(因为独占)。
问题:
peerconnect创建的时候(CreatePeerConnectionFactory)一定要创建音频的encode和decode,要不然会崩溃——可能时音频是基础功能吧, 即使后续AddTrack 的时候不添加音频的源。
CreatePeerConnectionFactory里面会做相应的检查:支持的编解码、视频设备情况、音频设备情况,在检查音频设备的时候会操作音频设备节点。
解决问题方向:去掉音频设备检查功能。
解决方法:
1、 音频设备检查调用关系:
CreatePeerConnectionFactory->cricket::CreateMediaEngine->WebRtcVoiceEngine::WebRtcVoiceEngine
CreateModularPeerConnectionFactory->PeerConnectionFactory::Initializ->ChannelManager::Init->CompositeMediaEngine::Init->WebRtcVoiceEngine::Init->AudioDeviceModule::Create->AudioDeviceModule::CreateForTest
2、注意上面红色的函数,里面会根据平台来选择不同的音频设备,linux使用alsa(AudioDeviceLinuxALSA)
3、CompositeMediaEngine::Init->WebRtcVoiceEngine::Init->adm_helpers::Init->{
AudioDeviceLinuxALSA::SetPlayoutDevice
AudioDeviceLinuxALSA::InitSpeaker
AudioDeviceLinuxALSA::StereoPlayoutIsAvailable
AudioDeviceLinuxALSA::SetStereoPlayout
AudioDeviceLinuxALSA::SetRecordingDevice
AudioDeviceLinuxALSA::InitMicrophone
AudioDeviceLinuxALSA::StereoRecordingIsAvailable
AudioDeviceLinuxALSA::SetStereoRecording
}
4、这里只是校验,后续也不会使用,所以可以直接不校验,直接在adm_helpers::Init 返回成功