parent
1ab0a9a690
commit
40329000fe
@ -0,0 +1,95 @@ |
||||
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数据直接写成文件,从而得到视音频的码流文件。 |
Loading…
Reference in new issue