FFmpeg源码解析系列(三)结构体之AVFormatContext

本文详细解读了FFmpeg中的基础结构体AVFormatContext,包括其关键字段如iformat,oformat,priv_data等,以及与之相关的I/O上下文、流处理、复用和解复用机制,以及一些常用标志的含义和应用场景。

首先从ffmpeg最顶端的一个结构体说起
AVFormatContext
AVFormatContext是API中直接接触到的结构体,位于avformat.h中,结构体描述了一个多媒体文件或流的构成和基本信息。,是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。

头文件

https://github.com/FFmpeg/FFmpeg/blob/release/6.1/libavformat/avformat.h

关键字段

  1. iformat:输入封装格式。仅用于demu,由avformat_open_input()

  2. oformat:输出封装格式。仅用于复用,必须在avformat_write_header()由调用者设置

  3. priv_data:格式私有数据。这是一个启用了AV选项的结构。仅当iformat/oformat.priv_class不为NULL时设置。

  • 复用:由avformat_write_header()设置
  • 解复用:由avformat_open_input()设置
  1. AVIOContext:I/O上下文。后续会详细讲解这个结构
  • 解复用:可以由用户在avformat_open_input()之前设置(然后
    用户必须手动关闭它),或者由avformat_open_input()设置。
  • 复用:在avformat_write_header()之前由用户设置。调用者必须
    负责关闭/释放I/O上下文。
    如果iformat/oformat.flags中设置了AVFMT_NOFILE标志,则不要设置这个字段。在这种情况下,(解)复用器将以其他方式处理(libdevice中的muxers和demuxers都是AVFMT_NOFILE类型的,因为他的输入和输出一般都是特定的设备确定的,所以在这种情况下,请将该字段置为空)
  1. ctx_flags:标志,表示流属性。AVFMTCTX_*的组合。一般在read_header中设置

    • AVFMTCTX_NOHEADER 表示不存在header(流是动态添加的)

    • AVFMTCTX_UNSEEKABLE 表示流绝对不可定位,尝试调用seek函数将失败。

  2. nb_streams:流数量。AVFormatContext.streams中元素的数量,由avformat_new_stream()设置

  3. streams:文件中所有流的列表。新流通过avformat_new_stream()创建,如果是复用,则复用,则流在avformat_write_header()之前由

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值