WebRTC:浏览器中的实时通信
WebRTC:浏览器之间的实时通信
WebRTC(Web Real-Time Communication)是一种让浏览器之间直接通信的技术——共享视频、音频和数据——而无需经过中央服务器。它支撑了浏览器内的视频通话、屏幕共享和点对点文件共享。
WebRTC 的工作原理
WebRTC 背后的关键思想是点对点通信。每个浏览器不通过中央服务器发送视频,而是直接向另一个浏览器发送数据。这降低了延迟和服务器成本。但在两个浏览器之间建立直接连接并非易事——它们需要互相发现、协商连接,并处理防火墙阻止直连的情况。
发现过程使用一种称为信令的机制,通常通过 WebSocket 服务器处理。信令服务器帮助两个浏览器交换如何连接的信息,但一旦连接建立,数据就在它们之间直接流动。实际连接使用 ICE(Interactive Connectivity Establishment)来找到最佳路径,使用 STUN 服务器发现浏览器的公网 IP 地址,如果直连被阻止,则使用 TURN 服务器作为备选。
你可以用 WebRTC 构建什么
最常见的用途是视频和音频通话。WebRTC 提供对设备摄像头和麦克风的访问,并实时处理编码、传输和解码媒体流的复杂工作。它会自动适应网络条件,在连接不佳时调整视频质量。
除了媒体之外,WebRTC 还包含用于任意数据传输的数据通道。它们的工作方式类似于 WebSocket,但直接在点对点之间进行,延迟更低。你可以构建文件共享应用、实时游戏或协作工具,而无需中央服务器进行数据传输。
开始使用 WebRTC
WebRTC API 内置于现代浏览器中,无需插件。在客户端,你使用 RTCPeerConnection 管理连接,使用 getUserMedia 访问摄像头和麦克风,使用 RTCDataChannel 进行数据传输。该 API 功能强大但偏底层,因此大多数项目使用辅助库。
对于生产级应用,诸如 Daily、Twilio 或 Agora 等服务提供托管的 WebRTC 基础设施,处理信令、TURN 服务器和扩展等复杂问题。LiveKit 是一个开源替代方案,让你拥有更多控制权。
挑战与考虑因素
WebRTC 功能强大但复杂。信令服务器虽不处理媒体,但仍然是需要可靠性的关键组件。STUN 和 TURN 服务器增加了基础设施成本。浏览器兼容性虽好,但仍有一些边界情况。对于群组通话,你需要管理多个点对点连接,这可能会很复杂——通常使用 SFU(Selective Forwarding Unit)服务器来处理路由。
