FFmpeg的打印日志实现在FFmpeg-n4.2.1/libavutil/log.c中。
一、设置log等级
1、设置日志级别
日志默认级别是AV_LOG_INFO
static int av_log_level = AV_LOG_INFO;
使用av_log_set_level将日志级别设置为调试级别(AV_LOG_DEBUG)
av_log_set_level(AV_LOG_DEBUG);
源码:
void av_log_set_level(int level){
av_log_level = level;
}
2、日志级别列表
#define AV_LOG_QUIET -8 保持沉默,不输出
#define AV_LOG_PANIC 0 确实出了问题,即将崩溃。
#define AV_LOG_FATAL 8 有些地方出了问题,并且不可能修复
#define AV_LOG_ERROR 16 有些地方出了问题,不能毫无损失地恢复。
#define AV_LOG_WARNING 24 有些东西看起来不太对,有可能出问题
#define AV_LOG_INFO 32 标准信息。
#define AV_LOG_VERBOSE 40 详细的信息。
#define AV_LOG_DEBUG 48 调试信息,只对libav*开发者有用的东西。
#define AV_LOG_TRACE 56 非常冗长的调试信息,对libav*开发非常有用。
二、打印函数分析
例如下面的打印信息:
[mpegts @ 0x7f92cc002f00] Format mpegts probed with size=2048 and score=50
这个信息由下面的函数打印:
av_log(logctx, AV_LOG_DEBUG, "Format %s probed with size=%d and score=%d\n", (*fmt)->name, probe_size, score);
av_log 调用 av_vlog:
void av_log(void* avcl, int level, const char *fmt, ...){
va_list vl;
va_start(vl, fmt);
av_vlog(avcl, level, fmt, vl);
va_end(vl);
}
av_vlog则调用默认注册的回调函数av_log_default_callback
void av_vlog(void* avcl, int level, const char *fmt, va_list vl){
void (*log_callback)(void*, int, const char*, va_list) = av_log_callback;
if (log_callback)
log_callback(avcl, level, fmt, vl);
}
static void (*av_log_callback)(void*, int, const char*, va_list)
= av_log_default_callback;
av_log_default_callback函数伪代码
void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl){
if (level > av_log_level) return; "控制打印级别"
format_line(...); "格式化输出"
colored_fputs(...);"设置终端字体颜色:\033[字背景颜色;字体颜色m字符串\033[0m"
}
分类:
ffmpeg、ffplay
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-11-18 linux添加service服务,设置自启
2020-11-18 [Linux]服务管理:service、systemctl、chkconfig
2020-11-18 详解Linux 服务管理两种方式service和systemctl
2020-11-18 linux 将自己的服务添加到系统service服务
2017-11-18 UCRT: VC 2015 Universal CRT, by Microsoft
2017-11-18 vs2015部署---下一代VC运行时库系统:the Universal CRT
2017-11-18 VS2015开发的C++应用如何不依赖Visual C++ 2015 redistributable?