H.264Advanced Video Coding,也称 AVC)是一种应用极广的视频编码标准,通过帧内/帧间预测、变换量化、熵编码和环路滤波,把原始视频压缩成适合存储和传输的码流。

它比早期 MPEG-2 等标准压缩效率更高,又比 H.265(HEVC) 更容易被老设备、浏览器、相机、播放器和硬件解码器支持。

核心问题

视频里有大量空间和时间冗余:同一帧内邻近像素相似,相邻帧之间也常常只有局部移动。H.264 的目标是把“可以预测出来的部分”尽量不直接存,只保存预测方式和预测误差。

核心对象

对象作用工程关注点
macroblockH.264 的核心处理块,通常以 16x16 亮度区域为基础解码、滤波、运动补偿的基本组织单位
slice一帧中的可独立解析区域错误恢复、并行和封包边界
I/P/B frame帧类型影响压缩率、延迟和随机访问
reference frame被后续帧引用的已解码帧影响内存占用和运动补偿
motion vector指向参考帧中相似块的位移用于帧间预测
residual coefficient预测误差经过变换和量化后的系数决定细节保留和码率
profile / level功能集合和能力上限影响硬件兼容、分辨率、码率和工具集

核心机制

H.264 解码的核心路径是:

  1. 解析码流中的 SPS/PPS、slice header、宏块类型和预测信息。
  2. 对语法元素做熵解码,常见方式包括 CAVLC 或 CABAC。
  3. 根据帧内或帧间预测模式生成预测块。
  4. 对残差系数做反量化和反整数变换。
  5. 把预测块和残差块相加,得到重建块。
  6. 做 deblocking filter,减轻块边界伪影。
  7. 输出当前帧,并把需要引用的帧放入参考帧缓冲。

简化公式是:

decoded_block = predicted_block + reconstructed_residual
  • predicted_block 是由邻近像素或参考帧生成的预测结果。
  • reconstructed_residual 是压缩码流里保存的预测误差,经过熵解码、反量化、反变换后得到。
  • 解码器不需要知道原始未压缩块,只按码流中保存的预测指令和残差信息重建近似图像。

工程用途

  • 浏览器视频、直播、视频会议和移动端播放。
  • 相机、采集卡、UVC 设备和嵌入式录像。
  • 需要广泛兼容旧设备或低性能设备的视频分发。
  • 对实时性、低延迟和稳定硬解支持要求更高的场景。

与 H.265 的边界

H.264 和 H.265 都属于有损视频编码标准,都使用预测、残差、变换、量化和熵编码。但工程取舍不同:

维度H.264H.265
压缩效率较高,长期够用通常更高
软解码成本通常较低通常较高
硬件兼容性非常广新设备较好,老设备不稳定
常见用途直播、视频会议、兼容分发4K/8K、存储节省、高码率内容
延迟调优成熟工具链多需要更仔细检查硬解和播放器路径

常见坑

  • 把 H.264 当成 MP4:MP4 是容器,H.264 是视频轨的编码格式。
  • 只看码率不看画质和延迟:低码率可能来自更强压缩,也可能来自细节损失、降噪或更长 GOP。
  • 误判硬解路径:播放器显示能播放,不代表走了硬件解码;可能已经回退到软解码
  • 忽略 profile/level:Baseline、Main、High 等 profile 的工具集不同,硬件支持也不同。

相关术语