【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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章