本文介紹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; icodec->getcodec(i,inst);
//列印編碼資訊
//設定編碼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;iphardware->getrecordingdevicenames(…)
//列印錄音裝置
//選擇裝置0作為錄音裝置
phardware->setrecordingdevice(0);
WebRTC原始碼分析 音訊模組結構分析
一 概要介紹webrtc的音訊處理流程,見下圖 webrtc將音訊會話抽象為乙個通道channel,譬如a與b進行音訊通話,則a需要建立乙個channel與b進行音訊資料傳輸。上圖中有三個channel,每個channel包含編譯碼和rtp rtcp傳送功能。1 錄音執行緒 負責麥克風音訊的採集,見...
WebRTC原始碼分析
注 webrtc的版本是m75 已完成 正在寫作中 webrtc原始碼分析之多路訊號分離器 physicalsocketserver webrtc原始碼分析之訊息佇列 messagequeue webrtc原始碼分析之執行緒 thread webrtc原始碼分析之跨執行緒同步執行 methodcal...
WebRTC原始碼分析之RTP RTCP(一)
首先學習一下rtp rtcp的基礎知識。rtp報頭 當上面csrc計數器 cc 等於0時上面一共12位元組,當大於0時有以下csrc列表 貢獻源列表 csrc list 0 15項,每項32位元,用來標誌對乙個rtp混合器產生的新包有貢獻的所有rtp包的源。由混合器將這些有貢獻的ssrc識別符號插入...