溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FFmpeg av_log_set_callback函數(shù)使用

發(fā)布時間:2020-07-10 18:14:24 來源:網(wǎng)絡 閱讀:11204 作者:fengyuzaitu 欄目:編程語言

簡介
AVLog是FFmpeg的日志輸出工具。在FFmpeg中所有的日志輸出不是通過printf()函數(shù)而是通過av_log()函數(shù)。av_log()會最終調(diào)用fprintf(stderr,…)函數(shù)將日志內(nèi)容輸出到命令行界面上。但是在一些非命令行程序(MFC程序,Android程序等)中,av_log()調(diào)用的fprintf(stderr,…)就無法將日志內(nèi)容顯示出來了。對于這種情況,F(xiàn)Fmpeg提供了日志回調(diào)函數(shù)av_log_set_callback()。該函數(shù)可以指定一個自定義的日志輸出函數(shù),將日志輸出到指定的位置。
下面的自定義函數(shù)FFmpegLogFunc()將日志輸出到了“ffmpeglog.txt”文本中。

void FFmpegLogFunc(void ptr, int level, const char fmt, va_list vl) {
FILE *fp = fopen("FFmpegLog.txt", "a+");
if (fp) {
SYSTEMTIME sys;
GetLocalTime(&sys);
char szTime[128] = { 0 };
sprintf(szTime, "I:%4d-%02d-%02d %02d:%02d:%02d ms:%03d:", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
fwrite(szTime, strlen(szTime), 1, fp);
vfprintf(fp, fmt, vl);
fflush(fp);
fclose(fp);
}
}
av_log_set_callback(FFmpegLogFunc);

使用說明
av_log(NULL, AV_LOG_WARNING, "start to write oneline to test av_log\n");

日志回調(diào)函數(shù)調(diào)整
1)選擇性的打印,代碼如下
void FFmpegLogFunc(void ptr, int level, const char fmt,va_list vl)
{
FILE *fp = fopen("ffmpeglog.txt","a+");

    if(level > AV_LOG_ERROR)   return;  

if(fp)
{   
    vfprintf(fp,fmt,vl);
    fflush(fp);
    fclose(fp);
}   

}

2)避免每次打開文件
void FFmpegLogFunc(void ptr, int level, const char fmt,va_list vl)
{
static FILE *fp = NULL;
if(NULL == fp)
{
fp = fopen("ffmpeglog.txt","a+");
}

if(fp)
{   
    vfprintf(fp,fmt,vl);
    fflush(fp);
}   

}

3)指定日志輸出的等級
調(diào)用av_log_set_level(AV_LOG_DEBUG);
說明:比AV_LOG_DEBUG等級高的都不會輸入到文件
等級最高的的宏定義是#define AV_LOG_TRACE 56

參考
http://www.bkjia.com/ASPjc/1034665.html

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI