一、WebRTC 是什么
WebRTC(Web Real-Time Communication)是由 W3C 与 IETF 推动的一套开放标准,用于在浏览器与移动端之间建立实时音视频、数据通道,无需安装插件。典型场景包括:一对一/多人音视频通话、屏幕共享、在线教育、远程协作、低延迟直播观看端等。
核心能力大致包括:音视频采集(getUserMedia)、编解码与传输(RTP/SRTP)、NAT 穿透(ICE/STUN/TURN)、以及可选的数据通道(DataChannel)用于传输任意二进制或文本数据。
二、新人需要理解的基本概念
- SDP(Session Description Protocol):描述媒体能力与网络参数的文本,双方通过交换 SDP 协商“用什么编解码、如何打洞”。
- ICE(Interactive Connectivity Establishment):找出双方可用的传输路径(直连或经中继)。
- STUN:帮助客户端发现自己公网地址,用于打洞。
- TURN:当 P2P 不可达时,由中继服务器转发媒体流(会增加带宽与延迟)。
- Signaling(信令):WebRTC 标准不规定信令协议,你需要自行用 WebSocket、HTTP 或任意方式交换 SDP 与 ICE candidate。
三、本地最小可运行示例思路
新手建议先跑通浏览器 ↔ 浏览器在同一局域网或本机的互通,再考虑公网与 TURN。
- 使用 HTTPS 或 localhost(多数浏览器要求安全上下文才能调用 getUserMedia)。
- 前端创建
RTCPeerConnection,监听icecandidate,通过信令把 candidate 发给对端。 - 一方
createOffer→setLocalDescription→ 信令转发 SDP → 对端setRemoteDescription→createAnswer→ 再交换回 SDP。 - 双方 SDP/ICE 完成后,媒体轨道会出现在
ontrack或onaddstream(视 API 用法而定)。
四、用开源 SFU 快速搭“多人房间”(进阶入口)
纯 P2P 适合人数很少;多人会议通常用 SFU(选择性转发单元),由服务器转发各路流,客户端只拉需要的画面。常见开源/商业方案包括基于 WebRTC 的 Janus、mediasoup、Jitsi、LiveKit 等。选型时关注:并发规模、录音录像、与本业务信令系统的对接方式。
五、公网部署时注意什么
- 必须配置可用的 TURN(许多移动网络或对称 NAT 下仅 STUN 不够)。
- 防火墙与云服务安全组需放行 UDP(及 TURN 使用的一小段 TCP/TLS 端口范围)。
- 信令服务要做鉴权与房间隔离,避免任意人互相串线。
六、推荐学习路径
- 在本地用两个浏览器标签或两台设备跑通官方或社区的 minimal demo。
- 用 Wireshark 或浏览器
webrtc-internals(Chrome)观察 Candidate、连接状态。 - 再引入 SFU 或业务信令,逐步接近生产环境。
小结
WebRTC 把实时通信能力带进浏览器,但真正上线需要信令、打洞、TURN、安全与运维一起规划。先跑通最小链路,再按业务选 P2P 或 SFU,是最稳妥的新手路线。
