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

  • 数据存储字段:
  • 时间信息字段:
相关推荐
CSharp精选营21 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境2 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴3 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
Mahut4 天前
我用 Electron + FFmpeg 做了一个本地视频处理工作站 ClipForge
前端·ffmpeg·electron
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠5 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
卷无止境5 天前
C++ 的Eigen 库全解析
c++