FFmpeg的日志函数av_log
  1bTlX33AWdQ4 2023年11月02日 55 0

FFmpeg 项目里面 输出日志信息的函数是 ​​av_log​​​,使用 ​​av_log​​​ 函数可以在二次开发的时候,比较方便地做一些跟踪跟记录,可以把 ​​av_log​​​ 作为 ​​printf​​ 函数的替代品。

​av_log​​ 函数的定义如下:

/**
* Send the specified message to the log if the level is less than or equal
* to the current av_log_level. By default, all logging messages are sent to
* stderr. This behavior can be altered by setting a different logging callback
* function.
* @see av_log_set_callback
*
* @param avcl A pointer to an arbitrary struct of which the first field is a
* pointer to an AVClass struct or NULL if general log.
* @param level The importance level of the message expressed using a @ref
* lavu_log_constants "Logging Constant".
* @param fmt The format string (printf-compatible) that specifies how
* subsequent arguments are converted to output.
*/
void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);

​av_log​​ 函数的参数如下:

1,​void *avcl​​​,这个指针会强制转成 ​​AVClass *​​​ ,如果提供了,就会把 ​​AVClass​​ 的信息也保存到日志,通常传 NULL 即可。

2,​int level​​,设置此日志的级别,只要比 ​​av_log_level​​​ 小,​​av_log()​​​ 函数就会把这个日志输出到控制台。 ​​av_log_level​​​ 是一个全局变量。默认是 ​​AV_LOG_INFO​​,

3,​const char *fmt​​​ 跟 ​​...​​​,这两个参数实际上就跟 ​​printf()​​ 函数的用法类似,是可变参数。


FFmpeg 的日志一共有 9 个级别,定义在 ​​libavutil/log.h​​ 里面,如下:

#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
#define AV_LOG_TRACE 56
#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET)


下面就来演示一下,如何使用 ​​av_log​​​ 这个函数,代码下载地址:​​GitHub​​,编译环境是 Qt 5.15.2 跟 MSVC2019_64bit 。

FFmpeg的日志函数av_log_日志

可以看到,日志默认是输出到 控制台里面的。


但是有一些场景,可能需要我们把日志保存到文件,或者保存到数据库,或者通过网络保存到日志服务器里面,这时候怎么做呢?

答:可以使用 ​​av_log_set_callback​​ 函数来自定义,代码如下:

FFmpeg的日志函数av_log_日志_02

可以看到,我定义了一个回调,来接受参数,然后打印到控制台,可以在这里输出到对应的日志文件,为了偷懒,我没操作文件打开写入。只是简单 ​​printf​​ 一下。

扩展知识:​​AVBPrint​​​ 跟 ​​va_list​​​ 是 FFmpeg 自己的结构,源码有注释,对着抄就行。推荐阅读​​《深入理解FFmpeg AVBPrint》​

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  utcwpaXdbjbR   2023年11月02日   44   0   0 html选择器ffmpeg
1bTlX33AWdQ4