前言
WebRTC,名稱源自網頁實時通信(Web Real-Time Communication)的縮寫,簡而言之它是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術。並且還支持跨平台:windows,linux,mac,android,iOS。
實現原理
P2P連接模式
一般我們傳統的連接方式,都是以服務器為中介的模式:
類似http協議:客戶端<——>服務端(當然這里服務端返回的箭頭僅僅代表返回請求數據)。
進行即時通訊時,進行文字、圖片、錄音等傳輸的時候:客戶端A——服務器——客戶端B。
而點對點的連接恰恰數據通道一旦形成,中間是不經過服務端的,數據直接從一個客戶端流向另一個客戶端:
客戶端A——客戶端B ... 客戶端A——客戶端C ...(可以無數個客戶端之間互聯)
這個過程就像音視頻通話的應用場景,我們服務端確實是沒必要去獲取兩者通信的數據,而且這樣做有一個最大的一個優點就是,大大的減輕了服務端的壓力。
而WebRTC就是這樣一個基於P2P的音視頻通信技術。
客戶端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的這些信息。
如果想啟用這個功能,你必須讓你的應用程序傳 服務器的URL:
ICE試着找最好的路徑來讓客戶端建立連接,他會嘗試所有可能的選項,然后選擇最合適的方案,
ICE首先嘗試P2P連接,如果失敗就會通過Turn服務器進行轉接。
信令的類型
會話描述協議(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)
Sdp協議內規定的視頻傳輸控制協議就是rtcp