音视频学习(三十九):IDR帧和I帧

发布于:2025-07-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

主要区分:

I 帧 是帧内编码帧,IDR 帧 是一种特殊的 I 帧,它是“清除参考帧链的强制切断点”。

H.264 视频结构

结构

H.264 视频由多个 NAL(Network Abstraction Layer)单元 构成,每一帧图像可由一个或多个 NAL 单元组成。

典型结构:

H.264码流 =
| SPS | PPS | IDR | P帧 | B帧 | ... |

每帧 =
| Start Code | NAL Header | Payload |

NAL 单元结构

NAL 单元基本结构(以 Annex-B 为例):

起始码 (Start Code):    0x000001 或 0x00000001
NAL Header(1 字节):   |F|NRI| Type|
Payload(变长):        编码图像、参数等
字段 说明
F forbidden_zero_bit(固定为 0)
NRI nal_ref_idc(参考强度)
Type nal_unit_type(表示内容类型)

关键类型:nal_unit_type

Type 值 类型说明 是否关键帧
1 非 IDR 的帧(P/B/I) ❌ 非关键帧
5 IDR 帧(关键帧) ✅ 关键帧
6 SEI(辅助信息)
7 SPS(序列参数集)
8 PPS(图像参数集)

所以:

  • nal_unit_type == 5 → 表示这是一个 IDR 帧(关键帧);
  • nal_unit_type == 1 → 表示普通非 IDR 帧(可为 I、P、B 等);

IDR 帧识别

码流(16进制)示例(部分):
00 00 00 01 65 88 ... ← IDR 帧开始

解释:
00 00 00 01  → 起始码
65           → NAL Header = 0x65
               二进制 0110 0101
               F=0, NRI=3, Type=5 → IDR 帧
码流(另一个例子):
00 00 00 01 41 ... ← 普通 P/B 帧

41 → 0100 0001 → Type = 1 → 非 IDR

I 帧(Intra Frame)

特点:

  • 使用帧内预测压缩(不参考其他帧);
  • 可独立解码;
  • 用作压缩起点或恢复点。

但:不是所有 I 帧 都是 IDR 帧

  • 普通的 I 帧 可以被后续 P/B 帧作为参考帧
  • 所以如果你从某个普通 I 帧开始播放,仍可能缺少参考帧,造成花屏或播放错误。

IDR 帧(Instantaneous Decoder Refresh)

特点:

  • I 帧的一种特殊类型
  • 在 H.264 的语法中属于 IDR picture
  • 出现 IDR 帧时,所有之前的参考帧立即失效,后续帧 不会引用 IDR 帧之前的任何帧

作用:

  • 解码器会清空参考帧缓冲区;
  • 强制视频从此帧开始“清零重建”;
  • 是流媒体中的**“关键帧”**,播放器可以从此帧快速切入播放;
  • 典型用于 GOP(Group of Pictures)起始帧、场景切换、快速跳转点。

GOP 结构与 IDR 关联

时间线 →
GOP 1:  [IDR] P   B   B   P   B   B   P   B   B
             ↑———— 引用帧只在 GOP 内部 ———↑

GOP 2:  [IDR] P   B   B   P   B   B   P   B   B

注意:

  • 每个 GOP 的帧只引用其内部的帧;
  • IDR 帧确保后续帧 不引用前一个 GOP 的内容
  • 这样可以实现无依赖的片段播放或解码
  • 一个GOP中通常只有1个I帧(即IDR帧);

网站公告

今日签到

点亮在社区的每一天
去签到