WebRTC 混音分析
2018-03-28 本文已影响129人
云上听风
webrtc网站被和谐, 直接上github查找有没有人fork, 然后找到一个比较新的版本
https://github.com/JumpingYang001/webrtc
https://github.com/ibaoger/webrtc (这个好像每天都更新)
没有下载代码, 直接用手机在网页上查看代码, 虽然不方便,但也找到混音处理代码.
简单写一下大概过程, 详细的在以后有用到时再研究吧。
因为是在手机上看的代码,可能理解有误,等有空再仔细在电脑上深入研究。
混音对象:
media/engie/webrtcvoiceengine.cc
void WebRtcVoiceEngine::Init() {
...
config.audio_mixer = webrtc::AudioMixerImpl::Create();
...
}
混音类:
modules/audio_mixer/audio_mixer_impl.cc
AudioMixerImpl::Mix()
Mix方法调用:
modules/audio_mixer/frame_combiner.cc
FrameCombiner::Combine()
Combine方法:
调用MixToFloatFrame进行合并, MixToFloatFrame只是简单的把数据相加, 然后调用RunApmAgcLimiter或RunApmAgc2Limiter对混音结果进行增益处理, 同时应该可以防止溢出.
调用InterleaveToAudioFrame根据音频声道交织处理混音结果.
最后混音的结果在audio_frame_for_mixing中.