3. 媒体流基础:音频采样与量化、视频帧与码率、编解码器概念
做实时转码,你得先搞懂媒体流到底长什么样。说白了,我们处理的不是「视频文件」,而是一串串数字化的音频样本和视频帧。我见过不少新手,上来就调编码器参数,结果音画不同步、码率炸了,根本原因就是没吃透这些基础概念。
这一章,咱们把音频采样、视频帧、码率、还有 Opus、VP8/VP9、H264 这几个核心编解码器,一次性讲透。
3.1 音频采样与量化:把声波变成数字
声音是连续的模拟信号。计算机要处理它,就得「采样」和「量化」。你想想看,就像用一把尺子去量一根曲线——采样率决定你量得多密,量化精度决定你量得多准。
3.1.1 采样率
采样率(Sample Rate)就是每秒从连续信号中提取多少个样本点。单位是 Hz。
- 8,000 Hz:电话语音质量,够用但很糊。
- 16,000 Hz:WebRTC 语音通话的标配,我个人习惯用这个做语音识别。
- 44,100 Hz:CD 音质,音乐场景常用。
- 48,000 Hz:视频制作和 WebRTC 高清通话的标准,我建议你优先选这个。
3.1.2 量化精度与位深
量化精度(Bit Depth)决定每个样本用多少 bit 来表示。常见的就两种:
- 16-bit:动态范围 96dB,WebRTC 默认值,够用。
- 24-bit:动态范围 144dB,录音棚级别,转码时一般用不上。
量化精度不够,就会出现「量化噪声」。嗯,这里要注意:噪声不是背景杂音,而是数字信号还原模拟信号时产生的误差。我曾经在项目里遇到过,用 8-bit 量化录了一段钢琴,结果回放时高频部分全是嘶嘶声,那就是量化精度太低导致的。
3.1.3 音频数据量计算
音频的裸数据量很好算:
数据量 (bps) = 采样率 × 量化精度 × 声道数
举个例子:48kHz、16-bit、双声道立体声:
48,000 × 16 × 2 = 1,536,000 bps ≈ 1.5 Mbps
这就是未经压缩的 PCM 数据量。实时传输这么大数据量?不现实。所以我们需要编解码器来压缩,比如 Opus。
3.2 视频帧与码率:理解画面的「帧」和「流」
视频说白了就是快速播放一系列图片。每一张图片就是一帧(Frame)。帧率(FPS)决定流畅度,分辨率决定清晰度,码率决定数据量。这三者互相制约,你不可能既要高清又要流畅还要省带宽。
3.2.1 帧类型
在视频编码里,帧不是平等的。我刚开始做转码时,以为每一帧都是独立图片,后来才发现编码器会利用帧之间的冗余信息来压缩。常见的帧类型有三种:
| 帧类型 | 全称 | 特点 | 数据量 |
|---|---|---|---|
| I 帧 | Intra Frame | 关键帧,完整编码,不依赖其他帧 | 最大 |
| P 帧 | Predictive Frame | 参考前面的 I 帧或 P 帧,只存差异 | 中等 |
| B 帧 | Bidirectional Frame | 参考前后帧,压缩率最高 | 最小 |
3.2.2 码率控制模式
码率控制就是决定「每秒钟给视频分配多少 bit」。常见的模式有三种:
- CBR(恒定码率):码率始终不变。适合带宽稳定的场景,比如电话会议。缺点是画面复杂时质量会下降。
- VBR(可变码率):码率根据画面复杂度动态变化。简单场景码率低,复杂场景码率高。质量好,但不适合实时传输,因为码率会突然飙升。
- CRF(恒定质量):你设定一个质量值(比如 23),编码器自动调整码率来保持这个质量。我建议离线转码用这个,实时场景慎用。
3.3 编解码器概念:Opus、VP8/VP9、H264
编解码器(Codec)就是压缩和解压缩的算法。选对编解码器,转码就成功了一半。我见过有人用 H264 传 4K 视频,结果带宽不够,画质还不如 720p。下面我逐个说说。
3.3.1 Opus:音频编解码器的「万金油」
Opus 是 WebRTC 的默认音频编解码器。它最大的特点是:全场景覆盖。从 6 kbps 的窄带语音到 510 kbps 的高保真音乐,它都能搞定。
- 延迟极低:最低 5ms 的算法延迟,适合实时通话。
- 动态码率:支持从 6 kbps 到 510 kbps 的码率范围。
- 采样率自适应:支持 8kHz、16kHz、24kHz、48kHz。
3.3.2 VP8 与 VP9:Google 的「开源双雄」
VP8 是 WebRTC 的默认视频编解码器,VP9 是它的升级版。两者都是开源的,没有专利费。
| 特性 | VP8 | VP9 |
|---|---|---|
| 压缩率 | 基准 | 比 VP8 高 30%-50% |
| 计算复杂度 | 低 | 高(编码慢 2-3 倍) |
| 硬件支持 | 广泛 | 较新设备才支持 |
| 适用场景 | 实时通话、低延迟 | 高清直播、点播 |
VP8 的优势是快,编码延迟低,适合实时转码。VP9 的优势是省带宽,同样画质下码率更低。但 VP9 编码很吃 CPU,我建议你只在服务端转码时用 VP9,客户端还是用 VP8 或 H264。
3.3.3 H264:行业「老大哥」
H264 是目前兼容性最好的视频编解码器。几乎所有设备都支持硬件解码,包括手机、电视、浏览器。
- Profile(档次):Baseline(低延迟)、Main(平衡)、High(高质量)。实时场景用 Baseline 或 Main。
- Level(级别):限制分辨率、帧率、码率。比如 Level 3.1 支持 720p@30fps,Level 4.0 支持 1080p@30fps。
- 硬件编码:Intel QSV、NVIDIA NVENC、Apple VideoToolbox 都支持 H264 硬件编码,能大幅降低 CPU 负载。
3.4 知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个快速索引。
这张图把音频、视频、编解码器三个分支拆开了。你可以看到,音频的核心是采样率和量化精度,视频的核心是帧类型和码率控制,而编解码器选择则要综合考虑延迟、兼容性和硬件加速。
嗯,这一章的内容就到这里。记住:基础不牢,地动山摇。搞懂了这些,后面讲转码架构、自适应码率、SVC 分层,你才能听得明白。