一、WebRTC 概述:从零开始认识这项技术

1.1 什么是 WebRTC?

WebRTC,全称 Web Real-Time Communication。说白了,就是让浏览器之间能直接通话、传视频、发文件,不需要装任何插件。

我刚开始接触这个技术时,也觉得挺神奇的。你想想看,两个浏览器之间,没有服务器中转,就能实现低延迟的音视频通话。这在十年前几乎是不可想象的。

WebRTC 的核心能力就三件事:

  • 音视频采集与播放 —— 打开摄像头、麦克风,播放远端传来的流
  • 点对点传输 —— 两个浏览器直接建立连接,数据不经过服务器
  • 网络穿透 —— 即使双方都在 NAT 后面,也能找到对方

嗯,这里要注意:WebRTC 不是单一协议,而是一整套技术栈的集合。它包含了音视频编解码、网络传输、安全加密等多个层面。

一句话总结:WebRTC = 浏览器原生支持的实时通信能力,零插件,低延迟,点对点。

1.2 WebRTC 的发展历史

WebRTC 的故事要从 2010 年说起。当时 Google 收购了 GIPS 公司,这家公司做的是 VoIP 引擎。Google 拿到手后,决定把它开源,并集成到 Chrome 浏览器里。

我记得 2011 年 Google 首次公布了 WebRTC 项目,那时候业界反应其实挺平淡的。很多人觉得「浏览器里做实时通信?延迟肯定高得没法用」。

但事情在 2013 年发生了变化。这一年,Chrome 和 Firefox 实现了互通的 WebRTC 通话。我亲自试过,效果出奇的好。从那以后,WebRTC 就进入了快车道。

几个关键时间节点:

年份 事件
2010 Google 收购 GIPS,获得实时通信核心技术
2011 Google 开源 WebRTC 项目
2013 Chrome 与 Firefox 首次实现 WebRTC 互通
2017 W3C 发布 WebRTC 候选推荐标准
2021 WebRTC 成为 W3C 正式推荐标准

我曾经参与过一个项目,需要在 2015 年左右的 Android 浏览器上跑 WebRTC。那时候兼容性问题特别多,不同浏览器对 SDP 的解析方式都不一样。现在好多了,主流浏览器基本都支持了。

1.3 WebRTC 的核心应用场景

WebRTC 能做什么?我列几个最常见的场景:

  • 视频会议 —— Zoom、Google Meet、腾讯会议的后台技术,底层都用了 WebRTC
  • 远程医疗 —— 医生和患者实时视频问诊,低延迟很关键
  • 在线教育 —— 一对一或小班课,师生互动需要实时音视频
  • 直播连麦 —— 主播和观众连麦互动,WebRTC 负责低延迟传输
  • 屏幕共享 —— 远程协作时共享桌面或某个应用窗口
  • 文件传输 —— 利用 DataChannel 实现点对点文件传输,速度很快

我个人觉得,WebRTC 最大的价值在于「零门槛」。用户打开浏览器就能用,不需要下载任何客户端。这对很多 ToC 场景来说,体验提升是巨大的。

避坑指南:我曾经在一个项目中,直接用 WebRTC 做万人直播。结果发现点对点模式根本撑不住。后来才明白,WebRTC 适合小规模互动,大规模分发需要搭配 SFU/MCU 服务器。

1.4 WebRTC 的技术架构概览

WebRTC 的技术架构,我习惯把它分成三层:

  • 应用层 —— 开发者直接调用的 API,包括 getUserMedia、RTCPeerConnection、RTCDataChannel
  • 会话层 —— 负责连接建立、媒体协商,核心是 SDP 和 ICE 协议
  • 传输层 —— 负责数据收发,包括 SRTP/SCTP、DTLS、ICE 穿透

下面这张图是我自己画的,能帮你快速理解整体架构:

应用层 (Application Layer) getUserMedia | RTCPeerConnection | RTCDataChannel 音视频采集/播放 · 连接管理 · 数据通道 会话层 (Session Layer) SDP 协商 · ICE 候选收集 · 连接状态管理 Offer/Answer 模型 · Trickle ICE · 重协商 传输层 (Transport Layer) SRTP/SCTP · DTLS · ICE · STUN/TURN 加密传输 · NAT 穿透 · 网络适配 WebRTC 三层架构:上层调用 API,中层管理会话,下层负责传输 每一层都依赖下层提供的服务,上层不需要关心下层的实现细节

为什么需要这么多层?因为实时通信真的很复杂。你想想看,两个浏览器要建立连接,中间可能隔着好几层 NAT、防火墙,还要考虑加密、编解码、网络抖动……每一层解决一个问题。

我刚开始学 WebRTC 时,最头疼的就是 ICE 流程。STUN 和 TURN 的区别、候选者优先级、连接检查的顺序……这些概念很容易搞混。但等你真正理解了,就会发现这套设计其实非常优雅。

核心要点:WebRTC 的技术架构是分层设计的。上层 API 简单易用,下层协议复杂但强大。作为开发者,你不需要理解所有底层细节,但了解整体架构能帮你更好地排查问题。

1.5 为什么 WebRTC 值得学?

说实话,实时通信的门槛一直很高。以前要做音视频通话,要么用 Flash(已经淘汰了),要么自己搭一套基于 UDP 的传输协议。这两种方式都不太理想。

WebRTC 的出现,把实时通信的门槛降到了「写几行 JavaScript」的程度。而且它是浏览器原生支持的,不需要用户安装任何东西。

我个人觉得,未来五年实时通信会像今天的 HTTP 一样普及。视频客服、远程协作、在线教育、社交娱乐……这些场景都会用到 WebRTC。早点掌握这门技术,对你来说只有好处。

学习建议:不要一开始就钻到 ICE 和 STUN 的细节里。先跑通一个最简单的 demo,让两个浏览器能互相看到对方。有了感性认识之后,再深入学网络穿透和媒体协商。

公众号:蓝海资料掘金营,微信 deep3321