博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FFmpeg 结构体学习(三): AVPacket 分析
阅读量:7233 次
发布时间:2019-06-29

本文共 2798 字,大约阅读时间需要 9 分钟。

在上文我们学习了AVStream结构体的相关内容。本文,我们将讲述一下AVPacket。

AVPacket是存储压缩编码数据相关信息的结构体。下面我们来分析一下该结构体里重要变量的含义和作用。

一、源码整理

首先我们先看一下结构体AVPacket的定义的结构体源码(位于libavcodec/avcodec.h):

typedef struct AVPacket {    /**     * Presentation timestamp in AVStream->time_base units; the time at which     * the decompressed packet will be presented to the user.     * Can be AV_NOPTS_VALUE if it is not stored in the file.     * pts MUST be larger or equal to dts as presentation cannot happen before     * decompression, unless one wants to view hex dumps. Some formats misuse     * the terms dts and pts/cts to mean something different. Such timestamps     * must be converted to true pts/dts before they are stored in AVPacket.     */    int64_t pts;    /**     * Decompression timestamp in AVStream->time_base units; the time at which     * the packet is decompressed.     * Can be AV_NOPTS_VALUE if it is not stored in the file.     */    int64_t dts;    uint8_t *data;    int   size;    int   stream_index;    /**     * A combination of AV_PKT_FLAG values     */    int   flags;    /**     * Additional packet data that can be provided by the container.     * Packet can contain several types of side information.     */    struct {        uint8_t *data;        int      size;        enum AVPacketSideDataType type;    } *side_data;    int side_data_elems;     /**     * Duration of this packet in AVStream->time_base units, 0 if unknown.     * Equals next_pts - this_pts in presentation order.     */    int   duration;    void  (*destruct)(struct AVPacket *);    void  *priv;    int64_t pos;                            ///< byte position in stream, -1 if unknown     /**     * Time difference in AVStream->time_base units from the pts of this     * packet to the point at which the output from the decoder has converged     * independent from the availability of previous frames. That is, the     * frames are virtually identical no matter if decoding started from     * the very first frame or from this keyframe.     * Is AV_NOPTS_VALUE if unknown.     * This field is not the display duration of the current packet.     * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY     * set.     *     * The purpose of this field is to allow seeking in streams that have no     * keyframes in the conventional sense. It corresponds to the     * recovery point SEI in H.264 and match_time_delta in NUT. It is also     * essential for some types of subtitle streams to ensure that all     * subtitles are correctly displayed after seeking.     */    int64_t convergence_duration;} AVPacket;

二、AVPacket 重点字段

uint8_t *data:压缩编码的数据。int   size:data的大小int64_t pts:显示时间戳int64_t dts:解码时间戳int   stream_index:标识该AVPacket所属的视频/音频流。

针对data做一下说明:对于H.264格式来说,在使用FFMPEG进行视音频处理的时候,我们常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件。

 

转载地址:http://oclfm.baihongyu.com/

你可能感兴趣的文章
AC日记——聪明的质监员 洛谷 P1314
查看>>
微软推出首个Microsoft Azure Stack技术预览版
查看>>
Proguard语法及常用proguard.cfg代码段
查看>>
OOP 第二章作业总结
查看>>
python什么时候使用多线程,什么时候使用多进程?
查看>>
Quartz中时间表达式的设置-----corn表达式 (转)(http://www.cnblogs.com/GarfieldTom/p/3746290.html)...
查看>>
Flash Media Server 5.0 (FMS)注册码
查看>>
根据匹配词个数排序
查看>>
Xcopy命令参数使用介绍
查看>>
Java ArrayList、Vector和LinkedList等的差别与用法(转)
查看>>
用flock命令解决Linux计划任务重复执行
查看>>
[再寄小读者之数学篇](2014-06-19 两个分部积分)
查看>>
Opencv cvCircle函数
查看>>
CMD命令 - yanghj - 博客园
查看>>
mysql 加入列,改动列,删除列。
查看>>
网格导入设置 Import settings for Meshes
查看>>
m2014-architecture-imgserver->Lighttpd +mod_mem_cache的效果简直太好了
查看>>
POSIX semaphore: sem_open, sem_close, sem_post, sem_wait
查看>>
wcf中的使用全双工通信(转)
查看>>
PowerDesigner生成Access数据库
查看>>