基于C++的Unreal Engine WebRTC自定义ADM音频发送故障排查
WebRTC自定义ADM音频传输失败排查方案
1. 自定义ADM核心逻辑校验
- 确认
RecordedDataIsAvailable参数合法性:- 检查音频格式是否匹配WebRTC要求:必须是48kHz采样率、16bit位深,声道数需和后续编码配置一致(通常单声道优先),格式不匹配会被WebRTC直接丢弃。
- 验证
samples_per_channel和number_of_channels参数是否准确,比如Unreal捕获的44.1kHz音频需先转成48kHz再传入ADM。
- 检查ADM数据投递完整性:部分自定义ADM不能仅调用
RecordedDataIsAvailable,需手动将音频数据喂入WebRTC的AudioSendStream,确认是否完成最终的数据流转。
2. PeerConnection媒体配置检查
- 确认音频轨道正确添加:
// 校验音频轨道创建与添加流程 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track = peer_connection_factory->CreateAudioTrack("audio_track", audio_source.get()); auto local_stream = peer_connection_factory->CreateLocalMediaStream("local_stream"); local_stream->AddTrack(audio_track); peer_connection->AddStream(local_stream); - 检查SDP协商结果:打印本地/远端SDP,确认音频m-line存在且编码(如OPUS)被双方支持。若SDP无音频媒体描述,WebRTC不会启动音频传输。
3. ADM加载与状态校验
- 确认ADM初始化成功:检查
Init()和StartRecording()方法是否返回true,可在方法内添加日志,排查初始化环节是否出错。 - 验证自定义ADM被正确加载:创建PeerConnectionFactory时,确保传入自定义ADM实例而非系统默认ADM:
// 确保自定义ADM被传入工厂 auto peer_connection_factory = webrtc::CreatePeerConnectionFactory( nullptr, nullptr, nullptr, custom_adm.get(), webrtc::CreateBuiltinAudioEncoderFactory(), webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, nullptr);
4. 数据流向断点调试
- 在
RecordedDataIsAvailable内添加日志,打印每次传入的音频数据长度、时间戳,确认数据是否持续稳定进入ADM。 - 跟踪WebRTC内部流转:若有源码权限,在
AudioTransportImpl或AudioSendStream相关节点加断点,确认数据是否从ADM传递到编码器、再到网络层。 - 检查网络配置:确认PeerConnection的
RTCConfiguration未禁用音频传输,ICE候选已完成连通性检查(可通过OnIceConnectionChange回调确认状态)。
内容的提问来源于stack exchange,提问作者mvlcfr
相关产品推荐
相关产品推荐

