`

FFMPEG结构体分析:AVPacket

 
阅读更多

 

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

FFMPEG结构体分析:AVFrame
FFMPEG结构体分析:AVFormatContext
FFMPEG结构体分析:AVCodecContext
FFMPEG结构体分析:AVIOContext
FFMPEG结构体分析:AVCodec
FFMPEG结构体分析:AVStream
FFMPEG结构体分析:AVPacket

 

FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:

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

在此不再详述,其中AVPacket是存储压缩编码数据相关信息的结构体。本文将会详细分析一下该结构体里重要变量的含义和作用。

首先看一下结构体的定义(位于avcodec.h文件中):

 

/* 雷霄骅
 * 中国传媒大学/数字电视技术
 * leixiaohua1020@126.com
 *
 */
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:压缩编码的数据。

例如对于H.264来说。1个AVPacket的data通常对应一个NAL。

注意:在这里只是对应,而不是一模一样。他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码流

因此在使用FFMPEG进行视音频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件。

 

int size:data的大小

int64_t pts:显示时间戳

int64_t dts:解码时间戳

int stream_index:标识该AVPacket所属的视频/音频流。

 

这个结构体虽然比较简单,但是非常的常用。

 

 

 

分享到:
评论

相关推荐

    ffmpeg函数库介绍.docx

    AVPacket 结构体是 ffmpeg 函数库中的一种核心数据结构,用于存储媒体数据,而 AVPacketList 结构体则用于存储多个 AVPacket 结构体。了解 AVPacket 和 AVPacketList 结构体的实现机理,对于在 ffmpeg 函数库中进行...

    FFmpeg基础库编程开发

    4.11 AVPacket 结构体 66 4.12 AVPacketList 结构体 67 4.13 AVFrame结构体 67 第五章 重要模块 76 5.1 libavutil公共模块 76 1 文件列表 76 2 common.h 文件 76 3 bswap.h 文件 78 4 rational.h 文件 79 5 ...

    FFmpeg解码端代码及语义分析.rar

    在“ffmpeg解码端代码及语义分析.pdf”中,可能会详细分析上述步骤中的关键函数和结构体,如AVPacket、AVFrame、AVCodecContext等。它会解释这些核心组件的用途,以及它们如何协同工作来完成解码任务。 例如,`...

    ffmpeg-wrapper:适用于iOS的ffmpeg包装器库

    2. **API封装**: 将FFmpeg的核心函数和结构体转换为Objective-C对象和方法,如`AVFormatContext`、`AVPacket`等,提供更符合面向对象编程习惯的接口。 3. **错误处理**: 提供统一的错误处理机制,便于在iOS应用中...

    ffmpeg基础库编程开发_add_notes.pdf

    - **AVPacket结构体**: 包含单个编码数据包。 - **AVPacketList结构体**: AVPacket的链表结构。 - **AVFrame结构体**: 包含解码后的音频或视频数据。 #### 五、重要模块 - **libavutil公共模块** - 提供各种工具...

    MFC+ffmpeg播放器

    3. **内存管理**:FFmpeg的结构体(如AVPacket、AVFrame)通常需要手动分配和释放,确保正确管理内存是非常重要的。 4. **性能优化**:对于复杂的媒体文件,可能需要考虑使用硬件加速解码,或者优化解码和渲染的...

    FFMpeg SDK 开发手册

    7. AVPacket:AVPacket结构体用于存放编解码后的数据包,它包括了编码后的数据、时间戳、数据包大小等信息。 8. AVPicture:AVPicture结构体用于存放处理过的视频帧,通常用于图像转换等操作。 9. AVStream:...

    演示C#如何调用ffmpeg API_FFmpeg.AutoGen_ffmpeg

    FFmpeg.AutoGen提供了大量的结构体、枚举和函数,以C#的形式封装了FFmpeg的API。例如,`AVFormatContext`代表媒体容器,`AVCodecContext`代表编码或解码上下文,`AVPacket`用于传输音视频数据。 3. **初始化FFmpeg...

    音视频开发-FFmpeg-n5.1.2开发库

    3. **include**:此目录下包含FFmpeg库的头文件,它们定义了各种函数、结构体和枚举,使得开发者可以在自己的项目中调用FFmpeg的功能。比如`libavcodec/avcodec.h`、`libavformat/avformat.h`等,这些都是开发音视频...

    ffmpeg基础开发资料自总结

    4.11 AVPacket 结 构体 67 4.12 AVPacketList 结 构体 67 4.13 AVFrame 结构体 53 第五章 重要模块 68 5.1 libavutil 公共模块 68 1 文件列表 68 2 common.h 文件 68 3 bswap.h 文件 70 4 rational.h 文件 71 5 ...

    QT FFMPEG播放H264

    这里的关键是使用FFmpeg的AVFormatContext、AVPacket和AVFrame等结构体来处理视频流。首先,初始化AVFormatContext并调用avformat_open_input()打开我们的数据源。接着,调用avformat_find_stream_info()来探测流...

    FFmpeg:YUV转H264,(内存中)H264保存flv

    你需要创建一个`AVFormatContext`,`AVStream`,`AVPacket`等结构体,然后按照FFmpeg的流程进行处理。 在处理车牌识别一体机的数据时,可能需要对接其提供的SDK。这通常涉及到注册设备、接收实时视频流、调用SDK...

    iOS平台,一个用ffmpeg开发的播放器

    4. **音视频同步**:播放器需要保持音频和视频的同步,可以使用`AVPacket`和`AVFrame`结构体,结合`av_interleaved_write_frame`或`avcodec_send_packet`进行数据传输。 5. **解码**:通过`avcodec_decode_audio4`...

    FFMPEG实现RTSP中数据流解码 并且实时播放

    1. 初始化FFmpeg上下文:首先,我们需要创建一个`AVFormatContext`结构体实例,它是FFmpeg中的核心上下文,用于存储与输入或输出文件相关的信息。通过调用`avformat_open_input()`函数打开RTSP流,并使用`avformat_...

    Understanding FFmpeg with source code FFMPEG Fundementals.7z

    数据结构:介绍了FFmpeg中的关键数据结构,如AVFormatContext、AVStream、AVCodecContext、AVPacket、AVIOContext等,这些结构体用于描述多媒体文件、媒体流、编解码器上下文、数据包和I/O操作。 时间信息:讨论了...

    ffmpeg使用教程及VC可编译代码

    3. **解析流信息**:遍历`AVFormatContext`结构体中的`streams`数组,根据不同的流类型(音频、视频)找到对应的解码器。 4. **分配解码器上下文**:使用`avcodec_alloc_context3()`为每个流分配解码器上下文,并...

    FFmpeg_C#_Demo_vs2017.zip

    3. **数据读取**:使用AVPacket结构体接收来自RTSP服务器的数据包,并将其解码成原始音频或视频帧。 4. **解码**:使用libavcodec库进行音频和视频的解码操作,将编码后的数据转换为可播放的原始格式。 5. **视频...

    FFMPEG中文基础教程

    2. **FFmpeg关键结构体分析** - **解协议**:`AVIOControl`、`URLProtocol`和`URLContext`用于处理各种输入输出协议,如HTTP、RTSP、RTMP和MMS。`URLProtocol`定义了特定协议的处理函数,而`URLContext`则存储了与...

    FFMpeg SDK 开发手册(中文)

    6. AVPacket:这个结构体代表了一段压缩数据,比如压缩视频中的一个视频帧或音频帧。 7. AVPicture:这个结构体用于描述视频图像,它定义了像素数据的格式和地址。 8. AVStream:代表媒体流中的单个数据流(音频、...

Global site tag (gtag.js) - Google Analytics