FFmpeg日志输出到adb logcat

来源:互联网 发布:知乎笑笑五五开 编辑:程序博客网 时间:2024/06/01 22:24

0. 前言

在Android中编写的FFmpeg程序,没有经过设置的话是无法在adb logcat中看到ffmpeg的日志,对于NDK程序而言其本身就缺乏适当的调试方法(AndroidStudio可以支持调试,但是很麻烦),如果再不能查看日志,那就算是废了。
本文在此提供一种把ffmpeg日志输出到adb logcat的方法。

1. av_log_set_callback

ffmpeg中av_log_set_callback函数提供了注册ffmpeg日志输出回调接口。

av_log_set_callback(log_callback_null);
static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl){    static int print_prefix = 1;    static int count;    static char prev[1024];    char line[1024];    static int is_atty;    av_log_format_line(ptr, level, fmt, vl, line, sizeof(line), &print_prefix);    strcpy(prev, line);    //sanitize((uint8_t *)line);    if (level <= AV_LOG_WARNING)    {        XLOGE("%s", line);    }    else    {        XLOGD("%s", line);    }}

2. 输出android日志

NDK程序通过__android_log_print函数可以把日志从logcat输出。

#ifdef ANDROID#include <android/log.h>#ifndef LOG_TAG#define  LOG_TAG    "FFMPEG"#endif#define  XLOGD(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)#define  XLOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)#else#include <stdio.h>#define XLOGE(format, ...)  fprintf(stdout, LOG_TAG ": " format "\n", ##__VA_ARGS__)#define XLOGI(format, ...)  fprintf(stderr, LOG_TAG ": " format "\n", ##__VA_ARGS__)#endif  //ANDROID
0 0