跳到主要内容

基础与协议

WebRTC 的复杂度不在 API,而在协议族。这一节回答两件事:它在做什么,以及为什么需要这么多协议

阅读顺序

顺序文件解决的问题
1WebRTC定位与边界.md与 WebSocket、HLS、RTMP、SIP 怎么区分,什么时候选 WebRTC
2一次通话的完整时序.mdgetUserMedia 到 SRTP 的全链路时序图
3核心协议族速查.mdICE、STUN、TURN、SDP、DTLS、SRTP、SCTP 的职责与边界
4SDP结构详解.mdm-line、a-line、bundle、rtcp-mux、ssrc 等关键字段
5安全模型与权限.mdHTTPS 强制、权限、IP 泄露、设备指纹

一句话定义

WebRTC 是浏览器和原生客户端之间直接交换实时音视频和任意数据的标准化能力,由 W3C(JS API)和 IETF(线协议)共同定义。

心智模型

应用层 MediaStream / RTCPeerConnection / RTCDataChannel
协商层 SDP(Offer/Answer)+ 信令通道(业务自定义)
传输层 ICE → STUN(发现公网映射)/ TURN(中继兜底)
安全层 DTLS-SRTP(媒体加密)/ SCTP-over-DTLS(数据通道)

四层全部需要,缺一不可。

为什么这么复杂

  1. 要穿透 NAT:90% 的客户端在 NAT 后面,必须有 ICE/STUN/TURN。
  2. 要端到端加密:浏览器强制 DTLS-SRTP,没办法关。
  3. 要对齐能力:发送方和接收方的编解码、分辨率、扩展头协商靠 SDP。
  4. 要实时:丢包优先丢、不要重传超时;这导致它选了 UDP 而不是 TCP。
  5. 要标准化:跨厂商互通需要 IETF 一系列 RFC,而不是 vendor-specific 协议。

标准沿革

年份里程碑
2011Google 收购 GIPS,开源 webrtc.org
2012W3C WebRTC 1.0 工作草案
2017RFC 8445(ICE bis)发布
2018Unified Plan 取代 Plan B
2021W3C WebRTC 1.0 成为 Recommendation
2022+WebRTC-NV:Insertable Streams、WebCodecs、WebTransport
2023WHIP/WHEP 标准化(IETF):低延迟直播标准
2024+AV1 在 Chrome / Edge 默认开启,Safari 仍以 H.264 为主

与相邻技术的边界

技术适用场景与 WebRTC 的关系
WebSocket双向消息信令层常用,不能传媒体
HLS / DASH大规模点播/直播高延迟(3~30s),WebRTC 用于亚秒级实时
LL-HLS低延迟直播1~3s 延迟,比 WebRTC 简单但延迟更高
RTMP推流已被浏览器淘汰,常用于 OBS 推到 SFU
SIP传统电话通过网关与 WebRTC 互通(如 FreeSWITCH)
WebTransport双向数据传输未来可能取代 DataChannel 的部分场景

失败模式(这一层最常见的坑)

现象根因排查
getUserMedia 直接报错非 HTTPS 环境浏览器要求安全上下文,localhost 例外
ICE 收集为空浏览器扩展拦截 / Firefox 隐私模式chrome://webrtc-internals
候选只有 mDNS(*.localChrome 默认隐藏本地 IP服务器侧无法解析时需要部署 TURN
Offer 设置成功但无 ICE 候选没监听 icecandidate 事件必须等 Trickle ICE 完成或 iceGatheringState === 'complete'
DTLS 失败证书指纹不匹配 / 时间不同步connectionStatewebrtc-internals 的 DTLS 握手日志