详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)

本文详细探讨了 WebRTC 中 AGC(自动增益控制)的重要性和作用,解释了其在发送端和接收端的运用,以及在不同模式下的工作原理。AGC 通过均衡音量、防止爆音,提高音视频通话的听感体验。文章介绍了核心参数、模式选择,并分析了各模式下的问题及优化方向。
摘要由CSDN通过智能技术生成

前言


自动增益控制(AGC:Auto Gain Control)是我认为链路最长,最影响音质和主观听感的音频算法模块,一方面是 AGC 必须作用于发送端来应对移动端与 PC 端多样的采集设备,另一方面 AGC 也常被作为压限器作用于接收端,均衡混音信号防止爆音。设备的多样性最直接的体现就是音频采集的差异,一般表现为音量过大导致爆音,采集音量过小对端听起来很吃力。

在音视频通话的现实场景中,不同的参会人说话音量各有不同,参会用户需要频繁的调整播放音量来满足听感的需要,戴耳机的用户随时承受着大音量对耳朵的“暴击”。因此,对发送端音量的均衡在上述场景中显得尤为重要,优秀的自动增益控制算法能够统一音频音量大小,极大地缓解了由设备采集差异、说话人音量大小、距离远近等因素导致的音量的差异。

02

AGC 在 WebRTC 中的位置

在讲 AGC 音频流处理框架之前,我们先看看 AGC 在音视频实时通信中的位置,如图 1 展示了同一设备作为发送端音频数据从采集到编码,以及作为接收端音频数据从解码到播放的过程。AGC 在发送端作为均衡器和压限器调整推流音量,在接收端仅作为压限器防止混音之后播放的音频数据爆音,理论上推流端 AGC 做的足够鲁棒之后,拉流端仅作为压限器是足够的,有的厂家为了进一步减小混音之后不同人声的音量差异也会再做一次 AGC。

图 1 WebRTC 中音频信号上下行处理流程框图

03

AGC 的核心参数

先科普一下样本点幅度值 Sample 与分贝 dB 之间的关系,以 16bit 量化的音频采样点为例:dB = 20 * log10(Sample / 32768.0),与 Adobe Audition 右侧纵坐标刻度一致。

幅度值表示:16bit 采样最小值为 0,最大值绝对值为 32768(幅度值如下图右边栏纵坐标)。

分贝表示:最大值为 0 分贝(分贝值如下图右边栏纵坐标),一般音量到达 -3dB 已经比较大了,3 也经常设置为 AGC 目标音量。

核心参数有:

typedef struct {
  int16_t targetLevelDbfs;    // 目标音量
  int16_t compressionGaindB;  // 增益能力
  uint8_t limiterEnable;      // 压限器开关
} AliyunAgcConfig;

目标音量 - targetLevelDbfs:表示音量均衡结果的目标值,如设置为 1 表示输出音量的目标值为-1dB;

增益能力 - compressionGaindB:表示音频最大的增益能力,如设置为 12dB,最大可以被提升 12dB;

压限器开关 - limiterEnable:一般与 targetLevelDbfs 配合使用,compressionGaindB 是调节小音量的增益范围,limiter 则是对超过 targetLevelDbfs 的部分进行限制,避免数据爆音。

04

AGC 的核心模式

除了以上三个核心的参数外,针对不同的接入设备 WebRTC AGC 提供了以下三种模式:

enum {
  kAgcModeUnchanged,
  kAgcModeAdaptiveAnalog,  // 自适应模拟模式
  kAgcModeAdaptiveDigital, // 自适应数字增益模式
  kAgcModeFixedDigital  // 固定数字增益模式
};

以下我们会结合实例从基本功能,适用场景,信号流图以及存在的问题等方面阐述这三个模式。

 【CSDN后台扣1,免费分享】资料包括《Andoird音视频开发必备手册+音视频学习视频+学习文档资料包+大厂面试真题+2022最新学习路线图》等

 

>固定数字增益 - FixedDigital

固定数字增益模式最基础的增益模式也是 AGC 的核心,其他两种模式都是在此基础上扩展得到。主要是对信号进行固定增益的放大,最大增益不超过设置的增益能力 compressionGaindB,结合 limiter 使用的时候上限不超过设置的目标音量 targetLevelDbfs

固定数字增益模式下仅依靠核心函数 WebRtcAgc_ProcessDigital 对输入信号音量进行均衡,由于没有反馈机制,其信号处理流程也是极其简单,设置好参数之后信号会经过如下流程:

固定数字增益模式是最核心的模式,主要有如下两个方面值得我们深入学习:

语音检测模块 WebRtcAgc_ProcessVad 的基本思想

在实时通信的场景中,麦克风采集的近端信号中会存在远端的信号的成分,流程中会先通过 WebRtcAgc_ProcessVad 函数对远端信号进行分析,在探测实际近端信号包络的时候需要剔除远端信号这个干扰项,避免因残留的回声信号影响了近端信号包络等参数的统计。最传统的 VAD 会基于能量,过零率和噪声门限等指标区分语音段和无话段,WebRTC AGC 中为粗略的区分语音段提供了新的思路:

1. 计算短时均值和方差,描述语音包络瞬时变化,能够准确反映语音的包

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WebRTC自动增益算法是用于音频处理的一种算法,它用于自动调整音频信号的增益,以提高音频质量和提供更好的听觉体验。这种算法主要应用于实时通信应用,例如音频电话、视频会议等。 WebRTC自动增益算法的源码主要包括以下几个方面的内容: 1. 采样块的分析:源码首先将音频信号分成较小的采样块,通常是10毫秒到30毫秒的间隔。对于每个采样块,源码会进行频域分析,以获取音频信号的频谱信息。 2. 可能的增益计算:使用频谱信息,源码会计算一个可能的增益系数,该系数用于调整音频信号的增益。这个系数通常根据信号的能量、噪声水平以及目标增益的期望来计算。 3. 平滑和适应性:由于音频信号通常具有变化的能量和噪声水平,源码还会对增益系数进行平滑处理,以适应这些变化。这可以通过使用滑动窗口和滤波器等技术来实现。 4. 增益应用:最后,源码会将计算得到的增益系数应用于采样块中的音频信号,以调整其增益。这通常是通过乘以增益系数来实现的。 除了上述的基本步骤,实际的WebRTC自动增益算法源码还可能包括其他一些优化和增强功能,以进一步提高音频质量和适应性。这可能包括动态阈值的设置、语音活动检测等。 总之,WebRTC自动增益算法的源码是一种用于自动调整音频信号增益的算法实现。通过分析音频信号的频谱信息,计算可能的增益系数,并应用于音频信号中,以提高音频质量和适应不同的环境条件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值