当前位置: 首页 > 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://www.lryc.cn/news/588707.html

相关文章:

  • React.FC与React.Component
  • PyCharm 高效入门指南:从安装到效率倍增
  • docker拉取nacos镜像失败
  • lanch4j将jar转成exe
  • 开通保存图片权限
  • iOS高级开发工程师面试——Swift
  • 语言模型玩转3D生成:LLaMA-Mesh开源项目
  • 无人机故障响应模块运行与技术难点
  • 全面安装指南:在Linux、Windows和macOS上部署Apache Cassandra
  • 网络劫持对用户隐私安全的影响:一场无形的数据窃取危机
  • 算法在前端框架中的集成
  • 021_自然语言处理应用
  • 量子比特的稳定性革命:破解量子计算“脆弱密码”的最新突破
  • 读取ubuntu的磁盘分区表与超级块
  • 【高等数学】第三章 微分中值定理与导数的应用——第一节 不定积分的概念与性质
  • 面向医疗AI场景的H20显卡算力组网方案
  • Vue 中 effectScope() 的全面解析与实战应用
  • WPF,Winform,HTML5网页,哪个UI开发速度最快?
  • 板凳-------Mysql cookbook学习 (十一--------11)
  • 使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)
  • PySpark Standalone 集群
  • PySpark 常用算子详解
  • Java使用itextpdf7生成pdf文档
  • 【开源】一款基于 .NET 和 Vue3 开源(Apache)的MES管理系统,您的新一代工厂管理助手!
  • 【雅思播客016】New Year Resolution 新年决心
  • Luban配置教程
  • CSS :root伪类详解:实现动态主题切换的关键所在
  • 从浏览器到服务器:TCP 段的网络传输之旅
  • 建筑兔零基础人工智能自学记录109|LangChain简单翻译应用-19
  • Linux 基础 IO