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