首先从ffmpeg最顶端的一个结构体说起
AVFormatContext
AVFormatContext是API中直接接触到的结构体,位于avformat.h中,结构体描述了一个多媒体文件或流的构成和基本信息。,是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。
头文件
https://github.com/FFmpeg/FFmpeg/blob/release/6.1/libavformat/avformat.h
关键字段
-
iformat:输入封装格式。仅用于demu,由avformat_open_input() -
oformat:输出封装格式。仅用于复用,必须在avformat_write_header()由调用者设置 -
priv_data:格式私有数据。这是一个启用了AV选项的结构。仅当iformat/oformat.priv_class不为NULL时设置。
- 复用:由avformat_write_header()设置
- 解复用:由avformat_open_input()设置
AVIOContext:I/O上下文。后续会详细讲解这个结构
- 解复用:可以由用户在avformat_open_input()之前设置(然后
用户必须手动关闭它),或者由avformat_open_input()设置。 - 复用:在avformat_write_header()之前由用户设置。调用者必须
负责关闭/释放I/O上下文。
如果iformat/oformat.flags中设置了AVFMT_NOFILE标志,则不要设置这个字段。在这种情况下,(解)复用器将以其他方式处理(libdevice中的muxers和demuxers都是AVFMT_NOFILE类型的,因为他的输入和输出一般都是特定的设备确定的,所以在这种情况下,请将该字段置为空)
-
ctx_flags:标志,表示流属性。AVFMTCTX_*的组合。一般在read_header中设置-
AVFMTCTX_NOHEADER 表示不存在header(流是动态添加的)
-
AVFMTCTX_UNSEEKABLE 表示流绝对不可定位,尝试调用seek函数将失败。
-
-
nb_streams:流数量。AVFormatContext.streams中元素的数量,由avformat_new_stream()设置 -
streams:文件中所有流的列表。新流通过avformat_new_stream()创建,如果是复用,则复用,则流在avformat_write_header()之前由

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

被折叠的 条评论
为什么被折叠?



