AVFormatContext 解析
AVFormatContext 是一个结构体
//用于日志记录和 avoptions类的引用。由avformat_alloc_context () 赋值。导出(de)muxer私有选项(如果存在的话)。
const AVClass *av_class;
//输入容器的格式,只有在解封装的时候,由avformat_open_input() 函数赋值
ff_const59 struct AVInputFormat *iformat;
//输入容器的格式,只有在加封装的时候,必须由调用者在avformat_write_header()之前设置。
ff_const59 struct AVOutputFormat *oformat;
//AVFormatContext.streams中的元素数量。由avformat_new_stream()设置,不能被任何其他代码修改。
unsigned int nb_streams;
//文件中所有流的列表。使用avformat_new_stream()创建新流。
//解封装:流是由avformat_open_input()中的libavformat创建的。如果在ctx_flags中设置了AVFMTCTX_NOHEADER,那么新的流也可能出现在av_read_frame()中。
//加封装:流是由用户在avformat_write_header()之前创建的。
AVStream **streams;
//输入或输出的文件名
//解封装:由函数avformat_open_input()赋值
//封装:由用户在avformat_write_header()之前创建的。
//@deprecated 已使用url代替
char filename[1024];
//输入或输出的url,不像旧版的filename字段,它没有长度限制。
//解封装:由avformat_open_input函数赋值,如果url参数为空的情况下,赋值一个空字符串。
//加封装:可以由调用者在调用avformat_write_header()(或avformat_init_output()(如果先调用它)到av_free()可释放的字符串之前进行设置。如果avformat_init_output()中的字符串为空,则将其设置为空字符串。
//由libavformat 模块中的avformat_free_context()函数释放
char *url;
//第一个数据帧的开始时间,单位为AV_TIME_BASE,不要直接设置该值,它是由AVSTREAM值推导出来。
//只在解封装的时候有意义,由libavformat模块赋值
int64_t start_time;
//数据流的时长,单位为AV_TIME_BASE,只有在您不知道单个流持续时间的情况下才设置此值,否则不要设置该值。这是从AVStream值推导出来的,如果没有设置。
//只在解封装的时候有意义,由libavformat模块赋值
int64_t duration;
//总流比特率,以比特/秒为单位,如果不可用,则为0。如果file_size和持续时间是FFmpeg可以自动计算的,就不要直接设置它。
int64_t bit_rate;
unsigned int packet_size;
int max_delay;
//强制视频编解码器id,解封装的时候由用户设置
enum AVCodecID video_codec_id;
AVCodec *video_codec;
//强制音频编解码id,解封装的时候由用户设置
enum AVCodecID audio_codec_id;
AVCodec *audio_codec;
//强制字幕编解码id,解封装的时候由用户设置
enum AVCodecID subtitle_codec_id;
AVCodec *subtitle_codec;
//应用于整个文件的元数据
//解封装的时候,由libavformat模块的avformat_open_input函数赋值
//加封装的时候,需在用户调用avformat_write_header()函数前赋值
//由libavformat模块在avformat_free_context()中释放
AVDictionary *metadata;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术