1. 程式人生 > >【WebRTC】NetEQ概述

【WebRTC】NetEQ概述

WebRTC由語音引擎,視訊引擎和網路傳輸三大模組組成,其中語音引擎是WebRTC中最具價值的技術之一。

WebRTC語音引擎由一系列音訊和網路處理模組組成,包括了從音訊採集到網路傳輸等處理流程的完整解決方案。


語音引擎工作流程圖

語音引擎的一般工作流程如下:

1.發起端進行聲音採集

2.採集到的聲音訊號進行回聲消除,噪音抑制,自動增益控制處理

3.語音壓縮編碼

4.通過Internet網路傳輸到接收端

5.到達接收端,先進入NetEQ模組進行抖動消除,丟包隱藏解碼等操作

6.將處理過後的音訊資料送入音效卡裝置進行播放

NetEQ模組是Webrtc語音引擎中的核心模組


NetEQ模組框圖

從上圖看,NetEQ模組基本上分為:自適應緩衝器(Adaptive Packet Buffer),語音解碼器(Speech Decoder),抖動控制和丟包隱藏(Jitter Control and Error Concealment) 以及播放(Play Out)四大部分。其中抖動控制和丟包隱藏模組是NetEQ的核心演算法,既控制著自適應緩衝器,又與解碼器進行緊密的互動,並且將最終的計算結果交給音效卡去播放。

WebRTC的語音引擎在執行時會啟動兩個執行緒:一個執行緒用於接收來自於網路的資料包,並將其插入到抖動緩衝區中;另外一個執行緒每隔10ms從NetEQ中提取10ms語音資料進行播放。

網路資料包進入抖動緩衝區的過程在:

int32_t ACMNetEQ::RecIn(const uint8_t* incoming_payload, const int32_t length_payload, const WebRtcRTPHeader& rtp_info, uint32_t receive_timestamp)

提取10ms語音資料到音效卡的過程在:
int32_t ACMNetEQ::RecOut(AudioFrame& audio_frame)