FFmpeg总结(六)AV系列结构体之AVPacket
来源:互联网 发布:淘宝店铺装修怎么还原 编辑:程序博客网 时间:2024/06/05 22:30
AVPacket位置:libavcodec/avcodec.h下:
AVPacket:
- 通常通过demuxer导出的data packet作为解码器的input data
- 或是收到来自编码器的data packet,通过muxer进入输出的output data
看如下图,更易理解:
对于视频来说,它通常应该包含一个压缩的帧,对于音频,可能包含多个压缩帧,允许编码器输出为空的packet,没有压缩数据,只包含数据(如一些更新参数的编码)
AVPacket 是FFmpeg中为数不多的结构体,它的size是public ABI的一部分,因此它没有libavcodec及libavformat主块中获得分配栈空间及添加新字段。
数据所有权的的语义决于buf字段,如果是组,分组数据是动态分配的,在调用av_packet_unref()把引用计数降到0之前,都是有效定义的。
如果buf字段没有设置av_packet_ref()将拷贝一份代替增加的引用计数
- 数据分配总是分配通过av_malloc()
- 数据拷贝总是通过av_packet_ref()
- 数据释放总是通过av_packet_unref()
typedef struct AVPacket { AVBufferRef *buf; //一个引用指向packet数据存储的buffer的引用计数,如果为NULL,packet数据没有引用计数 int64_t pts; //显示时间戳(AVStream->time_base units)pts主要用于度量解码后的视频帧什么时候被显示出来 int64_t dts; //解码时间戳(AVStream->time_base units) //DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出. //在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的. uint8_t *data; int size; int stream_index; int flags; //AV_PKT_FLAG标识 AVPacketSideData *side_data; //容器中能提供的其他packet数据,packet中包含一些具体信息 int side_data_elems; int64_t duration; // packet的时长(AVStream->time_base units) int64_t pos; //< byte position in stream, -1 if unknown#if FF_API_CONVERGENCE_DURATION /** * @deprecated Same as the duration field, but as int64_t. This was required * for Matroska subtitles, whose duration values could overflow when the * duration field was still an int. */ attribute_deprecated int64_t convergence_duration;#endif} AVPacket;
0 0
- FFmpeg总结(六)AV系列结构体之AVPacket
- FFmpeg总结(二)AV系列结构体之AVFrame
- FFmpeg总结(三)AV系列结构体之AVCodecContext
- FFmpeg总结(七)AV系列结构体之AVIOContext
- FFmpeg总结(七)AV系列结构体之AVIOContext
- FFmpeg总结(四)AV系列结构体之AVBuffer、AVBufferRef、AVBufferPool
- FFmpeg总结(五)AV系列结构体之AVCodec、AVCodecParameters、AVCodecParser、AVCodecParserContext、AVCodecDescriptor
- ffmpeg重要结构体之AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析 AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- ffmpeg之AVPacket笔记
- FFmpeg之AVPacket
- FFMPeg代码分析:AVPacket结构体和av_read_frame函数
- Linux基础学习——unit10
- maven 创建java项目, web项目
- 设计模式学习笔记——状态(State)模式框架
- Handle 相关
- 【java】jvm调优笔记(二)—— GC策略&内存申请、对象衰老
- FFmpeg总结(六)AV系列结构体之AVPacket
- 批处理总结
- java.net.SocketException: Too many open files问题分析及解决方案
- vs2010编译器的使用
- Maven多模块项目管理小结
- css样式DEMO
- Lecture 9: Ways to make neural networks generalize better 提高神经网络泛化能力的方法
- 数论莫比乌斯——bzoj2820YY的GCD
- Maven实战(九)——打包的技巧