h264语法(P帧语法细节)

ste*_*emm 5 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] ....
Run Code Online (Sandbox Code Playgroud)

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

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

但是,我很困惑pic_order_cnt_lsb.

什么pic_order_cnt_lsb代表?

在我的序列中:

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

为什么frame_num和之间存在这种相关性pic_order_cnt_lsb

谢谢,

Jer*_*fin 1

看起来您有交错数据。对于隔行数据,一帧由两个场组成。每帧的其他字段将具有 的奇数值pic_order_cnt_lsb

pic_order_cnt_lsb只是跟踪图片顺序的计数器的最低有效位。如果(如典型的隔行扫描数据)每帧有两张图片,则每次更改frame_num 时它都会增加 2。如果您的流是渐进式的而不是隔行式的,则两者将一起递增。