一、WebRTC 的前世今生:从实验室到实时通信的基石
聊 WebRTC 之前,我想先问你一个问题:在 2011 年之前,浏览器之间怎么实现实时音视频通话?
答案是——几乎不可能。那时候你要么装插件(Flash、Silverlight),要么用 ActiveX,要么自己写个桌面客户端。说白了,实时通信是“富人的游戏”,门槛高得离谱。
我 2012 年刚接触这个领域时,还在用 Flash 做视频会议。每次用户说“我浏览器崩溃了”,我都得先问一句“Flash 版本对吗?”——那种体验,真的不想再经历第二次。
1.1 发展历史:三个关键节点
WebRTC 不是一夜冒出来的。它的发展脉络,我总结成三个关键节点:
| 时间 | 事件 | 意义 |
|---|---|---|
| 2011 年 | Google 收购 GIPS 公司 | 获得了核心的音频处理引擎(AEC、NR、AGC) |
| 2011 年 5 月 | Google 开源 WebRTC 项目 | 将 GIPS 技术免费开放,推动浏览器原生支持 |
| 2013 年 1 月 | Chrome 和 Firefox 首次实现互连 | 证明 WebRTC 可以跨浏览器工作,里程碑事件 |
我记得 2013 年那次互连测试,我特意开了两台电脑,一台 Chrome、一台 Firefox,两边视频通了的那一刻,办公室里几个人围过来看——说实话,挺激动的。因为这意味着“浏览器原生实时通信”不再是概念,而是真能用了。
核心认知:WebRTC 不是从零造轮子,而是把 GIPS 在 VoIP 领域积累十几年的技术,直接搬进了浏览器。你想想看,这相当于把专业级通信能力,免费塞给了每个前端开发者。
1.2 核心应用场景:不止是视频通话
很多人一提 WebRTC 就想到“视频聊天”,其实它的应用场景比这宽得多。我按使用频率排个序:
- 视频会议 / 远程协作——最经典场景。Zoom、Google Meet、腾讯会议底层都在用 WebRTC。
- 直播连麦 / 互动直播——主播和观众之间低延迟互动,WebRTC 比 HLS 延迟低一个数量级。
- 远程医疗 / 在线教育——对延迟和稳定性要求极高,WebRTC 的拥塞控制算法是核心优势。
- 屏幕共享 / 远程桌面——getDisplayMedia API 就是 WebRTC 的一部分。
- P2P 文件传输 / 数据通道——很多人不知道,WebRTC 的 DataChannel 可以传任意二进制数据。
我在项目中遇到过最“奇葩”的场景,是用 WebRTC 做无人机图传。客户要求延迟低于 200ms,传统的 RTMP 方案根本做不到。最后我们用 WebRTC 的 Simulcast 分层编码,配合自适应码率,硬是把延迟压到了 150ms 以内。嗯,这种场景,非 WebRTC 不可。
一个小建议:如果你刚开始学 WebRTC,别只盯着视频。先玩明白 DataChannel,它比音视频简单得多,而且能帮你理解底层传输机制。
1.3 浏览器兼容性概览:别踩这些坑
兼容性这个话题,我每次讲都要多说两句。因为——WebRTC 的兼容性问题,坑过很多人,包括我自己。
先看一张主流浏览器的支持情况:
| 浏览器 | WebRTC 支持 | 前缀 / 注意事项 |
|---|---|---|
| Chrome / Edge (Chromium) | ✅ 完整支持 | 无前缀,标准 API |
| Firefox | ✅ 完整支持 | 部分 API 实现略有差异(如 SDP 格式) |
| Safari (iOS / macOS) | ✅ 支持(14.0+) | 早期版本需要 webkit 前缀,H264 优先 |
| 内置浏览器 | ⚠️ 部分支持 | X5 内核,需额外适配 |
| IE 11 | ❌ 不支持 | 无原生 WebRTC,需降级方案 |
我曾经在 Safari 上栽过一次:用户反馈视频黑屏,查了半天,发现是 Safari 默认使用 H264 编码,而我的信令服务器只协商了 VP8。从那以后,我养成了一个习惯——编码协商逻辑里,永远把 H264 和 VP8 都列上。
避坑指南:如果你要兼容 iOS Safari,记住三点:
- 必须支持 H264(Safari 不支持 VP8 硬解)
- getUserMedia 必须在用户手势触发后调用(点击事件里)
- 音频采样率限制:Safari 不支持 48kHz 以外的采样率
1.4 一张图看懂 WebRTC 知识体系
下面这张 SVG 图,是我自己梳理的 WebRTC 核心知识框架。你可以把它当作整个课程的地图:
这张图我建议你保存下来。每次学完一个模块,回来看看它在整个体系中的位置——你会发现,WebRTC 其实没那么复杂,它就是一个分层清晰、模块解耦的实时通信框架。
1.5 为什么现在学 WebRTC 正当时?
说句实在话,WebRTC 已经过了“要不要用”的讨论阶段。2024 年的今天,它已经是实时通信的事实标准。我身边做音视频的团队,几乎都在用 WebRTC 或者基于它二次开发。
三个理由:
- 浏览器原生支持——不用装任何插件,Chrome、Firefox、Safari、Edge 全部内置。
- 生态成熟——信令服务器有 Janus、Mediasoup、LiveKit,客户端 SDK 覆盖所有平台。
- 性能持续优化——Google 每年投入大量资源改进拥塞控制、编码器、延迟。
我个人觉得,WebRTC 就像当年的 jQuery——刚出来时大家观望,等生态成熟了,不学反而成了短板。这门课我会带你从封装解析的角度,把 WebRTC 的底层逻辑彻底讲透。准备好了吗?我们开始。