WebRTC 浏览器实时直连技术
工作原理与通信流程
WebRTC 建立连接分为 四个阶段:
1.媒体采集与能力描述
- 调用
getUserMedia()获取本地音视频流 - 引擎生成 Offer SDP,包含:支持的编码格式、分辨率、ICE 候选地址列表等
2.信令交换(Signaling)
信令不属于 WebRTC 规范,需开发者自行搭建(常用 WebSocket)
- Peer A 将 Offer SDP 发给 Peer B
- Peer B 回复 Answer SDP
- 双方异步交换 ICE Candidate(网络探测结果)
3.NAT 穿透与连接建立(ICE 框架)
ICE 按优先级尝试以下路径:
- Host Candidate:局域网直连
- STUN Reflexive (srflx):通过 STUN 获取公网 IP:Port
- Peer Reflexive (prflx):对端发现的临时映射地址
- Relay (TURN):对称 NAT/防火墙阻挡时,通过 TURN 中继转发
4.媒体与数据传输
- 音视频打包为 RTP 流,通过 SRTP 加密传输
- 控制信息通过 RTCP 反馈(丢包率、延迟、关键帧请求等)
- 内置 GCC(Google Congestion Control) 动态调整发送码率
- 配合 NACK(丢包重传) / PLI(关键帧请求) / FEC(前向纠错) 抗弱网
信令服务器的作用
信令服务器只负责“传递”ICE信息,不参与“执行”ICE协议。只负责将两端生成的网络候选地址(ICE Candidates)和会话描述(SDP)原样转发,但不解析、不验证、不参与实际的 NAT 穿透探测。
- 信令服务器负责“首次及持续的 ICE 信息传递”,但不负责“ICE 协议的执行与网络探测”。
- 真正的 NAT 穿透、连通性测试、路径选择 100% 发生在两端 WebRTC 引擎之间,信令服务器仅扮演“消息路由器”。
- 设计信令服务时,只需保证:低延迟、高可用、支持二进制/字符串透传、与业务鉴权解耦即可,无需实现任何 ICE/STUN 逻辑。
- 媒体流永远不经过信令服务器:ICE 探测成功后,音视频/数据通道直接走 P2P 或 TURN,信令服务器可立即降级为低频心跳通道。
网络路径选择 ICE 工作流程(4 步)
重要澄清:WebRTC 中不是“服务器”进行网络探测,而是通信两端(Peer)基于 ICE 框架自主探测。STUN/TURN 只是辅助服务器,真正的路径发现、测试、选择逻辑全部运行在客户端。
1.收集候选地址(Candidate Gathering)
每个端点枚举自身网络接口,生成 ICE Candidate:
| 类型 | 来源 | 说明 |
|---|---|---|
| host | 本地网卡 | 局域网直连地址(如 192.168.1.10:54321) |
| srflx | STUN 服务器 | 公网映射地址(如 203.0.113.5:61234) |
| prflx | 对端探测发现 | 打洞过程中动态发现的临时路径 |
| relay | TURN 服务器 | 中继地址,保底连通方案 |
默认通过 STUN 获取
srflx;若直连失败,才向 TURN 申请relay。
2.连通性探测(Connectivity Checks)
- 双方交换候选地址后,ICE 会生成 候选对(Candidate Pairs):
本地候选 × 远端候选 - 按优先级排序后,发送 STUN Binding Request 测试连通性:
- 请求携带 ICE 身份凭证(
ufrag+pwd)防伪造 - 使用 UDP 打洞(部分浏览器支持 TCP fallback)
- 收到合法
STUN Binding Response即标记为valid
- 请求携带 ICE 身份凭证(
3.优先级排序与路径提名(Prioritization & Nomination)
ICE 使用 RFC 8445 定义的优先级公式:
Priority = (2^24) × TypePref + (2^8) × LocalPref + (2^0) × ComponentID
| 候选类型 | TypePref(默认) | 说明 |
|---|---|---|
| host | 126 | 局域网直连,延迟最低、成本为0 |
| srflx | 110 | STUN 反射,适合非对称 NAT |
| prflx | 100 | 动态发现,优先级低于 srflx |
| relay | 0 | TURN 中继,延迟高、带宽成本高,保底用 |
提名机制:
- Controlling Peer(主叫方)在发现第一个
valid对后,发送带USE-CANDIDATE属性的 STUN 请求 - Controlled Peer(被叫方)确认后,该路径被
nominated,媒体流开始通过此路径传输 - 若后续网络恶化,ICE 会持续测试低优先级对,实现无缝
failover
4.连接维持与故障转移(Keepalive & Failover)
- 每
~15秒发送 STUN 保活包,维持 NAT 映射不超时 - 连续
5次无响应 → 标记failed→ 自动切换备用路径 - 支持
Trickle ICE(渐进式交换候选):边收集边发送,连接建立提速30%~50%

浙公网安备 33010602011771号