WebRTC
WebRTC(Web Real-Time Communication)是一組 JavaScript API,允許瀏覽器之間建立點對點連線,即時交換音訊、視訊和資料。
概述
- 瀏覽器原生支援,無需外掛
- 點對點(P2P)連線,低延遲
- 支援音訊、視訊和資料傳輸
- 需要 Signaling Server 協調連線
WebRTC vs WebSocket

| 特性 | WebRTC | WebSocket |
|---|---|---|
| 連線模式 | P2P | Client-Server |
| 傳輸協定 | UDP(主要) | TCP |
| 延遲 | 極低 | 低 |
| 用途 | 即時音視訊 | 即時訊息 |
為何 WebRTC 需要 WebSocket
- UDP 不驗證資料,不適合傳輸重要資料
- WebRTC 沒有內建 Signaling 機制
- 需要 WebSocket 進行初始連線協調
核心流程

連線建立流程
- 雙方 Peer 先連上 Signaling Server
PeerA取得自身SDP並呼叫setLocalDescriptionPeerA將SDP傳給 Signaling Server- Signaling Server 將
PeerA的SDP送給PeerB PeerB呼叫setRemoteDescription將PeerA的SDP寫入PeerB取得自身SDP並呼叫setLocalDescriptionPeerB將SDP傳給 Signaling Server- Signaling Server 將
PeerB的SDP送給PeerA PeerA呼叫setRemoteDescription將PeerB的SDP寫入PeerA向 STUN Server 詢問 public IP- STUN Server 回應 public IP
PeerA向 TURN Server 詢問 relay 資訊(若 STUN 失敗)- TURN Server 回應 relay 資訊
PeerA將 ICE Candidates 傳給 Signaling Server- Signaling Server 將
PeerA的 ICE Candidates 送給PeerB PeerB呼叫setRemoteIceCandidate寫入PeerB重複步驟 10-16- P2P 通道建立完成
Signaling
Signaling 是設定、控制和終止通訊會話的過程。
三大主要功能
- Session Control Information - 會話控制資訊
- Exchange IP and Port - 交換 IP 與 Port 資訊
- Exchange Codecs - 交換編解碼器與媒體類型
NAT 穿透技術
STUN(Session Traversal Utilities for NAT)
- 用於發現公網 IP 和 Port
- 輕量級協定
- Google 提供免費 STUN Server
TURN(Traversal Using Relay NAT)
- 當 STUN 失敗時使用
- 透過中繼伺服器轉發資料
- 支援 TCP/UDP 跨越 NAT 和防火牆
ICE(Interactive Connectivity Establishment)
ICE 是整合各種 NAT 穿透技術的框架,包含 STUN、TURN 等。
{
"sdpMLineIndex": 0,
"sdpMid": "",
"candidate": "a=candidate:2999745851 1 udp 2113937151 192.168.56.1 51411 typ host generation 0"
}ICE 會收集多個 ICE Candidates,嘗試不同路徑直到找到最佳連線。
Trickle ICE
傳統方式需等待所有 ICE Candidates 收集完成:

Trickle ICE 允許邊收集邊傳送,加速連線:

串流媒體概念
flowchart LR
VcC[聲音採集]
VdC[影像採集]
VcEc[聲音編碼]
VdEc[影像編碼]
Enc[封裝]
Network[網路傳輸]
DeEnc[解封裝]
Dc[解碼]
Output[輸出裝置]
VcC --> VcEc --> Enc
VdC --> VdEc --> Enc
Enc --> Network --> DeEnc --> Dc --> Output
OSI 層級對應
| Layer | Protocol |
|---|---|
| 3 (Network) | IP |
| 4 (Transport) | TCP, UDP, SCTP |
| 4 (Transport) | ICE, STUN, TURN |
| 6 (Presentation) | TLS, DTLS |
| 7 (Application) | HTTP, SRTP |
WebRTC API
Media Capture
navigator.mediaDevices.getUserMedia()- 取得音視訊串流MediaStream- 媒體串流介面MediaStreamTrack- 單一軌道(音訊或視訊)MediaRecorder- 錄製多媒體資料
Peer Connection
RTCPeerConnection- 建立與管理 P2P 連線setLocalDescription()- 設定本地 SDPsetRemoteDescription()- 設定遠端 SDPaddIceCandidate()- 新增 ICE Candidate
Data Channel
RTCDataChannel- 建立雙向資料通道,傳送任意資料
網路架構
| 架構 | 說明 |
|---|---|
| Mesh Network | 每個節點直接互連 |
| MCU(Multipoint Conferencing Unit) | 中央伺服器混合串流 |
| SFU(Selective Forwarding Unit) | 選擇性轉發,不混合 |