2. WebRTC架构总览

做 WebRTC 开发,说白了就是在跟音视频数据打交道。你想想看,如果连这些数据长什么样、怎么存、怎么传都不清楚,那后面调优、排错基本就是瞎蒙。这一节我把几个最核心的概念掰开揉碎讲清楚,都是我这些年踩坑换来的经验。

采样率:声音的「像素」

先说说音频。声音在现实中是连续的波形,但计算机只能处理离散的数字。把连续信号变成离散数字的过程,就叫采样。

采样率,就是每秒钟采多少个点。单位是 Hz(赫兹)。

采样率 常见场景 我的评价
8,000 Hz 传统电话 能听清,但声音闷
16,000 Hz VoIP / WebRTC 默认 够用,清晰度还行
44,100 Hz CD 音质 音乐级,WebRTC 很少用
48,000 Hz 专业音频 / 视频录制 高保真,带宽扛不住
我的习惯:WebRTC 通话场景,采样率用 16,000 Hz 就够了。再高的话,网络一抖,延迟反而上去了。别盲目追求高采样率。

这里有个经典定理——奈奎斯特采样定理:采样率必须大于信号最高频率的两倍,才能完整还原。人声最高频率大概 4,000 Hz,所以 8,000 Hz 的采样率刚好够用。但为什么 WebRTC 推荐 16,000 Hz?因为留点余量,语音质量更好。

比特率:数据量的「水龙头」

比特率,也叫码率。它表示每秒钟传输或存储的比特数,单位是 bps(bit per second)。

你可以把比特率想象成水龙头。开大了,数据量大,画质/音质好;关小了,数据量小,但质量会下降。

核心公式:
比特率 = 采样率 × 位深度 × 通道数(未压缩时)
举个例子:16,000 Hz × 16 bit × 1 通道 = 256,000 bps ≈ 256 kbps

但实际 WebRTC 里,我们不会传裸数据。因为 256 kbps 的音频裸流,在弱网环境下根本跑不动。所以就有了编解码器。

编解码器:压缩的艺术

编解码器,就是一套压缩和解压缩的算法。它的目标很简单:用更少的比特,保留尽可能多的质量。

WebRTC 里最常用的视频编解码器有两个:H.264 和 VP8。音频方面,Opus 是绝对的主力。

H.264

  • 硬件支持好。几乎所有手机、电脑的芯片都内置了 H.264 硬编解码。
  • 压缩率高。同等画质下,比 VP8 省带宽。
  • 但专利问题复杂。虽然 WebRTC 里免费用,商用场景要小心。

VP8

  • 完全开源,无专利风险。
  • 软件编码,兼容性好,但 CPU 消耗比 H.264 高。
  • 同等码率下,画质略逊于 H.264。
特性 H.264 VP8
硬件加速 广泛支持 较少
压缩效率 高 中等
CPU 消耗 低(硬编) 高(软编)
专利风险 有 无
WebRTC 默认 是(部分浏览器) 是(Chrome 早期)
我曾经踩过的坑:有一次做跨平台通话,Android 端用 H.264 硬编,iOS 端用 VP8 软编。结果 Android 端画面流畅,iOS 端发热严重、掉帧。后来统一成 H.264,问题解决。所以,能硬编就别软编,这是铁律。

音频编解码器:Opus 是王者

WebRTC 音频编解码器,我几乎只用 Opus。为什么?

  • 支持 6 kbps 到 510 kbps 的码率范围。
  • 采样率从 8,000 Hz 到 48,000 Hz 自适应。
  • 延迟极低,默认 20ms 一帧。
  • 而且完全免费。

你想想看,一个编解码器能同时搞定语音和音乐,还能根据网络状况自动调整码率,这不就是为 WebRTC 量身定做的吗?

知识体系总览

下面这张图,把这一节的核心概念串起来了。建议你多看几遍,理清它们之间的关系。

音视频基础概念体系 音视频原始信号 采样(采样率:8k/16k/44.1k/48k Hz) 量化(位深度:16bit / 24bit) 裸数据(比特率 = 采样率 × 位深度 × 通道数) 编解码器(H.264 / VP8 / Opus) 压缩后 比特率 大幅降低

实际项目中的选择建议

我个人习惯,在 WebRTC 项目里这样配:

  • 音频:Opus 编解码器,采样率 16,000 Hz,比特率 32 kbps。语音通话足够清晰,带宽占用低。
  • 视频:优先 H.264 硬编。如果目标平台不支持,降级到 VP8。分辨率 640×480,比特率 500 kbps 起步。
  • 弱网环境:开启 Simulcast( simulcast 是啥后面会讲),让接收端根据网络自动选流。
一个小技巧:调试时打开 Chrome 的 chrome://webrtc-internals,里面能看到实时的比特率、丢包率、编解码器信息。我排查问题第一步就是看这里。

嗯,这一节的内容就这些。采样率、比特率、编解码器,这三个概念是音视频通信的基石。你理解了它们,后面看 WebRTC 的带宽估计、码率控制、流切换这些高级话题,就会轻松很多。