FFMpeg中的AVPacket与H.264 NAL Uint之间的关系是什么?

时间:2016-06-02 07:53:55

标签: video ffmpeg video-streaming h.264 x264

我使用FFMpeg的api将图像编码为H.264流,代码如下encode code。当我调用函数avcodec_encode_video2时,我得到了一个AVPacket的数据,然后我将它保存到文件中。我使用几个图像来获取几个文件进行测试。 根据起始码00 00 00 0100 00 01,我发现第一个和第二个文件'数据都包含几个H.264 NAL UINT。但是从第三个文件开始,我找不到起始码。喜欢跟随图像。 Picture

我感到困惑。根据FFMpeg的代码,我认为一个AVPacket的数据应该包含至少一个NAL Uint,但结果是意外的。这意味着一个NAL Uint可能被分成两个AVPackets'数据? AVPacket和H.264 NAL Uint之间的关系是什么?

2 个答案:

答案 0 :(得分:1)

00 00 00 01 41.....
........00 00 01 41
....00 00 01 41......
.......

我测试后,除了初学者,以下NAL全部分开 00 00 01,NAL类型也一样。 所以每个AVPacket至少应该包含一个NAL。

答案 1 :(得分:0)

经过一番测试,我发现这只是我的愚蠢错误 我在Qt中得到了avpkt和setRawData到QByteArray,然后将bytearray保存到文件中。在保存之前,我调用了av_packet_unref来重置avpkt。我认为setRawData会复制avpkt的数据,但实际上QByteArray只包含数据指针。因此,一个AVPacket的数据包含至少一个完整的NAL Uint,这是正确的。