官术网_书友最值得收藏!

4.2 細(xì)化架構(gòu)

4.1節(jié)中介紹了WebRTC一對(duì)一通信的整體結(jié)構(gòu)及其過(guò)程,下面對(duì)其進(jìn)一步細(xì)化,看看它內(nèi)部又做了什么,如圖4.2所示。

圖4.2中可以看到它與圖4.1的架構(gòu)是類似的,只不過(guò)將每個(gè)端的內(nèi)部進(jìn)行了細(xì)化。圖中通信的雙方稱為Call和Called,即一個(gè)主叫,一個(gè)被叫。實(shí)際上,兩個(gè)終端內(nèi)部的邏輯是一樣的,這里以Call端為例,來(lái)看一下它內(nèi)部的結(jié)構(gòu)及其運(yùn)轉(zhuǎn)機(jī)制。

在Call端內(nèi)部,首先調(diào)用音視頻設(shè)備檢測(cè)模塊檢測(cè)終端是否有可用的音視頻設(shè)備,即步驟?;然后執(zhí)行第?步,調(diào)用音視頻采集模塊從設(shè)備中采集音視頻數(shù)據(jù);采集到數(shù)據(jù)后,執(zhí)行第?步開(kāi)啟客戶端錄制(是否開(kāi)啟錄制是可選的,用戶可以根據(jù)自己的需求選擇錄制或不錄制);當(dāng)數(shù)據(jù)采集相關(guān)的工作就緒后,執(zhí)行第?步,通過(guò)信令模塊與信令服務(wù)器建立連接;緊接著執(zhí)行第?步,創(chuàng)建RTCPeerConnection對(duì)象(RTCPeerConnection對(duì)象是WebRTC最核心的對(duì)象,后面音視頻數(shù)據(jù)的傳輸都靠它來(lái)完成)。RTCPeerConnection創(chuàng)建好后,系統(tǒng)要先將它與之前采集的音視頻數(shù)據(jù)綁定到一起,這樣RTCPeerConnection才知道從哪里獲取要發(fā)送的數(shù)據(jù)。以上就是圖4.2中前五步所完成的工作。

圖4.2 WebRTC 1:1架構(gòu)圖細(xì)化

接下來(lái)再來(lái)看一下RTCPeerConnection創(chuàng)建socket連接的過(guò)程。要建立socket連接,RTCPeerConnection首先要執(zhí)行圖4.2中的第?步,向STUN/TRUN服務(wù)器發(fā)送請(qǐng)求。STUN/TURN服務(wù)器收到Call的請(qǐng)求后,會(huì)將Call的外網(wǎng)IP地址和端口號(hào)作為應(yīng)答消息返回去;之后終端執(zhí)行第?步,通過(guò)信令服務(wù)器將Call的連接地址發(fā)送給對(duì)端。同理,Called也會(huì)將它的IP地址和端口發(fā)給Call。當(dāng)通信雙方都獲得對(duì)端的地址后,執(zhí)行第?步,此時(shí)socket連接就被建立起來(lái)了。至此,RTCPeerConnection就可以將音視頻數(shù)據(jù)源源不斷地發(fā)送給對(duì)端。以上就是WebRTC一對(duì)一通信的完整過(guò)程。

主站蜘蛛池模板: 新昌县| 新乡县| 尚义县| 武川县| 柘城县| 北碚区| 巴南区| 云安县| 三台县| 平顺县| 镇平县| 长汀县| 贺兰县| 连江县| 东乌珠穆沁旗| 韶关市| 北辰区| 宜阳县| 高阳县| 长春市| 民勤县| 闽侯县| 丁青县| 休宁县| 新乡县| 福贡县| 汝南县| 安仁县| 建湖县| 临潭县| 剑阁县| 新营市| 富源县| 于都县| 呼伦贝尔市| 嘉祥县| 田阳县| 万载县| 合肥市| 手游| 张家口市|