h264语法(P帧语法细节)

时间:2011-04-22 13:29:13

标签: c++ video video-streaming h.264

我正在解析h264 NAL单位。在我的序列中 - 有NAL单元,其中设置了图像参数,设置了序列参数,I帧(它们也是IDR)和P帧(I帧和P帧构成单个切片)。 (根本没有B帧)

所以我的NAL单元流看起来像:

[SPS] [PPS] [I(IDR)] [P] [P] [P] ... [P] [P] [SPS] [PPS] [I(IDR)] [P] [P] [P] ....

我的流中的每个I帧也是IDR帧,因此它的frame_num为0(根据h.264标准)。

此外,每个P帧每单位frame_num大于前一帧。

但是,我对pic_order_cnt_lsb感到困惑。

pic_order_cnt_lsb代表什么?

按照我的顺序:

  • 如果P帧有frame_num==2 pic_order_cnt_lsb==4
  • 如果P帧有frame_num==3 pic_order_cnt_lsb==6
  • 如果P帧有frame_num==4 pic_order_cnt_lsb==8
  • 等......(在我的情况下pic_order_cnt_lsb == 2*frame_num

为什么frame_numpic_order_cnt_lsb之间存在这种相关性?

谢谢,

1 个答案:

答案 0 :(得分:1)

看起来你有隔行数据。对于隔行扫描数据,一帧由两个场组成。每个帧的另一个字段将具有pic_order_cnt_lsb的奇数值。

pic_order_cnt_lsb只是跟踪图片顺序的计数器的最低有效位。如果(如在典型的隔行扫描数据中)每帧有两张图片,那么对于frame_num中的每次更改,它都会递增2。如果你的流是渐进的而不是交错的,那么这两个会一起增加。