浅谈 WebRTC 的 Audio 在进入 Encoder 以前的处理流程

在 WebRTC 中,Audio 数据在被送入编码器以前,有 2 大部分须要特别关注,一是数据采集,二是 Audio Processing。
filejava

做者:方来,技术专家,从事 voip 应用开发。算法

数据采集

数据采集主要由 Audio Device 模块进行处理,并且是平台和配置相关。例如:框架

  1. Mac 电脑,使用的是 CoreAudio API,通常状况下使用默认内置的声卡参数 fs=48kHz,stero。
  2. Windows 电脑,WebRTC 中用的是 WASAPI。根据声卡参数不一样,采样率等参数可选的比较多,例若有的电脑 builtInAEC 打开后,fs=16kHz,Mono,若是把声卡的 Audio Enhancement 关闭,则输出 fs=48kHz,stero。
  3. Android 通常使用 java 层的 AudioRecord 框架。
  4. iOS 通常使用 AudioUnit 框架。

另外,数据采集部分,还涉及到 USB 耳机,3.5mm 耳机,蓝牙耳机等外设,这些设备对音频链路上后续的 Audio Processing 也是有影响的,好比增长了 Audio 采集的delay,有 Speech Enhancement 处理的耳机会修改音频频谱,有的耳机外设使用不当可能会致使音频链路没有声音。ide

Audio Processing

Audio Processing 主要包括 AEC,AGC,NS 等等:性能

  • AEC----Acoustic Echo Cancellation,即回音消除。
  • AGC----Automatic Gain Control,即自动增益,用来调整输入信号的音量大小。
  • NS----Noise Suppression,即噪音抑制。

从 Audio Devices 输出的数据依次通过 AEC,NS,AGC 等音频处理模块。优化

1.AEC

AEC 算法选择

在 WebRTC 中,AEC 有 4 个可选的算法:ui

  1. builtInAEC,通常状况下 Windows,Android 系统,builtInAEC 默认会开启。
  2. AECM,移动端的回音消除算法,适用于 Android和 iOS。
  3. AEC 算法,适用于 Windows/Mac Desktop 的回音消除算法。固然 AEC 也能够用在移动端,某些状况下,回声泄露的性能比 AECM 好。不过最新的 WebRTC 已经把老的 AEC 的 code 移除了。
  4. AEC3 算法,Google 对老的 AEC 算法的改版,目前 AEC3 已经全面替代老的 AEC 算法。

通常状况下这 4 种 AEC 算法只能选择一种,不然会作屡次 AEC,对声音的损伤也会增长。在不得已的状况下,可能会用到 2 个 AEC,例如 Windows 电脑,buildInAEC 关不掉且效果差的状况下,就必须打开 AEC3,这时是用到 2 个 AEC。编码

aec_dump

在一次通话中,使用 StartAecDump 开启 aec_dump 功能,aec_dump 将录制 3 个文件,一个是未进入 Audio Processing 模块的 input.wav,一个是 Speaker Render 的输出文件 reverse.wav,一个是通过 Audio Processing 处理过的 ref_out.wav。3d

正常状况下,input.wav - reverse.wav = ref_out.wav。code

经过这 3 个文件能够分析回音消除算法是否有问题。

2.AGC

WebRTC 的 AGC 有 2 种算法:

  1. Legacy AGC
  2. AGC2

下面简单展现一下 Legacy AGC 的性能。
原始语音
原始语音

AGC 后的语音
AGC 后的语音,Legacy AGC 自己没有降噪功能,噪音和语音同时放大的。

3.NS

目前 WebRTC 的 Noise Suppression 模块,可以过滤掉比较平稳的背景噪音,例如 white nosise,空调声等。可是 NS 模块对音量很是大的背景噪音,还有 babble noise 都是失效的,这也是咱们客户端在 Microphone 功放的状况下的“嘈杂不清”的因素之一(固然致使嘈杂还有其余的缘由,例如 AEC 的性能等等)。

file
夹杂 white noise 的录音

file
white noise 被过滤掉

4.其余加强算法

  1. High Pass Filter,用来过滤低频噪音,好比咱们能够把 100Hz 甚至 200Hz 如下的低频噪音过滤掉。
  2. Typing Detector,能够过滤掉键盘打字的声音。
  3. Residual Echo Detector,残留回音探测。

优化点

  1. 采集(固然也包括播放)容易出现没有声音问题,因此必须对采集(声卡驱动)端进行声卡适配优化。

  2. AEC 区分平台:
    A. Windows 平台,通常 Windows 的声卡面板里面有一个“Audio Enhancement”,这个里面有的含有 builtInAEC,默认是打开的,经过 Windows API 关闭这个 Audio Enhancement 的几乎不可行。有的 builtInAEC 效果比较差,这时 AEC3 必须打开。一般状况下,builtInAEC 和 AEC3 同时打开,以便最大程度减小回声。
    B. Mac 电脑,默认没有 buildInAEC,一般就直接使用 AEC3。

  3. 在 AEC 算法中增长“near talk”,“far talk”,“double talk”, “no talk”状态,结合这几种状态,采起不一样的操做,例如在只有 far talk 的时候,不作 AGC,可以起到减小近端噪音的做用。
相关文章
相关标签/搜索