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

  • 数据存储字段:
  • 时间信息字段:
相关推荐
jllllyuz27 分钟前
MATLAB 蒙特卡洛排队等待模拟程序
数据结构·matlab
自我意识的多元宇宙39 分钟前
树、森林——树、森林与二叉树的转换(森林转换为二叉树)
数据结构
海清河晏1111 小时前
数据结构 | 双循环链表
数据结构·链表
py有趣1 小时前
力扣热门100题之编辑距离
数据结构·算法·leetcode
Wave8451 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H1 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
不想写代码的星星2 小时前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz2 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz2 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
minji...2 小时前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++