音視頻技術之《WebRTC實時音視頻技術基礎:基本架構和協議棧》

概述


本文主要介紹WebRTC的架構和協議棧。

最基本的三角形WebRTC架構


爲了便於理解,我們來看一個最基本的三角形WebRTC架構(見下圖):

WebRTC實時音視頻技術基礎:基本架構和協議棧_1.png 

在這個架構中,移動電話用“瀏覽器M”表示,筆記本電腦用“瀏覽器L”表示,通過Web服務器將它們連接起來。要建立一個實時媒體通訊,兩臺設備需要了解彼此的媒體功能,通過交換呼叫信令控制協議實現。

諸如這樣的信令協議在WebRTC標準中並非事先規定,而是由開發者自行制定。在瀏覽器RTC會話的步驟如下:

  • 首先,兩個瀏覽器都從Web服務器下載了WebRTC程序(HTML5/JavaScript);
  • 其次,兩個瀏覽器通過Web服務器交換控制信令信息(使用嵌入式信令服務器),建立媒體功能功能互通。
  • 最後,兩個瀏覽器直接建立RTC媒體的音頻、視頻和數據通道。

真正實用的基於P2P的WebRTC架構


WebRTC使用P2P媒體流,音頻、視頻和數據的連接直接通過瀏覽器實現。但是,瀏覽器卻隱藏在NAT(網絡地址翻譯)和防火牆的後面,這增加了建立P2P媒體會話的難度。這些流程和協議,如ICE或Trickle ICE,STUN和TURN,在建立P2P媒體流都是必不可少的。

WebRTC實時音視頻技術基礎:基本架構和協議棧_2.png 

如何使用STUN協議建立一個P2P RTC媒體(如圖5所示),簡化版的ICE流程如下:

  • 1.兩個瀏覽器通過自己的公網IP地址,使用STUN協議信息和STUN服務器建立聯繫;
  • 2.兩個瀏覽器通過SDP提供/應答機制,使用呼叫控制信令消息交換它們已發現的公共IP地址(ICE候選);
  • 3.兩個瀏覽器執行連接檢查(ICE衝孔),確保P2P可以連接;
  • 4.建立連接後,RTC媒體會話和媒體交換就可以實現了。
  • 5.但是,假如在一個高度限制的NAT或防火牆,這種直接的路徑將無法建立,只能到達TURN服務器。結果是媒體通過TURN服務器分程傳遞(如下圖所示)。

WebRTC實時音視頻技術基礎:基本架構和協議棧_3.png 

WebRTC的協議棧


由互聯網工程任務組(IETF)基於標準的可互操作的通信模型和協議棧詳細地定義了WebRTC技術(參見圖7),如下:

WebRTC實時音視頻技術基礎:基本架構和協議棧_4.png 

如前所述的信令棧,並非由WebRTC實現規定,而是由開發者自行決定。在這個例子中,我們將使用SIP-over-WebSocket(SIPoWS)作爲信令棧。HTTP協議用於瀏覽器下載HTML5/JavaScript程序內容;NAT棧解決P2P連接問題;媒體棧用於發送和接收RTC的音頻和視頻。

LETF標準規定G.711和Opus作爲音頻/視頻解碼器。視頻解碼器尚未授權,但是H.248和VP8已經獲得授權。媒體棧也用於交換RTC數據。本例中,實時信息採用消息會話中繼協議(MSRP),實時會議採用二層控制協議(BFCP),實時文本服務採用T.140。

全站即時通訊技術資料分類


[1] 網絡編程基礎資料:
TCP/IP詳解 - 第11章·UDP:用戶數據報協議
TCP/IP詳解 - 第17章·TCP:傳輸控制協議
TCP/IP詳解 - 第18章·TCP連接的建立與終止
TCP/IP詳解 - 第21章·TCP的超時與重傳
理論經典:TCP協議的3次握手與4次揮手過程詳解
理論聯繫實際:Wireshark抓包分析TCP 3次握手、4次揮手過程
計算機網絡通訊協議關係圖(中文珍藏版)
NAT詳解:基本原理、穿越技術(P2P打洞)、端口老化等
UDP中一個包的大小最大能多大?
Java新一代網絡編程模型AIO原理及Linux系統AIO介紹
NIO框架入門(三):iOS與MINA2、Netty4的跨平臺UDP雙向通信實戰
NIO框架入門(四):Android與MINA2、Netty4的跨平臺UDP雙向通信實戰
>> 更多同類文章 ……

[2] 有關IM/推送的通信格式、協議的選擇:
爲什麼QQ用的是UDP協議而不是TCP協議?
移動端即時通訊協議選擇:UDP還是TCP?
如何選擇即時通訊應用的數據傳輸格式
強列建議將Protobuf作爲你的即時通訊應用數據傳輸格式
移動端IM開發需要面對的技術問題(含通信協議選擇)
簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端
理論聯繫實際:一套典型的IM通信協議設計詳解
58到家實時消息系統的協議設計等技術實踐分享
>> 更多同類文章 ……

[3] 有關IM/推送的心跳保活處理:
Android進程保活詳解:一篇文章解決你的所有疑問
Android端消息推送總結:實現原理、心跳保活、遇到的問題等
爲何基於TCP協議的移動端IM仍然需要心跳保活機制?
微信團隊原創分享:Android版微信後臺保活實戰分享(進程保活篇)
微信團隊原創分享:Android版微信後臺保活實戰分享(網絡保活篇)
移動端IM實踐:實現Android版微信的智能心跳機制
移動端IM實踐:WhatsApp、Line、微信的心跳策略分析
>> 更多同類文章 ……

[4] 有關WEB端即時通訊開發:
新手入門貼:史上最全Web端即時通訊技術原理詳解
Web端即時通訊技術盤點:短輪詢、Comet、Websocket、SSE
SSE技術詳解:一種全新的HTML5服務器推送事件技術
Comet技術詳解:基於HTTP長連接的Web端實時通信技術
WebSocket詳解(一):初步認識WebSocket技術
socket.io實現消息推送的一點實踐及思路
>> 更多同類文章 ……

[5] 有關IM架構設計:
淺談IM系統的架構設計
簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端
一套原創分佈式即時通訊(IM)系統理論架構方案
從零到卓越:京東客服即時通訊系統的技術架構演進歷程
蘑菇街即時通訊/IM服務器開發之架構選擇
騰訊QQ1.4億在線用戶的技術挑戰和架構演進之路PPT
微信技術總監談架構:微信之道——大道至簡(演講全文)
如何解讀《微信技術總監談架構:微信之道——大道至簡》
快速裂變:見證微信強大後臺架構從0到1的演進歷程(一)
17年的實踐:騰訊海量產品的技術方法論
>> 更多同類文章 ……

[6] 有關IM安全的文章:
即時通訊安全篇(一):正確地理解和使用Android端加密算法
即時通訊安全篇(二):探討組合加密算法在IM中的應用
即時通訊安全篇(三):常用加解密算法與通訊安全講解
即時通訊安全篇(四):實例分析Android中密鑰硬編碼的風險
傳輸層安全協議SSL/TLS的Java平臺實現簡介和Demo演示
理論聯繫實際:一套典型的IM通信協議設計詳解(含安全層設計)
微信新一代通信安全解決方案:基於TLS1.3的MMTLS詳解
來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享
>> 更多同類文章 ……

[7] 有關實時音視頻開發:
即時通訊音視頻開發(一):視頻編解碼之理論概述
即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹
即時通訊音視頻開發(三):視頻編解碼之編碼基礎
即時通訊音視頻開發(四):視頻編解碼之預測技術介紹
即時通訊音視頻開發(五):認識主流視頻編碼技術H.264
即時通訊音視頻開發(六):如何開始音頻編解碼技術的學習
即時通訊音視頻開發(七):音頻基礎及編碼原理入門
即時通訊音視頻開發(八):常見的實時語音通訊編碼標準
即時通訊音視頻開發(九):實時語音通訊的迴音及迴音消除概述
即時通訊音視頻開發(十):實時語音通訊的迴音消除技術詳解
即時通訊音視頻開發(十一):實時語音通訊丟包補償技術詳解
即時通訊音視頻開發(十二):多人實時音視頻聊天架構探討
即時通訊音視頻開發(十三):實時視頻編碼H.264的特點與優勢
即時通訊音視頻開發(十四):實時音視頻數據傳輸協議介紹
即時通訊音視頻開發(十五):聊聊P2P與實時音視頻的應用情況
即時通訊音視頻開發(十六):移動端實時音視頻開發的幾個建議
即時通訊音視頻開發(十七):視頻編碼H.264、V8的前世今生
簡述開源實時音視頻技術WebRTC的優缺點
良心分享:WebRTC 零基礎開發者教程(中文)
>> 更多同類文章 ……

[8] IM開發綜合文章:
移動端IM開發需要面對的技術問題
開發IM是自己設計協議用字節流好還是字符流好?
請問有人知道語音留言聊天的主流實現方式嗎?
IM系統中如何保證消息的可靠投遞(即QoS機制)
談談移動端 IM 開發中登錄請求的優化
完全自已開發的IM該如何設計“失敗重試”機制?
微信對網絡影響的技術試驗及分析(論文全文)
即時通訊系統的原理、技術和應用(技術論文)
開源IM工程“蘑菇街TeamTalk”的現狀:一場有始無終的開源秀
>> 更多同類文章 …… 

[9] 開源移動端IM技術框架資料:
開源移動端IM技術框架MobileIMSDK:快速入門
開源移動端IM技術框架MobileIMSDK:常見問題解答
開源移動端IM技術框架MobileIMSDK:壓力測試報告
開源移動端IM技術框架MobileIMSDK:Android版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:Java版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:iOS版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:Android客戶端開發指南
開源移動端IM技術框架MobileIMSDK:Java客戶端開發指南
開源移動端IM技術框架MobileIMSDK:iOS客戶端開發指南
開源移動端IM技術框架MobileIMSDK:Server端開發指南
>> 更多同類文章 ……

[10] 有關推送技術的文章:
iOS的推送服務APNs詳解:設計思路、技術原理及缺陷等
Android端消息推送總結:實現原理、心跳保活、遇到的問題等
掃盲貼:認識MQTT通信協議
一個基於MQTT通信協議的完整Android推送Demo
求教android消息推送:GCM、XMPP、MQTT三種方案的優劣
移動端實時消息推送技術淺析
掃盲貼:淺談iOS和Android後臺實時消息推送的原理和區別
絕對乾貨:基於Netty實現海量接入的推送服務技術要點
移動端IM實踐:谷歌消息推送服務(GCM)研究(來自微信)
爲何微信、QQ這樣的IM工具不使用GCM服務推送消息?
>> 更多同類文章 ……

[11] 更多即時通訊技術好文分類:

http://www.52im.net/forum.php?mod=collection&op=all

原文 http://www.52im.net/thread-442-1-1.html

發佈了9 篇原創文章 · 獲贊 9 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章