簡介
WebRTC (Web Real-Time Communications) 是一項即時通訊技術,它允許網路套用或者站點,在不借助中間媒介的情況下,建立瀏覽器之間點對點(Peer-to-Peer)的連線,實作視訊流和(或)音訊流或者其他任意數據的傳輸。WebRTC包含的這些標準使使用者在無需安裝任何外掛程式或者第三方的軟體的情況下,建立點對點(Peer-to-Peer)的數據分享和電話會議成為可能。
它並不是單一的協定,包含了媒體、加密、傳輸層等在內的多個協定標準以及一套基於 JavaScript 的 API。透過簡單易用的 JavaScript API ,在不安裝任何外掛程式的情況下,讓瀏覽器擁有了 P2P音視訊和數據分享的能力。同時WebRTC 並不是一個孤立的協定,它擁有靈活的信令,可以便捷的對接現有的SIP 和電話網路的系統。
支持的瀏覽器和平台
WebRTC 內部結構
架構圖顏色標識說明:
紫色部份是Web開發者API層
藍色實線部份是面向瀏覽器廠商的API層
藍色虛線部份瀏覽器廠商可以自訂實作
WebRTC有三個模組:
Voice Engine(音訊引擎)
NetEQ for voice(處理網路抖動和語音包遺失)
Echo Canceler(回聲消除器)/ Noise Reduction(雜訊抑制)
Video Engine(視訊引擎)
VP8 Codec(視訊影像編解碼器)
Video jitter buffer(視訊抖動緩衝區,處理視訊抖動和視訊資訊包遺失)
Image enhancements(影像品質增強)
Transport
SRTP(安全的即時傳輸協定,用以音視訊流傳輸)
Multiplexing(多路復用)
P2P,STUN+TURN+ICE(用於NAT網路和防火墻穿越的)
除此之外,安全傳輸可能還會用到DTLS(數據報安全傳輸),用於加密傳輸和金鑰協商
整個WebRTC通訊是基於UDP的
WebRTC 的核心元件
音視訊引擎:OPUS、VP8 / VP9、H264
傳輸層協定:底層傳輸協定為 UDP
媒體協定:SRTP / SRTCP
數據協定:DTLS / SCTP
P2P 內網穿透:STUN / TURN / ICE / Trickle ICE
信令與 SDP 協商:HTTP / WebSocket / SIP、 Offer Answer 模型
WebRTC 音訊和視訊引擎
最底層是硬體裝置,上面是音訊捕獲模組和視訊捕獲模組
中間部份為音視訊引擎。音訊引擎負責音訊采集和傳輸,具有降噪、回聲消除等功能。視訊引擎負責網路抖動最佳化,互聯網傳輸編解碼最佳化
在音視訊引擎之上是 一套 C++ API,在 C++ 的 API 之上是提供給瀏覽器的Javascript API
WebRTC 協定棧
WebRTC 核心的協定都是在右側基於 UDP 基礎上搭建起來的
其中,ICE、STUN、TURN 用於內網穿透, 解決了獲取與繫結外網對映地址,以及 keep alive 機制
DTLS 用於對傳輸內容進行加密,可以看做是 UDP 版的 TLS。由於 WebRTC 對安全比較重視,這一層是必須的。所有WebRTC元件都必須加密,並且其JavaScript API只能用於安全源(HTTPS或本地主機)。信令機制並不是由WebRTC標準定義的,所以您必須確保使用安全協定。
SRTP 與 SRTCP 是對媒體數據的封裝與傳輸控制協定
SCTP 是流控制傳輸協定,提供類似 TCP 的特性,SCTP 可以基於 UDP 上構建,在 WebRTC 裏是在 DTLS 協定之上
RTCPeerConnection 用來建立和維護端到端連線,並提供高效的音視訊流傳輸
RTCDataChannel 用來支持端到端的任意二進制數據傳輸
WebRTC 協定棧解釋
ICE:互動式連線建立(RFC 5245)
STUN:用於NAT的會話遍歷實用程式(RFC 5389)
TURN:在NAT周圍使用繼電器進行遍歷(RFC 5766)
SDP:會話描述協定(RFC 4566)
DTLS:數據報傳輸層安全性(RFC 6347)
SCTP:流控制傳輸協定(RFC 4960)
SRTP:安全即時傳輸協定(RFC 3711)