FFmpeg的Android打印

本文介绍了在Android平台上使用FFmpeg进行日志调试的过程及遇到的问题。通过修改av_vlog函数来实现更详细的日志信息输出,并最终通过替换av_log宏实现了函数名、文件名和行号的有效打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FFmpeg加入android打印

  • 传入log callbakc打印的都是这个函数的函数名,无法定位问题。
  • 研究了libavutil/log.c,发现可以在av_vlog里加入一行,专门用于打印。

1 log_callback_ffmpeg 传递给ffmpeg打印

  • 这种打印的结果是函数名都是log_callback_ffmpeg
static void log_callback_ffmpeg(void *ptr, int level,
                                const char *fmt, va_list vargs)
{
    int level_setting = av_log_get_level();   

    if (level == AV_LOG_DEBUG) {
        slogd("%s", logStr);
    } else if (level == AV_LOG_INFO) {
        slogi("%s", logStr);
    } else if (level == AV_LOG_WARNING) {
        slogw("%s", logStr);
    } else if (level <= AV_LOG_ERROR) {
        sloge("%s", logStr);
    }
}

2 av_vlog 加入一行打印函数名

    SCLOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
  • 其中,SCLOGD的声明为:
#define SCLOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "scff", __VA_ARGS__)
  • 注意,上面才是正确使用__android_log_print的方法

-结果是,这样也不行,打印的是av_vlog所在文件名、行号和函数名。

3 头文件

#pragma once

/** ANDROID */
#if defined(__ANDROID__)
#include <android/log.h>
这里加入你的代码
#endif

不需要再libavutil/Makefile中加入LDFALGS += llog

4 只好直接替换av_log了

  • 参考[http://m.blog.youkuaiyun.com/article/details?id=50562024]
  • 重新编译好麻烦啊,我这里是avfilter、avformat、 avcodec、avresample、 postproc、swscale、avutil、avdevice,几乎到了最后才能编译到log.c.
  • static const char *get_level_str(int level)
    {
    switch (level) {
    case AV_LOG_QUIET:
        return "quiet";
    case AV_LOG_DEBUG:
        return "debug";
    case AV_LOG_VERBOSE:
        return "verbose";
    case AV_LOG_INFO:
        return "info";
    case AV_LOG_WARNING:
        return "warning";
    case AV_LOG_ERROR:
        return "error";
    case AV_LOG_FATAL:
        return "fatal";
    case AV_LOG_PANIC:
        return "panic";
    default:
        return "";
    }
    }
    • 采用如下替换打印:
 int get_droid_level(int level);
#define av_log(avcl, level, fmt, ...)  __android_log_print(get_droid_level(level), "ZBFFmpeg", "[%s_%d_%s]"fmt,__FILE__,__LINE__,__FUNCTION__,##__VA_ARGS__)

成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值