FFmpeg开启log的方法

 

ffmpeg的log输出方式

这里log的输出方式主要分为2种:

1.在默认回调函数,从控制台直接输出

2.通过设置自定义回调函数,自定义输出的(可以写log文件等)

备注(默认是控制台输出的,它和设置回调函数自定义只能2选1),通过如下log.c文件代码可以理解:

static void (*av_log_callback)(void*, int, const char*, va_list) =
    av_log_default_callback;

默认走的缺省回调函数, void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) 就是做一些数据格式化,控制台颜色设置,控制台输出能等
 


一、默认回调函数av_log_default_callback

默认的log输出等级:  static int av_log_level = AV_LOG_INFO;

通过函数av_log_set_level(AV_LOG_INFO)设置; 

level 值:  AV_LOG_QUIET、AV_LOG_PANIC、AV_LOG_FATAL、AV_LOG_ERROR、AV_LOG_WARNING、AV_LOG_INFO、AV_LOG_VERBOSE、AV_LOG_DEBUG、AV_LOG_TRACE

越设置后面的值,输出到控制台的log越详细,方便开发调试 例如设置为: AV_LOG_TRACE

 

下面这行代码是控制过滤重复日志,其中的flags是通过av_log_set_flags(AV_LOG_SKIP_REPEATED)函数设置的

if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strcmp(line, prev) &&
        *line && line[strlen(line) - 1] != '\r'){
        count++;
        if (is_atty == 1)
            fprintf(stderr, "    Last message repeated %d times\r", count);
        goto end;
    }

二、自定义的回调函数

1.自定义的回调函数定义

代码如下:

void av_log_my_callback(void* ptr, int level, const char* fmt, va_list vl)
{

      FILE *fp = fopen("my_log.txt", "a+");    //这里是自定义做的事情,可以写文件操作,写数据库等
      if (fp) {
                       vfprintf(fp, fmt, vl);
                       fflush(fp);
                       fclose(fp);
       }

}

通过 av_log_set_callback(av_log_my_callback),使用自定义的log输出方式。av_log()方法的日志,都会进入此回调函数。


总结

默认回调方式是受av_log_set_level 的等级控制的,自定义的方式则需要自己去做相应的处理。做个判断也行,如下这样:

if (level > av_log_level)
        return;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值