一、AVPacket
/**
* AVPacket 作为解码器的输入 或 编码器的输出。
* 当作为解码器的输入时,它由demuxer生成,然后传递给解码器
* 当作为编码器的输出时,由编码器生成,然后传递给muxer
* 在视频中,AVPacket 只能包含不大于1帧的内容,而视频的1帧可能要包含在多个AVPacket中,AVPacket < AVFrame
*
*
* AVPacket 是ffmpeg中少数的几个公共ABI,它只能被libavcodec和libformat在栈上分配
*
* The side data is always allocated with av_malloc() and is freed in
* av_free_packet().
*/
typedef struct AVPacket {
/**
* packet的内存空间来自于一个叫做“引用计数缓冲区”的地方,这个指针就指向一块引用计数缓冲区
*/
AVBufferRef *buf;
/**
* 显示时间戳 单位是 AVStream->time_base units
*/
int64_t pts;
/**
* 解压时间戳,在这个时刻该包需要被解码
*/
int64_t dts;
uint8_t *data;
int size;
int stream_index;
/**
* A combination of AV_PKT_FLAG values
*/
int flags;
/**
* 存放额外的包信息
*/
struct {
uint8_t *data;
int size;
enum AVPacketSideDa