前言 linux
WebRTC,名稱源自網頁實時通訊(Web Real-Time Communication)的縮寫,簡而言之它是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術。而且還支持跨平臺:windows,linux,mac,android,iOS。android
實現原理web
P2P鏈接模式windows
通常咱們傳統的鏈接方式,都是以服務器爲中介的模式:瀏覽器
相似http協議:客戶端<——>服務端(固然這裏服務端返回的箭頭僅僅表明返回請求數據)。安全
進行即時通信時,進行文字、圖片、錄音等傳輸的時候:客戶端A——服務器——客戶端B。服務器
而點對點的鏈接偏偏數據通道一旦造成,中間是不通過服務端的,數據直接從一個客戶端流向另外一個客戶端:網絡
客戶端A——客戶端B ... 客戶端A——客戶端C ...(能夠無數個客戶端之間互聯)session
這個過程就像音視頻通話的應用場景,咱們服務端確實是不必去獲取二者通訊的數據,並且這樣作有一個最大的一個優勢就是,大大的減輕了服務端的壓力。框架
而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的這些信息。
信令的類型
會話描述協議(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