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 核心组件解析

  • 数据存储字段:
  • 时间信息字段:
相关推荐
仙俊红1 小时前
LeetCode487周赛T2,删除子数组后的最终元素
数据结构·算法
-dzk-7 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
m0_706653238 小时前
C++编译期数组操作
开发语言·c++·算法
qq_423233908 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575349 小时前
分布式任务调度系统
开发语言·c++·算法
CSDN_RTKLIB9 小时前
简化版unique_ptr说明其本质
c++
naruto_lnq9 小时前
泛型编程与STL设计思想
开发语言·c++·算法
m0_7487080510 小时前
C++中的观察者模式实战
开发语言·c++·算法
愚公搬代码10 小时前
【愚公系列】《AI短视频创作一本通》004-AI短视频的准备工作(创作AI短视频的基本流程)
人工智能·音视频
时光找茬10 小时前
【瑞萨AI挑战赛-FPB-RA6E2】+ 从零开始:FPB-RA6E2 开箱测评与 e2 studio 环境配置
c++·单片机·边缘计算