AVPacket是存储压缩编码数据相关信息的结构体。AVPacket是FFmpeg中很重要的一个结构体,它保存了压缩后的数据以及这些数据的信息,比如显示时间戳pts,解码时间戳dts,每一帧持续的时间duration以及媒体流的索引等。
对于视频而言一个AVPacket通常是一个压缩的AVFrame,而一个音频AVPacket可能包含若干个AVFrame。当然也有可能AVPacket是一个空的,不包含任何数据仅仅包含sider data。(例如在编码结束时更新一些流的参数)。根据官方文档,AVPacket的大小是公开ABI的一部分,这样的结构体在FFmpeg中很少,因此它可能在栈中分配空间,并且如果libavcodec和libavformat没有较大的改动,那么AVPacket将不会添加新的字段。
AVPacket的定义如下(在libavcodec/packet.h文件中定义):
1 | typedef struct AVPacket { |
AVPacket相比其他的结构体而言简单,但却是非常常用的一个。在AVPacket结构体中,重要的变量有以下几个:
1 | AVBufferRef *buf; 指向引用的数据,如果如NULL,那么packet中的data没被使用 |