第 1 章 · 认识 WebRTC 章节摘要:本章解决一个入门期最常见也最致命的问题——对 WebRTC 的认知停留在「能调通 demo」而看不到全貌。我们先把 WebRTC 的来龙去脉、能力边界与整体架构一次讲透:它凭什么让浏览器摆脱插件、三大核心接口各自管什么、一次通话从发起到画面出现要经过哪些阶段。建立这张全景地图之后,后续每一道关卡的知识才有地方安放;当你日后排查故障时,也能立刻判断问题出在链路的哪一段。 学习目标 读完本章,你应当能够: 向同事讲清 WebRTC 与 WebSocket、原生音视频 SDK 的分工差异,并说得出各自适用场景; 说出 RTCPeerConnection、MediaStream、RTCDataChannel 三大接口的职责边界与协作关系;
章节摘要:本章解决一个入门期最常见也最致命的问题——对 WebRTC 的认知停留在「能调通 demo」而看不到全貌。我们先把 WebRTC 的来龙去脉、能力边界与整体架构一次讲透:它凭什么让浏览器摆脱插件、三大核心接口各自管什么、一次通话从发起到画面出现要经过哪些阶段。建立这张全景地图之后,后续每一道关卡的知识才有地方安放;当你日后排查故障时,也能立刻判断问题出在链路的哪一段。
读完本章,你应当能够:
WebRTC 不是一个单一协议,而是一组标准的集合体:对上层暴露三个 JavaScript 接口,对下层把采集、编解码、传输、加密全部收进浏览器内核。它在架构里刻意留了一个空洞——信令。浏览器厂商拒绝规定「两端怎么互相认识」,把这朵缝让给了应用层。理解这个设计,是理解 WebRTC 一切灵活性与复杂性的起点。
一句金句:WebRTC 负责让两个浏览器「说上话」,但绝不负责让它们「认识」——认识这件事,永远留给你的信令代码。
1.1 从插件时代到原生通话——先回答「为什么会有 WebRTC」。从 Flash 插件的兴衰讲起,看浏览器厂商为何下决心把实时通信内建进内核,WebRTC 的强制加密与点对点两大基因如何奠定,以及哪些业务场景真正需要它、哪些场景用它属于杀鸡用牛刀。
1.2 架构与三大接口——打开引擎盖看结构。三大 JavaScript 接口各自管什么、浏览器内部如何分层、媒体数据走哪条路、信令数据走哪条路。这一节给出的分层图是全册的「地形图」,后面所有章节都能在这张图上找到自己的位置。
1.3 一通通话的全景与状态机——把三大接口串成完整流程。从 getUserMedia 采集开始,经 offer-answer 协商、候选地址交换、DTLS 握手,直到第一帧画面出现;同时讲清两套状态机的含义与联动,让你拿到日志就能判断通话卡在哪一步。
本章三节是一条从「为什么」到「是什么」再到「怎么运转」的认知链:历史与特性决定了设计取向,设计取向造就了三层架构,三层架构在真实通话里表现为一条带状态反馈的流水线。
1.1 历史与特性 1.2 架构与接口 1.3 全景与状态机 ┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 插件的教训 │ │ 三大 JS 接口 │ │ 完整建立流程 │ │ P2P 与强加密 │ ───▶ │ 内核分层结构 │ ───▶ │ 双状态机联动 │ │ 信令留白设计 │ │ 信令通道在架构外 │ │ 失败阶段的判断 │ └──────────────┘ └──────────────────┘ └──────────────────┘ 为什么 是什么 怎么运转
前一节回答的每个「为什么」都会在后一节变成一个「所以」:因为要摆脱插件,所以能力必须内建内核;因为媒体数据敏感,所以传输层强制加密;因为服务器不可信中继,所以连接必须自己打洞。到 1.3 节,这些「所以」汇聚成一张时序图——它也是第 2 到第 6 章的目录雏形。
前置:本章假设你已经会写基本的异步 JavaScript(Promise、事件监听),理解 HTTP 是一问一答、WebSocket 是长连接双工通道的区别,听说过 NAT 但不需要深入——NAT 的细节留给第 4 章。不需要任何音视频编解码背景。
后续:本章的全景流程图在后续章节会被逐段放大:采集阶段展开为第 2 章,offer-answer 协商展开为第 3 章,候选交换展开为第 4 章,DTLS 与媒体传输展开为第 5 章,传输质量攻防展开为第 6 章。如果读完本章就想跑通一个最小可用的通话,可以直接翻到第 7 章的端到端实战,再回头补各关细节——但按顺序读,理解会扎实得多。