H.264中的 SPS、PPS、IDR
H.264码流两类数据
H.264 码流
├── 参数集(Parameter Sets) ← 描述"怎么解码"
│ ├── SPS(Sequence Parameter Set) 序列级参数
│ └── PPS(Picture Parameter Set) 图像级参数
└── 图像数据
├── IDR 帧 ← 关键帧,可独立解码
├── I 帧 ← 帧内编码帧
├── P 帧 ← 前向预测帧
└── B 帧 ← 双向预测帧
SPS(Sequence Parameter Set 序列参数集)
-
描述整个视频序列的全局参数
-
包含什么
| 参数 | 含义 |
|---|---|
| profile/level | 编码档次和等级(如Main@4.0) |
| 分辨率 | widthxheight(如1920x1080) |
| 帧率相关 | 时间信息(VUI)里 |
| 色度格式 | yuv420p/yuv444p |
| 位深 | 8-bit/10-bit |
| 参考帧数量 | 最多参考几帧 |
| 帧编码顺序 | frame_mbs_only_flag等 |
- 作用
- 解码器必须先拿到SPS,才知道“这段视频多大、什么格式”
- SPS通常在每个IDR帧前重复出现,方便中途接入
PPS(Picture Parameter Set 图像参数集)
-
描述单帧或一组帧的编码参数
-
包含什么
| 参数 | 含义 |
|---|---|
| 熵编码模式 | CAVLC 或 CABAC |
| 量化参数偏移 | QP相关 |
| 去块滤波参数 | 是否启用、强度 |
| slice分组 | 切片如何组织 |
| 初始图像类型 | I/P/B |
- 作用
- 告诉解码器“这一帧具体怎么解”
- PPS依赖SPS:PPS会引用一个SPS ID
- 一个SPS可以对应多个PPS(不同场景用不同PPS)
IDR(Instantaneous Decoder Refresh 即时解码刷新帧)
-
一种特殊的关键帧,也叫IDR帧。它是I帧的子集(所有IDR都是I帧,但不是所有I帧都是IDR帧)
-
核心特点
| 特点 | 说明 |
|---|---|
| 可独立解码 | 不依赖任何前面的帧 |
| 刷新参考缓冲 | 解码到IDR时,清空之前所有参考帧 |
| 后续帧的锚点 | IDR之后的P/B帧只参考IDR帧 |
| 随机访问点 | 视频拖进度条时,播放器找的就是最近的IDR |
| 必须带SPS/PPS | 通常IDR前会重复SPS+PPS |
- 作用
- 支持随机访问,没有IDR,没法从中间开始播放
- 错误恢复,丢包后,解码器等到下一个IDR就能重新同步
- GOP起点,一个GOP(Group of Pictures)从IDR开始
- IDR与I帧的区别
- I帧:帧内编码,不参考其它帧,但解码它时,可能仍需要之前的参考帧保持“可参考”状态
- IDR帧:特殊的I帧,解码它时,强制清空所有参考帧,一切从零开始

浙公网安备 33010602011771号