有人知道在h.264编码的视频流中,0x21
和0x61
代表什么吗?
我知道0x01
表示这是一个b-frame
,0x41
表示这是一个p-frame
。我的编码视频给出了两个0x21
帧,接着是一个b-frame
。
I 21 21 B 21 21 B......
这个
0x21
是什么意思?有人知道在h.264编码的视频流中,0x21
和0x61
代表什么吗?
我知道0x01
表示这是一个b-frame
,0x41
表示这是一个p-frame
。我的编码视频给出了两个0x21
帧,接着是一个b-frame
。
I 21 21 B 21 21 B......
0x21
是什么意思?首先,NALU(网络抽象层单元)与帧不同。一帧可以包含一个以上的NALU(但不能少于一个)。一帧也可以由多个切片类型组成。单个帧可以具有I、B和P切片。如果它是IDR帧,则该帧的每个切片都必须是IDR。
0x01不是B切片。它是“非IDR图像的编码切片”,就像0x21和0x61一样。它可以是I/B/P或p切片,需要解析slice_type才能了解更多信息。
来自H.264规范:
7.3.1 NAL单元语法
- forbidden_zero_bit - 1位 - 应等于0。
nal_ref_idc
- 2位 - 不等于0表示NAL单元的内容包含序列参数集[...]nal_unit_type
- 5位 - 指定NAL单元中包含的RBSP数据结构的类型[...]
0x21
和0x61
使其成为NAL单元类型1(非IDR图像的编码切片),并具有不同的nal_ref_idc
值。
更新。没有特定位的一对一映射,尤其是从“帧”的开始位置固定的位,说明它是I/P/B帧。您需要解析比特流以读取H.264规范7.4.3切片头语义中的值(在大多数情况下仍然可以做到,因为该值非常接近比特流的开头-请查看H.264规范以获取详细信息):