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_deprecatedint64_t convergence_duration;
#endif
} AVPacket;

FFmpeg总结(六)AV系列结构体之AVPacket相关推荐

  1. FFmpeg总结(三)AV系列结构体之AVCodecContext

    位置: 描述:主要扩展API的结构体 New fields can be added to the end with minor version bumps. Removal, reordering ...

  2. FFmpeg源代码简单分析:结构体成员管理系统-AVOption

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  3. FFmpeg源代码简单分析:结构体成员管理系统-AVClass

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  4. FFMPEG中最关键的结构体之间的关系

    注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...

  5. FFMPeg代码分析:AVCodecContext结构体

    在调用avformat_open_input打开文件后,下一步调用av_find_stream_info函数从文件中读取音视频流的信息,而后AVFormatContext的结构体将会将这些信息保存在其 ...

  6. FFmpeg:浅谈 AVFrame 结构体

    成员变量 struct AVFrame 是一个很基础的类型,顾名思义,主要用来管理解码后的音视频数据: 视频:一个 AVFrame 对象可存储一帧图像. 音频:一个 AVFrame 对象可存储若干个采 ...

  7. 【FFmpeg视频播放器开发】解封装解码流程、常用API和结构体简介(一)

    一.前言 在正式编写 FFmpeg 播放器前,我们需要先简单了解下所要用到的 FFmpeg 库.播放与解码流程.函数和相关结构体. 二.FFmpeg 库简介 库 介绍 avcodec 音视频编解码核心 ...

  8. FFmpeg重要结构体(转自雷神)

    首发地址,会更错 本文主要整合FFMPEG中最关键的结构体之间的关系 系列文章,以便于后面学习以及资料的查阅. 结构体间联系 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(im ...

  9. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

    FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...

  10. FFMPEG结构体分析:AVCodecContext(转)

    注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...

最新文章

  1. java中编写单选按钮的程序_java的单选按钮GUI程序设计
  2. php mysql 星级评分_jQuery+PHP星级评分实现方法_jquery
  3. Mysql优化系列(1)--Innodb重要参数优化
  4. 外贸网络推广浅析新建网站该如何更快速进入搜索结果首页?
  5. 美国诚实签经验——着装,戒指,手表装土豪,医生预约单,流水、房产和工作证明...
  6. IL2CPP的优化 : Devirtualization 去虚拟化
  7. 删除计算机文件的几种方法,电脑删除不了文件怎么办?教你几种好的处理方法,一学就会...
  8. 非web项目并且项目文件多java项目 使用tomcat发布的方式
  9. create-react-app 脚手架工具完善自己所需要的入口文件
  10. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox
  11. c语言 一元多项式乘法,[内附完整源码和文档] 基于C语言实现的一元多项式的计算...
  12. UTM大地坐标系与经纬度转换算法C++
  13. STM32F4图像识别
  14. iOS中日本日历、佛教日历取date的问题
  15. 【论文分享】ACL 2020 立场检测相关研究
  16. 2019年私域流量的演变历程剖析:定义、演变、成因、改变企业营销决策!
  17. python作业-5
  18. 使用Hibernate进行CRUD操作
  19. Python数据可视化第 3 讲:matplotlib绘图之函数plot()
  20. 河南省计算机专业三本排名2015,河南三本大学排名【最新排行榜】

热门文章

  1. 大整数相乘python fft_Python带你理解用于信号同步的CAZAC序列
  2. 设计模式(9)——模板方法模式
  3. python_open3d_Error: The DISPLAY environment variable is missing
  4. CVPR2018_主干网络系列(3)_SE-Net及其衍生的网络[SE-XX-Net]
  5. 深度学习笔记(二)——VGG
  6. LeetCode之同构字符串
  7. HTTP Cookies
  8. NLP学习------HanLP使用实验
  9. Ajax 调用(传值)一般处理程序(.ashx)
  10. 版本控制工具比较-CVS,SVN,GIT