国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WebRtc建立P2P鏈接的總體流程

2019-11-09 16:43:12
字體:
來源:轉載
供稿:網友

前言

最近項目需要了解下webrtc,網上webrtc的資料層出不窮,大多都是過時的描述。個人在這方面也走了不少彎路,為了方便自己后續的工作,將自己閱讀代碼的所得進行了總結。鑒于個人水平有限,錯誤在所難免,敬請指正不甚感激!

WebRtc簡介

webrtc是Web Real-Time Communication的縮寫,google收購Global ip Solutions公司而獲得的一項技術,用來實現瀏覽器與瀏覽器或者瀏覽器與本地應用的視頻通話標準,也可以用來實現文件共享等功能!后來谷歌推廣成了一套W3C標準,目前支持的瀏覽器有 ChromeFirefoxOpera。有兩大使用比較廣泛的開源實現,一個是谷歌自己實現的webrtc另一套是愛立信實現的openwebrtc。webrtc源碼托管在谷歌源碼服務器,可以參考https://webrtc.org/中的文檔獲取源碼和編譯,由于國內被墻了,所以這個過程比較痛苦,后面抽時間專門針對這塊總結下。openwebrtc源碼托管在github上,參考https://github.com/EriCSSonResearch/openwebrtc!本系列文章都是針對的谷歌的源碼實現。

WebRtc建立鏈接總體流程

無論使用前端的WebRtc API接口,還是WebRtc源碼上構建自己的聊天框架,都需要遵循以下執行流程: 這里寫圖片描述 為了便于描述,只考慮ClientA鏈接上apPRtc服務器(谷歌實現的房間服務器和信令服務器),coturn服務器(ICE服務器),并將自己的condidate發送給信令apprtc服務器后,ClientB才開始鏈接,ClientA想ClientB發起對聊請求,調用描述如下: - ClientA鏈接上房間服務器后,房間服務器將信令服務器,ICE服務器的配置信息傳送給ClientA - ClientA拿到配置信息后,創建PeerConnection對象,新建本地的音視頻流并封裝在MediaStream對象中,并添加在創建的PeerConnection對象中 - ClientA通過creatOff創建本地SDP,創建成功后通過SDPObserver回調調用SetLocalDescription設置本地despription,設置成功后調用回調通過http協議將本地的SDP發送到遠程的房間服務器,接著通過ICE服務器查詢本機對外的接入端(Condidate),每發現新的condidate,ice服務器會通過異步的方式告知,本地則會調用相應的回調并將結果通過websocket發送給信令服務器

通過上述過程apprtc服務器保存有ClientA的SDP以及Condidate信息,給A B之間創建p2p鏈接創造了條件。

ClientB鏈接上房間服務器,房間服務器將信令服務器,ICE服務器的配置信息,已經ClientA的SDP,condidate信息全部返回給ClientB。ClientB創建PeerConnection對象,新建本地的音視頻流并封裝在MediaStream對象中,并添加在創建的PeerConnection對象中ClientB先將ClientA的SDP信息通過SetRemoteDescripton保存,通過CreatAnswer接口創建本地SDP,若創建成功通過SDPObserver回調調用SetLocalDescription設置本地description,設置成功后也會通過SDPObserve回調將SDP發送給信令服務器。在SetLocalDescription會根據房間服務器返回的ice配置信息鏈接ice服務器,開始查詢本地的condidate,每發現新的condidate,ice服務器會通過異步的方式告知,本地則會調用相應的回調并將結果通過websocket發送給信令服務器。接著會將房間服務器送回的ClientA condidate通過SetRemoteCondidate保存!信令服務器會將ClientB端的SDP condidate信息通過websocket發送給ClientA,ClientA通過SetRemoteDescripton保存ClientB的SDP信息,通過SetRemoteCondidate保存ClientB的condidate信息,至此兩端的p2p鏈接建立完畢!

相關時序圖如下: 這里寫圖片描述 類圖如下: 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海丰县| 抚顺县| 永善县| 昭平县| 德格县| 苏州市| 中牟县| 龙胜| 贺州市| 班玛县| 沅江市| 阳春市| 沿河| 长汀县| 巨野县| 牟定县| 武乡县| 阿城市| 防城港市| 白水县| 东港市| 民县| 北票市| 根河市| 岳阳县| 南岸区| 阜康市| 昌江| 石嘴山市| 柳江县| 宜章县| 永济市| 富川| 邓州市| 黄陵县| 丰镇市| 乌兰县| 龙陵县| 上犹县| 仪征市| 留坝县|