FFMpeg 中的 AVPacket 和 H.264 NAL Uint 有什么关系?

What's the relationship between AVPacket in FFMpeg and H.264 NAL Uint?

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

我感到很困惑。根据FFMpeg的代码,我认为一个AVPacket的数据应该至少包含一个NAL Uint,但结果出乎意料。这是否意味着一个 NAL Uint 可以分为两个 AVPackets 的数据? AVPacket和H.264 NAL Uint有什么关系?

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

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

经过我测试,除了初学者,下面的NAL都是用 00 00 01,NAL类型也一样。 所以每个AVPacket至少应该包含一个NAL。