簡介
WebRTC(Web Real-Time Communication)。Real-Time Communication,實時通訊。
WebRTC能讓web應用和站點之間選擇性地分享音視頻流。在不安裝其它應用和插件的情況下,完成點對點通信。
WebRTC背后的技術被實現為一個開放的Web標準,并在所有主要瀏覽器中均以常規JavaScript API的形式提供。對于客戶端(例如Android和iOS),可以使用提供相同功能的庫。 WebRTC是個開源項目,得到Google,Apple,Microsoft和Mozilla等等公司的支持。2011年6月1日開源并在Google、Mozilla、Opera支持下被納入萬維網聯盟的W3C推薦標準。
WebRTC包括一系列API和相互關聯的協議來實現通信。
相關技術
VoIP
Voice over Internet Protocol,在網絡上傳輸聲音消息的技術。
例如網絡音頻通話。或者叫做IP電話,寬帶電話。使用VoIP技術的一大原因是費用低。
相關協議
NAT
Network address translation,網絡地址轉換。
NAT能給你的設備一個公共IP地址。一個路由器(router)有一個公共IP地址,每個連接到路由的設備有一個私有的IP地址。
設備發送請求時,會從一個特定端口,通過私有IP發送到路由的公共IP。這樣每個設備在網上不需要都有一個公共IP地址,但也能被其它設備發現。
參考 IP Network Address Translator (NAT) Terminology and Considerations
ICE
Interactive Connectivity Establishment,互動式連接建立(交互式連通性建立)。
ICE是一套能讓web瀏覽器之間互相連接的框架。通常來說,節點A到B是很難直接相連的。防火墻會阻止連接,設備沒有公共IP地址,路由不允許直接連接其他節點。
ICE使用STUN或者TURN服務(或者同時使用兩者)來建立連接。
STUN
Session Traversal Utilities for NAT (STUN) ,NAT會話傳輸工具。
STUN協議能發現客戶端(節點)的公共地址。客戶端發送一個請求給網上的STUN服務器,服務器返回客戶端的公共地址。不管客戶端在路由器的NAT后能否可達。
STUN為請求者提供了可公開訪問的IP地址,它就不再參與對話了。
有些路由器會限制設備與外面其它設備的連接。這意味著即使STUN服務器知道了路由的公共IP地址,也沒法建立連接。
這種情況下我們需要使用TURN。
TURN
Traversal Using Relays around NAT,使用中繼繞過NAT傳輸。
一些路由器使用一種叫“Symmetric NAT”(對稱型NAT)的限制。這意味著路由器僅允許之前連接過的節點(peer)來建立連接。
STUN提供了一個能讓應用(終端,節點)穿過NAT的方法。STUN允許客戶端獲得一個傳輸地址(一個IP和端口)來獲取其它節點的數據。
然而STUN獲取到的地址不一定能被所有節點使用。這些地址是否可用取決于網絡拓撲的情況。所以,單獨STUN無法提供完整的穿越NAT的方案。
TURN協議允許兩個處于NAT環境的主機利用中繼進行通訊。客戶端能夠在TURN服務器上分配資源,與其它客戶端(peer)進行通訊。
客戶端關聯一個TURN服務器的地址(relayed server address)來作為中繼。
客戶端發送報文給TURN服務,TURN服務使用relayed server address作為源地址向其他客戶端中繼轉發報文。
穿越NAT,這個過程就像是“打洞”。也有人稱TURN服務器為“打洞服務器”。
這么看,TURN服務器需要有大的帶寬。因此,ICE會優先考慮直接通訊,無法直接通訊情況下會使用TURN。
參考 TURN rfc8656
SDP
Session Description Protocol,會話描述協議。
描述多媒體連接內容的協議。例如分辨率,格式,編碼,加密算法等等。
實際上,SDP不是個真正的協議。它也是用來描述設備之間連接與傳輸多媒體的數據格式。
參考 SDP: Session Description Protocol | rfc8866
參考
- 媒體設備入門 | webrtc.org
- 2個節點建立連接時的溝通過程 | MDN
- WebRTC 協議介紹 | developer.mozilla.org
- 信令與視頻通話 | developer.mozilla.org
- WebRTC概念介紹 | rustfisher
一些縮寫
- ACK: Acknowledgment (確認報文)
- AVP: Audio and Video profile (音頻視頻描述)
- B-Frame: Bi-directional Predicted Frame. A partial picture, is a modification of previous and future pictures. - (雙向預測幀,存儲圖片的部分信息,存儲的是相對前一張圖片和后一張圖片的差異信息)
- DCEP: Data Channel Establishment Protocol defined in RFC 8832 (DataChannel建立協議)
- DeMux: Demultiplexer (解復用器)
- DLSR: delay since last sender report (從最近一個Sender Report開始的時間延遲)
- DTLS: Datagram Transport Layer Security defined in RFC 6347
- E2E: end-to-end
- FEC: Forward Error Correction (前向糾錯)
- FIR: Full INTRA-frame Request (完整I幀請求)
- G.711: A narrowband audio codec (一個窄帶音頻編碼器)
- H.264: Advanced video coding for generic audiovisual services (面向通用視聽服務的高級視頻編碼)
- H.265: Conformance specification for ITU-T H.265 high efficiency video coding. (ITU-T H.265高效視頻編碼的一致性規范)
- HEVC: High Efficiency Video Coding (高效視頻編碼)
- HTTP: Hypertext Transfer Protocol (超文本傳輸協議)
- HTTPS: HTTP Over TLS defined in RFC 2818 (基于TLS的HTTP)
- I-Frame: Intra-coded Frame. A complete picture, can be decoded without anything else. (內部編碼幀,保存完整圖片信息,- 自解碼,不依賴外部數據)
- ICE: Interactive Connectivity Establishment defined in RFC 8445 (交互式連接建立協議)
- INIT: Initiate (初始化)
- IoT: Internet of Things (物聯網)
- IPv4: Internet Protocol, Version 4 (第四代因特網協議)
- IPv6: Internet Protocol, Version 6 (第六代因特網協議)
- ITU-T: International Telecommunication Union Telecommunication Standardization Sector (國際電信聯盟電信標準分局)
- JSEP: JavaScript Session Establishment Protocol defined in RFC 8829 (JavaScript會話建立協議)
- MCU: Multi-point Conferencing Unit (多點會話單元)
- mDNS: Multicast DNS defined in RFC 6762 (組播 DNS)
- MITM: Man-In-The-Middle
- MTU: Maximum Transmission Unit (最大傳輸單元)
- MUX: Multiplexing (復用,一般指把不同格式的數據合并存儲或傳輸)
- NACK: Negative Acknowledgment (逆確認報文,ACK反饋收到報文,NACK反饋未收到報文 )
- NAT: Network Address Translation defined in RFC 4787 (網絡地址轉換,域名地址轉換成IP地址)
- Opus: A totally open, royalty-free, highly versatile audio codec (一個完全開放、免版稅、高度通用的音頻編解碼器)
- P-Frame: Predicted Frame. A partial picture, containing only changes from the previous picture. (前向預測幀,只保存- 相對于上一幀的差異信息)
- P2P: peer-to-peer
- PLI: Picture Loss Indication (圖片丟失指示)
- PPID: Payload Protocol Identifier (Payload協議標識)
- REMB: Receiver Estimated Maximum Bitrate (接收端估計的最大比特率)
- RFC: Request for Comments (征求意見)
- RMCAT: RTP Media Congestion Avoidance Techniques (RTP媒體擁塞避免技術)
- RR: Receiver Report (RCTP接收者報告)
- RTCP: RTP Control Protocol defined in RFC 3550 (RTP控制協議)
- RTP: Real-time transport protocol defined in RFC 3550 (實施傳輸協議)
- RTT: Round-trip time (往返時間)
- SACK: Selective Acknowledgment (選擇性確認)
- SCTP: Stream Control Transmission Protocol defined in RFC 4960 (流控傳輸協議)
- SDP: Session Description Protocol defined in RFC 8866 (會話描述協議)
- SFU: Selective Forwarding Unit (選擇性轉發單元)
- SR: Sender Report (RCTP發送者報告)
- SRTP: Secure Real-time Transport Protocol defined in RFC 3711 (安全的RTP)
- SSRC: Synchronization Source (同步源)
- STUN: Session Traversal Utilities for NAT defined in RFC 8489 (NAT會話穿透)
- TCP: Transmission Control Protocol (傳輸控制協議)
- TLS: The Transport Layer Security defined in RFC 8446 (傳輸層安全)
- TMMBN: Temporary Maximum Media Stream Bit Rate Notification (臨時最大媒體流比特率通知)
- TMMBR: Temporary Maximum Media Stream Bit Rate Request (臨時最大媒體流比特率請求)
- TSN: Transmission Sequence Number (傳輸序列號)
- TURN: Traversal Using Relays around NAT defined in RFC 8656 (基于轉發的NAT穿透)
- TWCC: Transport Wide Congestion Control (傳輸擁塞控制)
- UDP: User Datagram Protocol (數據報協議)
- VP8, VP9: Highly-efficient video compression technologies (video “codecs”) developed by the WebM Project. - Anyone may use these codecs royalty-free. (WebM項目開發的高效視頻壓縮技術(視頻編解碼),完全免費)
- WebM: An open media file format designed for the web. (一個開放的Web媒體文件格式)
- WebRTC: Web Real-Time Communications. W3C WebRTC 1.0: Real-Time Communication Between Browsers (Web實時通信)
更多請參考 WebRTC概念簡介