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

  • 数据存储字段:
  • 时间信息字段:
相关推荐
智塑未来19 小时前
AI视频翻译配音工具怎么选?5款工具的链路覆盖对比
人工智能·音视频
H.莓飛19 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
码少女20 小时前
数据结构——B+树基础
数据结构·b树
青少儿编程课堂21 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
做萤石二次开发的哈哈21 小时前
商场分区广播怎么开发?商用音频主机四大技能与音频文件管理实践
音视频·蓝海aiot一站式工作台·公共广播·智慧广播·萤石云开放平台·商用音频主机·矩阵路由
多弗朗皮卡丘1 天前
C++STL之空间配置器
开发语言·c++·内存池·空间配置器
牵猫散步的鱼儿1 天前
Demosaic 和 Remosaic
c++
CodeYp20191 天前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树
音视频牛哥1 天前
大牛直播SDK(SmartMediaKit)iOS平台Unity3D RTSP/RTMP播放器集成实践
音视频·unity3d·ios rtmp播放器·ios rtsp播放器·ios unity3d播放器·ios unity rtsp·ios unity rtmp
美狐美颜SDK开放平台1 天前
视频美颜SDK如何应对快速转头与大幅度面部动作?
android·人工智能·ios·音视频·直播美颜sdk·视频美颜sdk