前言實現原理
p2p連線模式
一般我們傳統的連線方式,都是以伺服器為中介的模式:
類似http協議:客戶端服務端(當然這裡服務端返回的箭頭僅僅代表返回請求資料)。
而點對點的連線恰恰資料通道一旦形成,中間是不經過服務端的,資料直接從乙個客戶端流向另乙個客戶端:
客戶端a——客戶端b ... 客戶端a——客戶端c ...(可以無數個客戶端之間互聯)
客戶端a與b建立p2p連線的過程
1.a和b連線上服務端,建立乙個tcp長連線(任意協議都可以,websocket/mqtt/socket原生/xmpp),為了省事,直接採用websocket,這樣乙個信令通道就有了。
2.a從伺服器獲得ice server同時生成包含session description(sdp)的offer,傳送給socket服務端。
3.socket服務端把a的offer和candidate**給b,b會儲存下a這些資訊。
4.然後b傳送包含自己session description的answer(因為它收到的是offer,所以返回的是answer,但是內容都是sdp)和ice candidate給socket服務端。
5.socket服務端把b的answer和ice candidate給a,a儲存下b的這些資訊。
webrtc的伺服器
webrtc至少有兩件事必須要用到伺服器:
1、客戶端之間交換建立通訊的元資料(信令)必須通過伺服器。
我們在a和b需要建立p2p連線的時候,至少要伺服器來協調,來控制連線開始建立。而連線斷開的時候,也需要伺服器來告知另一端p2p連線已斷開
2、為了穿越nat和防火牆。
如果客戶端a想給客戶端b傳送資料,則資料來到客戶端b所在的路由器下,會被nat阻攔,這樣b就無法收到a的資料了 。
webrtc是通過 ice 這套框架來處理複雜的網路環境,
如果想啟用這個功能,你必須讓你的應用程式傳 伺服器的url:
ice試著找最好的路徑來讓客戶端建立連線,他會嘗試所有可能的選項,然後選擇最合適的方案,
ice首先嘗試p2p連線,如果失敗就會通過turn伺服器進行轉接。
信令的作用
用來控制通訊開啟或者關閉的連線控制訊息
發生錯誤時用來彼此告知的訊息
**流元資料,比如像解碼器、解碼器的配置、頻寬、**型別等等
用來建立安全連線的關鍵資料
外界所看到的的網路上的資料,比如ip位址、埠等
信令的型別
offer:建立點對點的連線時,發起端(a客戶端)需要傳送的信令
answer:建立點對點的連線時,被叫端(b客戶端)需要傳送的信令
bye:點對點的連線斷開時,傳送的信令
會話描述協議(session description protocal,簡稱sdp)
信令的主要內容的格式都遵循會話描述協議
1) 會話的名稱和目的
2)會話存活時間
3)包含在會話中的**資訊,包括:
**型別(video, audio, etc)
傳輸協議(rtp/udp/ip, h.320, etc)
**格式(h.261 video, mpeg video, etc)
多播或遠端(單播)位址和埠
4)為接收**而需的資訊(addresses,
ports, formats and so on)
5)使用的頻寬資訊
6)可信賴的接洽資訊
乙個sdp的信令的內容大致上如下:
實時傳輸控制協議(real-time controlprotocol,rtcp)
rtp/rtcp協議是流**通訊的基石。rtp協議定義流**資料在網際網路上傳輸的資料報格式,而rtcp協議則負責可靠傳輸、流量控制和擁塞控制等服務質量保證。在webrtc專案中,rtp/rtcp模組作為傳輸模組的一部分,負責對傳送端採集到的**資料進行進行封包,然後交給上層網路模組傳送;在接收端rtp/rtcp模組收到上層模組的資料報後,進行解包操作,最後把負載傳送到解碼模組。因此,rtp/rtcp 模組在webrtc通訊中發揮非常重要的作用。
Web端即時通訊技術
以前限制web開發接近原生應用的一大障礙就是web開發很難實現即時通訊。因為在web應用中,由於其使用的http協議的特殊性,只有使用者在介面中進行操作後,伺服器的到客戶端的資訊,才能進行響應。也就是說,使用web開發接近原生應用的一大障礙是伺服器端不能主動向客戶端傳送資訊。即時通訊技術就是實現這樣...
mysql 即時通訊 即時通訊IM模板
更新記錄 1.0.3 2020 10 22 完成點對點通訊功能,修復若 ug。1.0.2 2020 06 02 1 增加登入 註冊 個人資訊頁面 speedy im 注意介紹 正在持續開發中,目前僅部分ui開發完成。demo im.apk 已有基礎ui以及登陸 點到點聊天等功能。開發客戶端測試賬號密...
即時通訊系統
企業擁有一套理想的即時通訊系統,正如找到了一位得心應手的商務秘書。然而,縱觀當前企業即時通訊市場,同質化的即時通訊軟體比比皆是,而能夠讓企業真正根據自身需要來按需定製 人性化開發的即時通訊系統卻少之又少。傳統開發理念讓企業被動使用即時通訊。目前,大多數的軟體提供商還在用傳統的開發理念來開發企業即時通...