当前位置: 首页 > news >正文

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

主要区分:

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(变长):        编码图像、参数等
字段说明
Fforbidden_zero_bit(固定为 0)
NRInal_ref_idc(参考强度)
Typenal_unit_type(表示内容类型)

关键类型:nal_unit_type

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

所以:

  • 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 0101F=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帧);

文章转载自:
http://autophagy.gbfuy28.cn
http://brominate.gbfuy28.cn
http://absolute.gbfuy28.cn
http://autoecious.gbfuy28.cn
http://abirritation.gbfuy28.cn
http://anthropomorphosis.gbfuy28.cn
http://ascendancy.gbfuy28.cn
http://anglesite.gbfuy28.cn
http://chelation.gbfuy28.cn
http://awry.gbfuy28.cn
http://aspiring.gbfuy28.cn
http://biotypology.gbfuy28.cn
http://bolide.gbfuy28.cn
http://activist.gbfuy28.cn
http://astrictive.gbfuy28.cn
http://bladework.gbfuy28.cn
http://boule.gbfuy28.cn
http://breviped.gbfuy28.cn
http://bak.gbfuy28.cn
http://catenarian.gbfuy28.cn
http://ccu.gbfuy28.cn
http://abluted.gbfuy28.cn
http://ahermatype.gbfuy28.cn
http://autostoper.gbfuy28.cn
http://benedictine.gbfuy28.cn
http://cacciatora.gbfuy28.cn
http://arkansas.gbfuy28.cn
http://bridie.gbfuy28.cn
http://bedfast.gbfuy28.cn
http://biocellate.gbfuy28.cn
http://www.dtcms.com/a/280086.html

相关文章:

  • LeetCode|Day13|88. 合并两个有序数组|Python刷题笔记
  • GaussDB 数据库架构师修炼(四) 备份容量估算
  • SQLite技术架构解析,适用场景有哪些?
  • 邮件伪造漏洞
  • 基于 AI 的大前端安全态势感知与应急响应体系建设
  • 【SVN】设置忽略规则
  • Python Docker SDK库详解:从入门到实战
  • el-table中type=“selection“选中数据如何回显
  • 半导体制造流程深度解析:外观缺陷检测的AI化路径与实践
  • Java 栈和队列
  • 3d max 的快捷键
  • 极限状态下函数开根号的计算理解(含示意图)
  • Flink双流实时对账
  • CPU寄存器、进程上下文与Linux O(1)调度器原理
  • Jfinal+SQLite java工具类复制mysql表数据到 *.sqlite
  • 基于 vue+Cesium 实现军事标绘之钳击箭头绘制实战
  • C++-linux系统编程 8.进程(三)孤儿进程、僵尸进程与进程回收
  • Oracle学习专栏(五):性能优化
  • 适用于Windows系统截图工具
  • 通用综合文字识别联动 MES 系统:OCR 是数据流通的核心
  • 【算法-BFS 解决最短路问题】探索BFS在图论中的应用:最短路径问题的高效解法
  • JVM——JVM垃圾回收调优的主要目的是什么?
  • 行为模式-状态模式
  • C++ -- STL-- List
  • 分布式通信框架 - JGroups
  • 从零开始的云计算生活——第三十二天,四面楚歌,HAProxy负载均衡
  • 数据怎么分层?从ODS、DW、ADS三大层一一拆解!
  • 智慧园区:激活城市活力的数字化引擎
  • 【colab 使用uv创建一个新的python版本运行】
  • mac上的app如何自动分类