news 2026/10/31 11:01:07

Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)

简介:CSDN博客专家、《Android系统多媒体进阶实战》作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏地址:Audio工程师进阶系列【原创干货持续更新中……】🚀
Android多媒体专栏地址:多媒体系统工程师系列【原创干货持续更新中……】🚀
专题一 二:AAOS车载系统+AOSP14系统攻城狮入门视频实战课🚀
专题三:Android14 Binder之HIDL与AIDL通信实战课🚀
专题四:Android15快速自定义与集成音效实战课🚀
专题五:Android15音频策略实战课🚀
专题六:Android15音频性能实战课(无声/杂音/断音/爆音实战案例)🚀

人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

点击获取二维码


🍉🍉🍉文章目录🍉🍉🍉

      • 🌻1.前言
      • 🌻2.应用场景和用法
        • 2.1查看容器和流信息
        • 2.2函数原型与参数
      • 🌻3.调用流程剖析
        • 3.1从格式上下文读取信息
        • 3.2它不负责探测或校验媒体
      • 🌻4.实战案例
        • 4.1打开输入并探测流信息
        • 4.2打印输入格式摘要
        • 4.3完整代码
      • 🌻5.总结

🌻1.前言

本篇目的:理解av_dump_format()如何读取AVFormatContext中的容器、流和元数据信息,并通过FFmpeg输入流程观察它输出的格式摘要。

打开媒体文件并获取流信息后,程序通常需要确认输入容器、时长、码率和各路音视频参数。av_dump_format()把这些信息写入FFmpeg日志,便于开发者检查探测结果。它只负责打印,不负责探测媒体、解码数据或改变流参数。

输入媒体文件

AVFormatContext

探测容器和流信息

av_dump_format

FFmpeg日志中的格式摘要

🌻2.应用场景和用法

2.1查看容器和流信息

av_dump_format()适合放在输入探测或输出封装配置之后,用来检查FFmpeg当前掌握的格式信息。

场景调用时机观察内容
输入文件探测avformat_find_stream_info()成功后输入格式、时长、码率和流参数
多轨媒体分析流信息探测后音视频流编号、编码类型和时间基
输出封装检查输出流和封装器配置完成后输出格式及输出流参数
定位媒体信息异常打开文件或协商参数后上下文中实际存在的信息是否符合预期

函数将摘要写入FFmpeg日志系统,常见级别为AV_LOG_INFO。日志级别或回调配置会影响信息是否显示。

2.2函数原型与参数
voidav_dump_format(AVFormatContext*ic,intindex,constchar*url,intis_output);
参数含义
ic已填充输入或输出信息的AVFormatContext
index日志中显示的文件或输出上下文编号
url输出摘要中显示的媒体地址或文件名
is_output为0表示输入,为非0表示输出

函数没有返回值,也不接管AVFormatContext的所有权。输入场景需要先打开媒体并探测流信息;输出场景应在输出格式和流信息已经准备后调用。它与相邻接口的分工如下:

接口职责
avformat_open_input()打开输入并识别输入格式
avformat_find_stream_info()读取数据以补充流信息
av_dump_format()把当前上下文中的格式信息写入日志
avformat_close_input()关闭输入并释放输入上下文

🌻3.调用流程剖析

3.1从格式上下文读取信息

av_dump_format()根据is_output选择上下文中的输入格式或输出格式名称,再通过av_log()打印文件方向、编号和URL。

输入场景会额外打印时长、起始时间和码率。函数随后遍历章节、节目和普通流,并调用内部的流格式输出逻辑整理各流信息。输出摘要来自当前AVFormatContext及其关联的流参数,因此调用时机很重要:如果流探测尚未完成,摘要中就可能缺少信息。

传入格式上下文和方向

选择输入或输出格式

打印文件与容器信息

遍历章节和节目

逐流整理编码与时间基

通过av_log输出摘要

3.2它不负责探测或校验媒体

av_dump_format()只根据传入上下文中已有的数据生成日志。它不会调用输入探测过程,也不会判断媒体能否完整解码,更不会保证日志显示的参数一定符合应用预期。

排查时应先确认avformat_open_input()和avformat_find_stream_info()的返回值,再观察摘要。如果输入信息未探测完成,优先检查探测流程;如果摘要内容与预期不同,则检查输入文件、流选择和上下文状态。

🌻4.实战案例

4.1打开输入并探测流信息

示例接收媒体路径作为命令行参数。调用av_dump_format()前,先通过avformat_open_input()打开文件,再通过avformat_find_stream_info()补充流信息。

4.2打印输入格式摘要

探测成功后,将输入上下文、文件编号、媒体路径和输入方向传给av_dump_format()。示例使用avformat_close_input()释放输入上下文。

4.3完整代码
#include<libavformat/avformat.h>#include<stdio.h>intmain(intargc,char*argv[]){AVFormatContext*format_context=NULL;intret;if(argc<2){fprintf(stderr,"请提供媒体文件路径\n");return1;}/* 打开输入文件并读取容器信息 */ret=avformat_open_input(&format_context,argv[1],NULL,NULL);if(ret<0){fprintf(stderr,"无法打开输入文件\n");return1;}/* 探测音视频流参数,再打印完整摘要 */ret=avformat_find_stream_info(format_context,NULL);if(ret<0){fprintf(stderr,"无法获取流信息\n");avformat_close_input(&format_context);return1;}/* is_output为0,表示当前上下文用于输入 */av_dump_format(format_context,0,argv[1],0);/* 释放输入上下文及其关联资源 */avformat_close_input(&format_context);return0;}

🌻5.总结

av_dump_format()根据AVFormatContext当前已有的输入或输出信息生成格式摘要日志,不负责打开媒体、探测流或解码数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 10:58:37

【Python毕业设计】Django+Vue+MySQL基于HTML5的旅游网站的设计与实现|旅游信息管理系统、景点管理与旅游攻略分享平台(功能演示+核心代码)【计算机毕业设计课程设计】

本系统以旅游信息展示和旅行经验分享为应用场景&#xff0c;采用 Python Django Vue MySQL 开发&#xff0c;覆盖前台用户端和后台管理端。用户端已实现用户注册登录、个人资料管理、景点分类与关键词查询、景点详情阅读、旅游攻略浏览与发布、收藏点赞评论、社区发帖与交流…

作者头像 李华
网站建设 2026/10/31 10:57:19

机房综合布线怎么做标签管理(TIA-606 标准 + Excel 台账模板)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/31 10:56:35

MySQL 锁机制详解|表锁、行锁、意向锁,死锁成因与解决方案

前言MySQL 锁是并发场景下数据库控制资源竞争的核心机制。很多开发写 SQL 的时候&#xff0c;经常遇到事务卡住、更新超时、死锁报错&#xff0c;但是不知道根源是锁。 很多人混淆 MyISAM 和 InnoDB 锁差异&#xff0c;分不清行锁、表锁、意向锁&#xff0c;尤其对临键锁&#…

作者头像 李华