即時通訊音視訊開發(九):實時語音通訊的迴音及迴音消除概述
前言
即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。
系列文章
什麼是迴音?
在一般的VOIP軟體或視訊會議系統中,假設我們只有A和B兩個人在通話,首先,A的聲音傳給B,B然後用喇叭放出來,而這時B的MIC則會採集到喇叭放出來的聲音,然後傳回給A,如果這個傳輸的過程中時延足夠大,A就會聽到自己剛才說的話,這就是迴音。
什麼是迴音消除?
迴音消除的作用就是在B端對B採集到的聲音進行處理,把採集到的聲音中包含的A的聲音去掉之後在傳給A,這樣A就不會聽到自己說過的話了。
迴音消除並不容易
傳給迴音消除器的兩個聲音訊號,必須同步得非常好,就是說在B端接收到A說的話以後,要把這些聲音資料傳給回聲消除器做參考,然後再傳給音效卡,音效卡播放出來,這裡有一段延時,這時B再採集,然後傳給迴音消除器,與那個參考資料比較,從採集到的資料中把頻率和參考資料相同的部分消除掉。
如果傳給消除器的兩個訊號同步得不好,即兩個訊號找不到頻率相同的部分,就沒有辦法進行消除了。
在一般的VOIP軟體中,接收對方的聲音並傳到音效卡中播放是在一個執行緒中進行的,而採集本地的聲音並傳送到對方又是在另一個執行緒中進行的,而聲學回聲消除器在對採集到的聲音進行回聲消除的同時,還需要播放執行緒中的資料作為參考,而要同步這兩個執行緒中的資料是非常困難的,因為稍稍有些不同步,聲學回聲消除器中的自適應濾波器就會發散,不但消除不了回聲,還會破壞採集到的原始聲音,使被破壞的聲音難以分辨。
聲學回音主要又分成以下兩種:
- 直接回音:由揚聲器產生的聲音未經任何反射直接進入麥克風
- 間接回音:由揚聲器發出的聲音經過多次反射後,再進入Mic
對於第二種回聲,擁有多路徑、時變性的特點,是比較難處理的。
迴音消除的方法
第一種:通過硬體實現,有很多手機就是這麼做的,也有專業的晶片,但是隻支援8khz的,如果要求高質量的音質的話,基本實現不了。
第二種:通過軟體實現,qq,msn,skype很多具有通話功能的軟體,現在都具有回聲消除的功能(需是比較高版本的,低版本的可能沒有),但是實現程式碼是不對外的,開源的回聲消除程式碼只有speex和webrtc。
一般常用的開源的AEC有兩個:Speex 和 webrtc。webrtc相對比Speex強的多,原因如下:
1、webrtc有回聲時延估計演算法模組
2、webrtc有neteq模組
3、webrtc核心就是gips,原因你懂的。
網易雲信,你身邊的即時通訊和音視訊技術專家,瞭解我們,請戳網易雲信官網
想要閱讀更多行業洞察和技術乾貨,請關注網易雲信部落格
本文轉載自52im,作者:JackJiang