每一个包是一个完整的数据帧,来暂存解复用之后、解码之前的媒体数据(一个音/视频帧、一个字幕包等)及附加信息(解码时间戳、显示时间戳、时长等)
//注意保存音视频数据包的内存
是 malloc 出来的,用完后应及时用 free 归还给系统typedef struct AVPacket
{
int64_t pts;
int64_t dts;
int64_t pos;
uint8_t *data;//数据首地址
int size;
int stream_index;
int flags;//flags为标志域,1表示该数据是一个关键帧
void(*destruct)(struct AVPacket*);//释放数据缓冲区的函数指针
} AVPacket;AVPacket本身只是个容器,它data成员引用实际的数据缓冲区。这个缓冲区通常是由av_new_packet创建的,但也可能由 FFMPEG的API创建(如av_read_frame)。当某个AVPacket结构的数据缓冲区不再被使用时,要需要通过调用 av_free_packet释放
而av_new_packet实现如下:(也有 av_init_packet)
void av_init_packet(AVPacket *pkt)
{
pkt->pts = AV_NOPTS_VALUE;
pkt->dts = AV_NOPTS_VALUE;
pkt->pos = -1;
pkt->duration = 0;
pkt->convergence_duration = 0;
pkt->flags = 0;
pkt->stream_index = 0;
#i

AVPacket是FFmpeg中用于存储解复用后、解码前的媒体数据帧的结构体,包含音视频数据及其时间戳等信息。av_new_packet用于分配内存并初始化该结构体。

4387

被折叠的 条评论
为什么被折叠?



