淺談 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 處理的耳機會修改音頻頻譜,有的耳機外設使用不當可能會致使音頻鏈路沒有聲音。性能

Audio Processing

Audio Processing 主要包括 AEC,AGC,NS 等等:優化

  • AEC----Acoustic Echo Cancellation,即迴音消除。
  • AGC----Automatic Gain Control,即自動增益,用來調整輸入信號的音量大小。
  • NS----Noise Suppression,即噪音抑制。

從 Audio Devices 輸出的數據依次通過 AEC,NS,AGC 等音頻處理模塊。ui

1.AEC

AEC 算法選擇

在 WebRTC 中,AEC 有 4 個可選的算法:阿里雲

  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。code

正常狀況下,input.wav - reverse.wav = ref_out.wav。視頻

經過這 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,可以起到減小近端噪音的做用。

「視頻雲技術」你最值得關注的音視頻技術公衆號,每週推送來自阿里雲一線的實踐技術文章,在這裏與音視頻領域一流工程師交流切磋。

相關文章
相關標籤/搜索