非 IDR 图像 NAL 单元 - 0x21 和 0x61 的含义

3

有人知道在h.264编码的视频流中,0x210x61代表什么吗?

我知道0x01表示这是一个b-frame0x41表示这是一个p-frame。我的编码视频给出了两个0x21帧,接着是一个b-frame

I 21 21 B 21 21 B...... 

这个 0x21 是什么意思?

你的十六进制值是否表示NALU的第一个字节? - szatmary
@szatmary 请查看以下链接,其中包含字节序列。 https://docs.google.com/document/d/1JcobN6NgK59nlyzcfY5FpnE6_ii7C6KvovXe1OBLmeE/pub这是我得到的字节序列。第一个是SPS,然后是PPS,然后是I帧,然后我想是P、P和B... 我该如何区分这些帧? - CGD
2个回答

9

首先,NALU(网络抽象层单元)与帧不同。一帧可以包含一个以上的NALU(但不能少于一个)。一帧也可以由多个切片类型组成。单个帧可以具有I、B和P切片。如果它是IDR帧,则该帧的每个切片都必须是IDR。

0x01不是B切片。它是“非IDR图像的编码切片”,就像0x21和0x61一样。它可以是I/B/P或p切片,需要解析slice_type才能了解更多信息。


1
你能否给出解析NAL单元并找到slice_type(I/P/B)的示例或参考? - santiago_apr1
不好意思,我不能回答这个问题。评论区域不允许我输入足够的内容来回答。请开一个新的问题。 - szatmary
@szatmary 访问单元分隔符,如果存在,可以用于识别帧的起始和结束。当 AUD 不存在时,如何正确解析帧的起始和结束?您能详细说明一下吗? - Sandeep
你必须解析每个nalu,直到每个宏块都被处理。 - szatmary

6

来自H.264规范:

7.3.1 NAL单元语法

  • forbidden_zero_bit - 1位 - 应等于0。
  • nal_ref_idc - 2位 - 不等于0表示NAL单元的内容包含序列参数集[...]
  • nal_unit_type - 5位 - 指定NAL单元中包含的RBSP数据结构的类型[...]

0x210x61使其成为NAL单元类型1(非IDR图像的编码切片),并具有不同的nal_ref_idc值。

更新。没有特定位的一对一映射,尤其是从“帧”的开始位置固定的位,说明它是I/P/B帧。您需要解析比特流以读取H.264规范7.4.3切片头语义中的值(在大多数情况下仍然可以做到,因为该值非常接近比特流的开头-请查看H.264规范以获取详细信息):

<code>slice_type</code>


这是P帧还是B帧? nal_unit_type对于所有4种组合都将返回01。(0x01,0x21,0x41,0x61) 那么我们如何知道数据包是B帧、P帧还是I帧? - CGD
1
这个答案不完整。 - szatmary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接