語音通訊是實時通訊,影響語音質量的因素很多,大致可把這些因素分成兩大類:一類是回聲雜訊等周圍環境因素導致語音質量差,另一類是丟包延時等網路環境因素導致語音質量差。這兩類因素由於成因不一樣,解決方法也不一樣。下面就講講用哪些方法來提高語音質量。
首先看由於周圍環境因素導致語音質量差的解決方法。這類方法主要是用訊號處理演算法來提高音質,不同的因素有不同的處理演算法,用回聲消除演算法把回聲消除掉,用雜訊抑制演算法把雜訊抑制住,用自動增益控制演算法把音量調整到乙個期望的值。這些都是訊號處理領域比較專業的演算法,好在現在webrtc已經開源,也包括這些演算法(aec/ans/agc)。我們只要把這些演算法用好就有非常不錯的效果。這些演算法的除錯中aec相對複雜一些,我在前面的文章中(音訊處理之回聲消除及除錯經驗)專門寫過怎麼除錯,有興趣的可以去看一看。ans/agc相對簡單,先在linux下做乙個小應用程式驗證演算法的效果,有可能要調一下引數,找乙個相對效果較好的值。驗證演算法的過程也是熟悉演算法怎麼使用的過程,對後面把演算法應用到方案中是有好處的。
再來看由於網路環境因素導致語音質量差的解決方法。網路環境因素主要包括延時、亂序、丟包、抖動等,又有多種方法來提高音質,主要有抖動緩衝區(jitter buffer)、丟包補償(plc)、前向糾錯(fec)、重傳等,下面分別一一介紹。
其中group first sequence number是指這一組原始包中第乙個的sequence number,original count是指一組原始包的個數,redundant count是指生成的冗餘包的個數,redundant index是指第幾個冗餘包。冗餘包有自己的payload type 和sequence number,要在sip的sdp中告訴對方冗餘包的payload type是多少,對方收到這個payload type的包後就做冗餘包處理。
fec不依賴與語音包內的payload,對於丟失的包能精確的復原出來。但是它也有缺點,一是它要累積到指定數量的包才能精確的復原,這就增加了時延;二是它要產生冗餘包傳送給對方,增加了流量。
3,plc
plc對小的丟包率(< 15%)有比較好的效果,大的丟包率效果就不好了,尤其是連續丟包,第乙個丟的包補償效果還不錯,越到後面丟的包效果越差。
把jitter buffer、fec、plc結合起來就可以得到如下的接收側針對網路環境因素的提高音質方案:
從網路收到的rtp包如是原始包不僅要put進jb,還要put進fec。如是冗餘包則只put進fec,在fec中如果一組包中原始包的個數加上冗餘包的個數達到指定值就開始做fec解碼得到丟失的原始包,並把那些丟失的原始包put進jb。在需要的時候把語音幀從jb中get出解碼並有可能做plc。
4,重傳
5,rfc2198
rfc2198是rtp payload for redundant audio data(用於冗餘音訊資料的rtp負載格式),用了它後在當前rtp包中不僅可以承載當前語音的payload,還可以承載前幾個包的payload,承載以前包的個數越多,在高丟包率的情況下效果越好,但是延時也就越大,同時消耗的流量也就越多。相比於fec,它消耗的流量更多,因為fec用一組rtp包編碼生乙個或多個成冗餘包,而它乙個rtp包就帶乙個或多個以前包的payload。在有線網路或者wifi下可以用,在蜂窩網路下建議慎用。
談談語音通訊中的各種tone
今天談的這個主題 tone 存在於我們的日常打 過程中。先舉兩個場景 1,你拿起固話話筒準備打 按 號碼前先從話筒裡聽到 嗡 的連續音,這叫dial tone 撥號音,表示你可以撥 號碼了 你撥完號碼對方振鈴後你又聽到有規律的 嘟 嘟 的斷續音,這叫ring back tone 回鈴音,表示對方已振...
談談語音通訊中的各種tone
今天談的這個主題 tone 存在於我們的日常打 過程中。先舉兩個場景 1,你拿起固話話筒準備打 按 號碼前先從話筒裡聽到 嗡 的連續音,這叫dial tone 撥號音,表示你可以撥 號碼了 你撥完號碼對方振鈴後你又聽到有規律的 嘟 嘟 的斷續音,這叫ring back tone 回鈴音,表示對方已振...
VOIP通訊中影響語音質量的因素
在voip通訊中,影響語音質量的因素比較多,歸類起來就以下幾個大的因素 1 網路因素,網路一般體現在網路的延遲 抖動 丟包。延遲一般是有語音的編譯碼速度 jitterbuffer延遲 tcp ip協議棧處理速 度 中間路由器路由延遲等引起的,在這些因素中,最重要的是jitterbuffer延遲和中間...