FFmpeg日誌輸出到adb logcat

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
發佈了231 篇原創文章 · 獲贊 256 · 訪問量 145萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章