WebRTC 是一项内置在现代浏览器里的技术,让你直接在网页上进行语音、视频通话和实时数据传输,不需要安装软件或插件。当你点开一个链接加入会议,几秒钟后就开始说话了,背后很可能就是 WebRTC 在工作。它的名字是 Web Real-Time Communication(网页实时通信)的缩写。
你不需要是程序员也能理解它。下面是简单版本,只讲作为用户真正有用的部分。
在 WebRTC 之前
几年前,要在电脑上视频聊天,你得安装一个软件或者浏览器插件。每个服务都有自己的 App,如果嘉宾没装,就得花十分钟安装、更新、注册账号。
WebRTC 改变了这一切。如今,主流浏览器(Chrome、Edge、Firefox、Safari,以及基于它们的浏览器)都内置了它。所以网页才能请求使用你的麦克风,并立刻把你和别人连接起来。
它是怎么工作的,四个步骤
把一次通话想象成两个想说话的人,中间隔着一座满是围墙的城市:
- 授权。 浏览器会问你,这个网页能不能使用你的麦克风(如果需要的话,还有摄像头)。你不点“允许”,什么都不会发生。
- 牵线。 网页运营方的服务器帮两个浏览器“找到”彼此,并商量好怎么通话:用哪种音频格式、怎么连接。这叫作信令。
- 找路。 你的网络几乎总是在路由器或公司网络后面。WebRTC 会借助一些辅助服务器(叫作 STUN 和 TURN),在参与者之间找到一条通路。如果没有直连的路,音频就会经过中继服务器。
- 对话。 连上之后,音频以加密的方式在参与者之间传输,延迟非常低。
这一切在一两秒内完成。
它擅长什么
- 无需安装。 一个链接就够了。
- 低延迟。 它是为对话设计的,而不是为了看有延迟的视频。延迟通常很小,大家可以自然地插话、回应。
- 强制加密。 WebRTC 的通信在设计上就是加密的。
- 自适应网络。 如果你的网络变差,它会降低质量,让通话不至于中断。
- 跨平台。 在不同操作系统的电脑上和手机浏览器里都能用。
它的局限
- 依赖你的网络。 如果网络不稳定,就会出现断断续续或者机器人般的声音。看看远程录制需要多快的网速。
- 限制很严的网络。 有些公司或学校的网络会封锁某些端口;中继服务器能帮上忙,但不总是有效。
- 参与者很多时。 如果每个人之间都直接连接,每个人都要把自己的音频发给所有其他人。小组里效果很好;对于大型群组,服务商会使用中间服务器。
- 它不负责录制。 WebRTC 传输的是实时对话。录制是另一回事,每个服务各有各的做法(或者根本不做)。
常见问题及解决办法
| 症状 | 可能的原因 | 怎么办 |
|---|---|---|
| 没人听得到你 | 浏览器没有麦克风权限 | 检查地址栏里的锁或麦克风图标,允许访问 |
| 能听到你,但有回声 | 有人用的是外放而不是耳机 | 所有人都戴耳机 |
| 声音断断续续或像机器人 | 网络不稳定或拥堵 | 离路由器近一点、用网线,或者暂停下载 |
| 在公司网络里连不上 | 公司防火墙 | 换个网络试试,或者问问技术支持 |
| 用错了麦克风 | 系统选了另一个设备 | 在浏览器或系统设置里切换麦克风 |
| 旧浏览器里用不了 | 版本过旧 | 更新浏览器 |
一个通用的建议:重要的会话之前,提前五分钟加入并测试一下。大多数问题都出在权限或者选错了设备上。
日常生活里的 WebRTC
哪怕你没注意到,WebRTC 也无处不在:浏览器里的工作会议、在线问诊、带视频的技术支持、带语音聊天的游戏、网课,还有浏览器里的播客工作室。
以 remocast 为例,房间里参与者之间的语音就是通过 WebRTC 传输的。所以你的嘉宾点开链接就能加入,不用安装任何东西,最多六个人可以在同一间 3D 工作室里聊天。与此同时,每个人的虚拟形象会跟着他的声音动嘴;如果你对这部分感兴趣,读读虚拟形象的口型同步是什么。
它安全吗?
WebRTC 会对传输的音频和视频进行加密,浏览器在使用麦克风或摄像头之前也一定会征求你的许可。此外,很多浏览器在麦克风开启时会显示一个提示标志。
仍然取决于你和服务商的部分:
- 只进入你信任的网页。
- 检查哪些网站有麦克风权限,把不再用的移除。
- 不说话时用静音键。
- 如果你要用其他工具录下对话,告知参与者。详见录制他人需要哪些许可。
如果你想亲眼看看它的效果,免费创建你的工作室,把链接分享给一个朋友。
常见问题
用 WebRTC 需要安装什么吗?
不需要。它内置在现代浏览器里。你只需要允许网页使用你的麦克风或摄像头。
WebRTC 在手机上能用吗?
能,在当前的手机浏览器里都可以。体验取决于网页本身:有些网页是为电脑设计的,在大屏幕上看起来或用起来更好。
为什么我在浏览器通话里的声音像机器人?
几乎总是网络的问题:Wi-Fi 信号弱、网络拥堵,或者离路由器太远。试试用网线、离路由器近一点,或者暂停其他下载。
参考资料
- WebRTC: Real-Time Communication in Browsers — W3C
- WebRTC API — MDN Web Docs
- Introduction to WebRTC protocols — MDN Web Docs
- RFC 8827: WebRTC Security Architecture — IETF
- MediaDevices: getUserMedia() method — MDN Web Docs
如果这篇文章对你有帮助,关注我们,不错过后续文章: