我使用FFMpeg的api将图像编码为H.264流,代码如下encode code。当我调用函数avcodec_encode_video2
时,我得到了一个AVPacket的数据,然后我将它保存到文件中。我使用几个图像来获取几个文件进行测试。
根据起始码00 00 00 01
或00 00 01
,我发现第一个和第二个文件'数据都包含几个H.264 NAL UINT。但是从第三个文件开始,我找不到起始码。喜欢跟随图像。
我感到困惑。根据FFMpeg的代码,我认为一个AVPacket的数据应该包含至少一个NAL Uint,但结果是意外的。这意味着一个NAL Uint可能被分成两个AVPackets'数据? AVPacket和H.264 NAL Uint之间的关系是什么?
答案 0 :(得分:1)
00 00 00 01 41.....
........00 00 01 41
....00 00 01 41......
.......
我测试后,除了初学者,以下NAL全部分开 00 00 01,NAL类型也一样。 所以每个AVPacket至少应该包含一个NAL。
答案 1 :(得分:0)
setRawData
到QByteArray,然后将bytearray保存到文件中。在保存之前,我调用了av_packet_unref
来重置avpkt。我认为setRawData
会复制avpkt的数据,但实际上QByteArray只包含数据指针。因此,一个AVPacket的数据包含至少一个完整的NAL Uint,这是正确的。