本文介紹webrtc音訊模組組成和結構,詳細介紹音訊引擎的配置和啟動,相信看完本文後,很多人可以利用webrtc完成乙個音訊通話程式開發。
一、對外介面
音訊部分的對外主要介面如下,各個介面之間的關係如圖1所示。
1)voiceengine:負責引擎的所有介面查詢,儲存共享資料資訊sharedata。
2)voebase:負責音訊處理的基本操作。
3)voeaudioprocessing:音訊訊號處理介面,設定各個音訊處理項的引數。
4)voecodec:音訊編譯碼介面,提供支援的編解碼器查詢,音訊編譯碼設定。
5)voehardware:音訊硬體裝置介面,負責音訊硬體裝置的設定。
其它的介面還有voeneteqstats,voenetwork,voertp_rtcp,voevideosync,voevolumecontrol,voefile,voecallreport,voedtmf,voemeidaprocess和voeencryption。
webrtc使用繼承實現介面轉換和查詢,介面之間的資料共享是通過sharedata完成,首先voiceengineimpl繼承各個對外介面的實現,所以可以從voiceengineimpl很容易獲取其他對外介面。而voiceengineimpl本身也繼承sharedata,當從voiceengineimpl獲取其他對外介面的同時,隱式的傳遞了sharedata指標,因此各個介面可以很方便的獲取到sharedata的資料資訊。因此雖然類與類之間的關係看起來比較混亂,但是使用上比較方便。
利用voiceengine獲取對外介面:voeinte***cexx* pinterf = voeinte***cexx:getinte***ce(pvoiceengine);
圖(1)介面關係示意圖
二、模組組成
圖(2)模組組成和關係示意圖
主要由五大模組組成:audiodevicemodule音訊裝置模組,audioprocess音訊處理模組,audiocodingmodule音訊編碼模組,audioconferencemixer混音模組和rtprtcp傳輸模組。
sharedata用於粘合各個模組之間的關係,負責管理全域性的物件,包括audiodevicemodule,transmitmixer,outputmixer,channelmanager和audioprocess。
錄音流程:audiodevicewincore負責採集音訊資料,傳遞到audiodevicebuffer中快取,audiodevicebuffer則將資料送入transmixmixer,首先交給audioprocess進行近端音訊處理,完成後分發到各個channel中,channel則通過audiocodingmodule進行編碼,編碼後再交付到rtprtcp中經由rtpsender傳送出去。
接收流程:rtpreceiver負責接收音訊rtp包,接收到rtp包後交給channel,channel轉交給audiocodingmodule中的acmneteq模組,進行解碼快取。
三、配置
1、音訊引擎建立與刪除
voiceengine*pvoeengine = voiceengine::create();
voiceengine::delete(pvoeengine);
2、音訊收發
1)音訊通話鏈路建立
webrtc中的channel,為一路音訊。作為網路語音通訊,至少要建立一路音訊channel。
channel沒有提供對外介面,是有voebase來管理的,通過索引號來選定對應的channel。
voebase*base = voebase::getinte***ce(pvoeengine);
int ch0 =base->createchannel();
2)網路埠設定
音訊通過rtp和rtcp傳送出去,rtp和rtcp使用udp實現,需要配置網路埠和位址。
//設定傳送給.2機器的3000埠
base->setsenddestination(ch0,3000,」192.168.8.2」);
//在本機的3000埠接收rtp包
base->setlocalreceiver(ch0,3000);
3)音訊編碼選擇
voecodec負責編譯碼的配置。
voecodec*codec = voebase::getinte***ce(pvoeengine);
設定channel的編碼型別之前,要查詢支援的編碼列表。
codecinstinst;
intnum = codec->numofcodecs();
for(int i=0; i
//設定編碼0
codec->getcodec(0,inst);
codec->setsendcodec(ch0,inst);
webrtc自動識別編碼型別,因此解碼不需要設定。
4)啟動
啟動接收:base->startreceive(ch0);開始接收後,每增加一路通話,引擎會將音訊進行混音再輸出。
啟動傳送:base->startsend(ch0);啟動傳送的時候,會檢查是否正在錄音,如果已經開啟錄音,則不再開啟;否則會執行音訊裝置錄音操作。
3、音訊處理的配置
voeaudioprocessing負責音訊處理的配置。
voeaudioprocessing*paudioproc = voeaudioprocessing::getinte***ce(pvoeengine);
//啟動agc功能
paudioproc->setagcstatus(true);
4、音訊裝置的配置
voehardware*phardware=voeaudioprocessing::getinte***ce(pvoeengine);
int numin =phardware->getnumofrecordingdevices();
for(int i=0;i
//選擇裝置0作為錄音裝置
phardware->setrecordingdevice(0);
webRTC協議分析
http hyper text transport protocol 超文字傳輸協議 應用層協議 包括 sip websocket 和 xmpp websocket 子協議 nat 會話穿透實用工具 回話建立之前會傳送stun報文進行測試 確定是否位於nat之後並發現對映位址和埠 這些資訊用於構建i...
WebRTC原始碼分析
注 webrtc的版本是m75 已完成 正在寫作中 webrtc原始碼分析之多路訊號分離器 physicalsocketserver webrtc原始碼分析之訊息佇列 messagequeue webrtc原始碼分析之執行緒 thread webrtc原始碼分析之跨執行緒同步執行 methodcal...
webrtc研究 remb協議分析
分析入口 webrtc ideo vie remb.cc void vieremb onreceivebitratechanged const std vector ssrcs,uint32 t bitrate bitrate bitrate calculate total receive bitr...