H264裸码流 I/P/B帧对应NAL类型

文章介绍了NAL单元类型检测,主要关注SPS、PPS、IDR和SLICE等关键类型,并解释了如何通过nal_header的NAL_Type字段识别它们。在frame类型检测中,由于I帧、P帧和B帧的nal_header相同,需要深入到slice层利用熵编码数据进行区分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.NAL类型检测

  nal类型检测非常容易,对照下表即可容易判断类型。

较常用nal类型包括:SPS(7)、PPS(8)、IDR(5)、SLICE(1)。

而nal_type嵌在码流数据的nal_header(size=1Byte)中,占据据该字节的后五位bits。

nal_header结构为:F(1bit) + NRI(2bits) + NAL_Type(5bits)。

因此,用winhex看裸流的二进制数据时,通常看到start_code后的nal_header为:0x67, 0x68, 0x65, 0x41,其分别对应SPS、PPS、I帧、P帧或B帧

如下一段裸流,可以看出:(红色为SPS,绿色为PPS,蓝色为I帧)

2.frame类型检测

 从nal_header可以容易找到I帧(0x65),但却无法分辨出P帧和B帧,因为nal_header都是0x41(对应于nal_unit_type的1)。

 如何分辨出来呢?需要进入到slice层利用熵编码数据来判断

HEVC采用了类似H.264NAL单元结构,每个NAL单元包含了一个完整的视频或片段的编数据。在HEVC中,NAL单元可以是VPS、SPS、PPS、SEI或视频数据。 要判断一个NAL单元中包含的视频类型,需要解析NAL单元中的头部信息。在HEVC中,NAL单元的头部信息包括了NAL单元类型NAL unit type)和层次(Layer ID)等信息。具体来说,NAL单元类型由header中的`nal_unit_type`字段指定,其值为0~55,其中0-32是VCL NAL单元,表示视频数据,33-35是非VCL NAL单元,表示参数集等信息。 对于VCL NAL单元,可以进一步从NAL单元的payload中获取视频类型。在HEVC中,视频类型NAL单元类型之间的对应关系如下: - NAL_UNIT_TYPE_BLA_N_LP:前向预测(B) - NAL_UNIT_TYPE_BLA_W_LP:前向预测(B) - NAL_UNIT_TYPE_BLA_W_RADL:前向预测(B) - NAL_UNIT_TYPE_CRA:无参考(I) - NAL_UNIT_TYPE_IDR_W_RADL:关键(I) - NAL_UNIT_TYPE_IDR_N_LP:关键(I) - NAL_UNIT_TYPE_IDR_W_LP:关键(I) - NAL_UNIT_TYPE_P_BLA_W_LP:双向预测(P) - NAL_UNIT_TYPE_P_BLA_W_RADL:双向预测(P) - NAL_UNIT_TYPE_P_RPS_N_LP:双向预测(P) - NAL_UNIT_TYPE_P_RPS_W_LP:双向预测(P) - NAL_UNIT_TYPE_P_RPS_W_RADL:双向预测(P) - NAL_UNIT_TYPE_P_SLICE:双向预测(P) 因此,可以根据NAL单元类型和payload中的数据,判断一个NAL单元中包含的视频类型是I、P还是B
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值