You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在H265码流中识别I帧?C++视频存储场景技术问询

H.265 I帧识别方法

要识别H.265中的I帧,核心是解析NAL单元(NALU)的类型字段,具体步骤如下:

1. 定位NAL单元起始

通过你已知的00 00 00 01(4字节起始码)或00 00 01(3字节起始码,部分场景使用),找到每个NAL单元的起始位置。

2. 解析NALU头的类型字段

每个NAL单元起始码后的第一个字节是NALU头,我们需要提取这个字节的低6位(二进制第0-5位)来确定NAL单元类型:

  • 对该字节执行按位与操作:nalu_header_byte & 0x3F(0x3F对应二进制00111111,用于保留低6位)
  • 得到的结果就是NAL单元类型编号(NUT)

3. 判断I帧对应的NAL单元类型

以下类型编号对应的NAL单元属于I帧:

  • 16:非IDR帧的I帧切片(独立编码,但需依赖序列开头的SPS/PPS)
  • 19:IDR帧的I帧切片(特殊I帧,后续所有帧不依赖之前的帧)
  • 20:带RAP的IDR帧切片(可靠的序列起始点)

其中IDR帧(类型19、20)是更适合作为存储起始的选择,因为它无需依赖之前的任何帧即可解码;非IDR的I帧(类型16)虽然也是I帧,但需确保存储文件中包含对应的SPS和PPS才能正常解码。

额外注意

存储I帧时,建议先写入对应的SPS(NAL类型33,对应你已知的十六进制67,因为0x67 & 0x3F = 0x21 = 33)和PPS(NAL类型34,对应十六进制68,0x68 & 0x3F = 0x22 = 34),否则单独的I帧无法被解码器正确解析。

内容的提问来源于stack exchange,提问作者K_peanutButter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:55:08