WebRTC 视频编码基础 (VP8/VP9/H.264/AV1)
1. 视频编码概述
1.1 为什么需要视频编码
原始视频数据量:1080p @ 30fps: - 分辨率:1920 x 1080 - 颜色深度:24 bits (RGB) - 帧率:30 fps 数据量 = 1920 x 1080 x 24 x 30 = 1.49 Gbps 经过编码后:- H.264: 2-5 Mbps - VP9: 1.5-4 Mbps - AV1: 1-3 Mbps 压缩比:300-1000 倍
1.2 视频编码基本原理
视频编码核心技术:1. 帧内预测 (Intra Prediction) - 利用同一帧内的空间相关性 - 生成 I 帧 (关键帧) 2. 帧间预测 (Inter Prediction) - 利用帧与帧之间的时间相关性 - 生成 P 帧 (预测帧) 和 B 帧 (双向预测帧) 3. 变换编码 (Transform Coding) - DCT/DST 变换 - 将空域转换为频域 4. 量化 (Quantization) - 降低精度以减少数据量 - QP 值越大,压缩率越高,质量越低 5. 熵编码 (Entropy Coding) - CABAC/CAVLC (H.264) - 算术编码 (VP8/VP9/AV1)
1.3 帧类型
GOP (Group of Pictures) 结构:I P P P P I P P P P |-------- GOP --------|-------- GOP --------| I 帧 (Intra Frame): - 完整的图像 - 不依赖其他帧 - 体积最大 - 用于随机访问 P 帧 (Predicted Frame): - 参考前面的帧 - 只编码差异 - 体积较小 B 帧 (Bi-directional Frame): - 参考前后的帧 - 体积最小 - WebRTC 通常不使用 (增加延迟)
1.4 WebRTC 支持的编码器
| 编码器 | 标准 | 许可 | 浏览器支持 |
|---|
| VP8 | Google/IETF | 免费 | 全部 |
| VP9 | Google/IETF | 免费 | Chrome, Firefox |
| H.264 | ITU-T/ISO | 专利费 | 全部 |
| AV1 | AOMedia | 免费 | Chrome, Firefox |
2. VP8 编码器
2.1 VP8 特点
VP8 概述:- 2010 年由 Google 开源 - WebRTC 强制支持的编码器 - 专为实时通信优化 优点:+ 免专利费 + 低延迟 + 良好的错误恢复 + 所有浏览器支持 缺点:- 压缩效率不如 H.264/VP9 - 不支持 SVC
2.2 VP8 技术细节
VP8 编码结构:帧类型:- Key Frame (关键帧) - Inter Frame (帧间帧) - Golden Frame (黄金帧,用于错误恢复) - Altref Frame (替代参考帧) 分块:- 16x16 宏块 - 4x4 子块 预测模式:- 帧内:DC, V, H, TM - 帧间:运动补偿 变换:- 4x4 WHT (Walsh-Hadamard) - 4x4 DCT 熵编码:- 布尔算术编码
2.3 VP8 配置示例