webRTC混音流程

本文分析了webRTC的混音流程,其考虑到人耳对多路音频的感知特性,选择三路能量最大的音频作为主要混音,并对其他参与者进行淡出处理。主要实现位于`audio_conference_mixer`目录,通过`UpdateToMix`和混音方法完成。代码显示,未参与上一帧混音的会话将进行RampIn,若队列满则移除能量最小的会话并执行RampOut。最后,简单线性叠加完成混音。结论是,根据webRTC的混音原理,可以自建混音算法。
摘要由CSDN通过智能技术生成

原因:由于目前开始调研混音算法,故在此分析一下webRTC的实现流程,其他实现流程在另外一个博客有记录.

概况:目前调研的混音算法在多路混音时只有webRtc的原理符合基本流程。webRtc充分考虑了人耳在同一时间内最多只能感知3路音频的特性,故在多路混音时选择三路能力值最大的作为主要混音,其余参与者判断是否上一帧参与过混音,如果参与过则当前帧进行淡出特性,然后一起进行混音.而最终的混音算法就是简单的线性叠加做饱和运算.

代码分析:

主要实现文件在webrtc/modules/audio_conference_mixer目录.依赖的头文件主要有audio_conference_mixer_defines.h,该文件中主要定义了MixerParticipan和AudioMixerOutputRecevier两个类,该两个类主要定义了混音数据的对象来源和混音后数据的接收.调用逻辑通过TimeUnitNextProcess和Process方法进行调用,所以重点实现在process方法中.主要方法伪代码如下:

void AudioConferenceMixerImpl::Process() {

  UpdateToMix(&mixList, &rampOutList, &mixedParticipantsMap,
                    &remainingParticipantsAllowedToMix);

    MixFromList(mixedAudio, mixList);
    MixAnonomouslyFromList(mixedAudio, additionalFramesList);
    MixAnonomouslyFromList(mixedAudio, rampOutList);


}

UpdateToMix是为了将参与会话成员按需求分配到mixList,rampOutL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值