【WebRTC】NetEQ概述
阿新 • • 發佈:2019-01-25
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)