当前位置: 首页 > news >正文

FFmpeg中相关结构体介绍

AVFormatContext:此结构体存储音视频封装格式中包含的信息,并且这个结构体是贯穿整个播放流程的。在这个结构体中主要包含AVInputFormat,AVOutputFormat、AVStream等。

struct AVInputFormat *iformat; // 输入数据的封装格式
AVIOContext *pb; // 输入数据的缓存
unsigned int nb_streams; // 音视频流的个数
AVStream **streams; // 音视频流
char filename[1024]; // 文件名
int64_t duration; // 时长(单位:微秒us,转换为秒需要除以1000000)
int bit_rate; // 比特率(单位bps,转换为kbps需要除以1000)
AVDictionary *metadata; // 元数据

**AVCodecContext:**是一个描述编解码器上下文的结构体,包含了众多编解码器需要的参数信息。

enum AVMediaType codec_type; // 编解码器的类型(视频,音频...)
struct AVCodec  *codec; // 采用的解码器AVCodec(H.264,MPEG2...)
int bit_rate; // 平均比特率
uint8_t *extradata; int extradata_size; // 针对特定编码器包含的附加信息(例如对于H.264解码器来说,存储SPS,PPS等)
AVRational time_base; // 根据该参数,可以把PTS转化为实际的时间(单位为秒s)
int width, height; // 如果是视频的话,代表宽和高
int refs; // 运动估计参考帧的个数(H.264的话会有多帧,MPEG2这类的一般就没有了)
int sample_rate; // 采样率(音频)
int channels; // 声道数(音频)
enum AVSampleFormat sample_fmt; // 采样格式
int profile; // 型(H.264里面就有,其他编码标准应该也有)
int level; // 级(和profile差不太多)

AVCodec:是存储编码器信息的结构体。

const char *name; // 编解码器的名字的简称
const char *long_name; // 编解码器名字的全称
enum AVMediaType type; // 指明了类型,是视频,音频,还是字幕
enum AVCodecID id; // ID,不重复
const AVRational *supported_framerates; // 支持的帧率(仅视频)
const enum AVPixelFormat *pix_fmts; // 支持的像素格式(仅视频),如RGB24、YUV420P等。
const int *supported_samplerates; // 支持的采样率(仅音频)
const enum AVSampleFormat *sample_fmts; // 支持的采样格式(仅音频)
const uint64_t *channel_layouts; // 支持的声道数(仅音频)
int priv_data_size; // 私有数据的大小

AVFrame:该结构描述解码的(原始的)音频或视频数据。AVFrame必须使用av_frame_alloc()进行分配。请注意,这只是分配AVFrame本身,必须管理数据的缓冲区通过其他方式。AVFrame必须使用av_frame_free()释放。


AVPacket:是存储压缩编码数据相关信息的结构体。

uint8_t *data; // 压缩编码的数据。
/* 例如对于H.264来说。1个AVPacket的data通常对应一个NAL。注意:在这里只是对应,而不是一模一样。他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码流。因此在使用FFMPEG进行音视频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到音视频的码流文件。*/
int   size; // data的大小
int64_t pts; // 显示时间戳
int64_t dts; // 解码时间戳
int   stream_index; // 标识该AVPacket所属的视频/音频流。
http://www.lryc.cn/news/114716.html

相关文章:

  • Llama 2 云端部署与API调用【AWS SageMaker】
  • 根文件系统制作
  • Linux ARM64架构 动态替换 altinstructions
  • Mac显示隐藏文件夹
  • 使用 Habana Gaudi2 加速视觉语言模型 BridgeTower
  • mysql查询语句之实践篇
  • Linux 和 MacOS 中的 profile 文件详解(二)
  • Python之多重继承
  • 前端CSS文字阴影text-shadow记录
  • maven 删除下载失败的包
  • 《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下
  • 网络安全进阶学习第十二课——SQL手工注入3(Access数据库)
  • Zookeeper集群+Kafka集群
  • 管理类联考——逻辑——论证逻辑——汇总篇——目录+提炼
  • 用excel格式书写的接口用例执行脚本
  • 【flink】Chunk splitting has encountered exception
  • 单元测试用例分组 demo
  • 观察者模式(Observer)
  • 20天学会rust(二)rust的基础语法篇
  • Stephen Wolfram:嵌入的概念
  • springboot,swagger多个mapper包,多个controller加载问题
  • 湖大CG满分教程:作业训练四编程题20. 回文串(暴力×动态规划算法√)
  • 使用toad库进行机器学习评分卡全流程
  • Python数据容器——列表(list)
  • Linux CEF(Chromium Embedded Framework)源码下载编译详细记录
  • Adaptive AUTOSAR—— Communication Management 3.1
  • VMnet0 桥接设置
  • Sublime Text 4 Build 4151 4152 发布及注册方法
  • 第八篇: K8S Prometheus Operator实现Ceph集群企业微信机器人告警
  • 软件单元测试