浏览器之间想直接传音频、视频和数据,靠的是WebRTC这套开放标准。它不需要插件,不需要原生应用,浏览器里已经内置了对应的API。但WebRTC只覆盖"媒体路径"这一段:一旦两个对等端互相找到了对方,从编解码器协商到编码再到传输,它全包了。
它从来不负责的,是"找到"这个动作本身。
![]()
这套规范由三个JavaScript API组成,而信令和NAT穿透被刻意留在了规范之外。理解这个缺口,以及它如何决定媒体本身的扩展方式,是看懂WebRTC规模化的关键。
三个API,一个缺口
WebRTC对外暴露的三个API分工明确:
- RTCPeerConnection:在两个对等端之间协商编解码器,连接建立后负责媒体流的编码、解码和传输。
- MediaStream:给它提供要发送的内容,封装对摄像头或麦克风的访问。
- RTCDataChannel:与媒体连接并行运行,承载非音频视频的数据——聊天消息、文件分片、游戏状态,任何不需要编解码器的应用数据。
这三个API都不知道如何自行找到远端对等端。这正是WebRTC完全留白的那部分。
信令与offer/answer交换
两个对等端在交换媒体之前,必须先交换一份描述各自能力的信息:编解码器、网络信息、媒体类型,编码为SDP(会话描述协议)。WebRTC没有提供任何在对等端之间实际传递这份描述的机制。这就是信令,规范故意把它留给上层构建者,通常走WebSocket或HTTP长轮询。
交换本身遵循固定形态:发起呼叫的一方发出offer,接收的一方回以answer。整个流程里真正干活的只有setLocalDescription和setRemoteDescription两个调用,其余工作只是把SDP数据块从一个对等端的信令连接送到另一个对等端。
NAT穿透:ICE、STUN和TURN
SDP交换只告诉每个对等端对方"能做什么",但大多数设备并不直接暴露在公网上,它们躲在NAT后面。要让媒体真正流动起来,还需要穿透这层地址转换,这部分由ICE框架配合STUN和TURN服务器完成。
STUN负责帮对等端发现自己在公网上的映射地址,TURN则在中继模式下转发流量,用于双方无法直连的场景。这三者构成了WebRTC连接建立的实际基础设施,而它们同样不在WebRTC规范之内。
拓扑决定媒体如何扩展
信令和穿透解决的是"连得上"的问题,但媒体本身怎么扩展,取决于选择哪种拓扑结构。三种主流方案各有取舍:
- 点对点(P2P):对等端直接互连,延迟最低,但连接数随参与者增加呈平方级增长。
- 选择性转发单元(SFU):服务器接收每个参与者的流,选择性转发给其他人,不混合媒体,兼顾质量和扩展性。
- 多点会议单元(MCU):服务器混合所有媒体流再分发,客户端负担最轻,但服务器成本和延迟最高。
规模化的其他关键因素还包括:负载下的信令处理、浏览器支持差异、安全性以及可靠性。这些环节共同决定了WebRTC应用在用户量增长时能否稳住。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.