FFmpeg 基本数据结构 AVPacket分析

1、AVPacket 说明

AVPacket 是 FFmpeg 多媒体框架中承载压缩编码数据的核心容器,作为编解码器与解复用器/复用器之间的数据传输单元,它在多媒体处理流水线中扮演着至关重要的角色。

AVPacket 是 FFmpeg 中用于存储压缩后的编码数据(Encoded Data)的结构体。 它是多媒体处理流水线中解复用器(Demuxer)的输出和解码器(Decoder)的输入。

简单来说:

  • AVFrame 存储的是未压缩的原始数据(一张图片的像素、一段音频的采样)。
  • AVPacket 存储的是压缩后的编码数据(一帧 H.264 数据、一段 AAC 数据)

AVPacket 的核心作用:

  1. 数据容器:承载压缩编码数据(视频帧/音频帧)
  2. 时间载体:精确传递 PTS/DTS 时间信息
  3. 流关联器:通过 stream_index 绑定媒体流
  4. 元数据载体:传输 SEI 信息、加密数据等附加内容
  5. 流水线枢纽:连接解复用、解码、编码、复用各模块

2、AVPacket 具体成员定义

cpp 复制代码
typedef struct AVPacket {
    AVBufferRef *buf; // 指向一个AVBufferRef结构的指针,用于存储数据
    int64_t pts; // 显示时间戳
    int64_t dts; // 解码时间戳
    uint8_t *data; // 指向数据的指针
    int   size; // 数据大小
    int   stream_index; // 流索引
    int   flags; // 标志
    AVPacketSideData *side_data; // 指向AVPacketSideData结构的指针,用于存储侧数据
    int side_data_elems; // 侧数据元素数量
    int64_t duration; // 持续时间
    int64_t pos; // 文件位置
    void *opaque; // 透明数据
    AVBufferRef *opaque_ref; // 指向一个AVBufferRef结构的指针,用于存储透明数据
    AVRational time_base; // 时间基准
} AVPacket;

各个成员的含义如下:

  • buf: 一个指向AVBufferRef结构的指针,用于存储数据。
  • pts: 一个int64_t类型的整数,表示显示时间戳。
  • dts: 一个int64_t类型的整数,表示解码时间戳。
  • data: 一个uint8_t类型的指针,指向数据。
  • size: 一个整数,表示数据大小。
  • stream_index: 一个整数,表示流索引。
  • flags: 一个整数,表示标志。
  • side_data: 一个指向AVPacketSideData结构的指针,用于存储侧数据。
  • side_data_elems: 一个整数,表示侧数据元素数量。
  • duration: 一个int64_t类型的整数,表示持续时间。
  • pos: 一个int64_t类型的整数,表示文件位置。
  • opaque: 一个void类型的指针,表示透明数据。
  • opaque_ref: 一个指向AVBufferRef结构的指针,用于存储透明数据。
  • time_base: 一个AVRational结构体,表示时间基准。

3、AVPacket 核心组件解析

  • 数据存储字段:
  • 时间信息字段:
相关推荐
ChoSeitaku1 小时前
NO15数据结构选择题考点|线性表|栈和队列|串
数据结构
hetao17338372 小时前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
椰子今天很可爱2 小时前
五种I/O模型与多路转接
linux·c语言·c++
一直都在5722 小时前
数据结构入门:时间复杂度与排序和查找
数据结构
程序员zgh3 小时前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
八月的雨季 最後的冰吻3 小时前
FFmepg-- 32-ffplay源码- PacketQueue 的线程安全机制 以及 serial 字段的作用
安全·ffmpeg
sin_hielo4 小时前
leetcode 2110
数据结构·算法·leetcode
panzer_maus5 小时前
归并排序的简单介绍
java·数据结构·算法
獭.獭.5 小时前
C++ -- STL【unordered_set和unordered_map的使用】
c++·stl·unordered_map·unordered_set
摆烂且佛系5 小时前
B+树的“页分裂“机制
数据结构·b树