1. 新建.c文件
vim ffmpeg_log.c
2. 输入文本
#include<stdio.h>
#include<libavutil/log.h>
int main()
{av_log_set_level(AV_LOG_DEBUG);av_log(NULL,AV_LOG_INFO,"hello world");return 0;
}
当log level < AV_LOG_DEBUG 都可以印出来
#define AV_LOG_ERROR 16/*** Something somehow does not look correct. This may or may not* lead to problems. An example would be the use of '-vstrict -2'.*/
#define AV_LOG_WARNING 24/*** Standard information.*/
#define AV_LOG_INFO 32/*** Detailed information.*/
#define AV_LOG_VERBOSE 40/*** Stuff which is only useful for libav* developers.*/
#define AV_LOG_DEBUG 48/*** Extremely verbose debugging, useful for libav* development.*/
#define AV_LOG_TRACE 56
av_log的实质上是snprintf:
void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
{static int print_prefix = 1;static int count;static char prev[LINE_SZ];AVBPrint part[4];char line[LINE_SZ];static int is_atty;int type[2];unsigned tint = 0;if (level >= 0) {tint = level & 0xff00;level &= 0xff;}if (level > av_log_level)return;ff_mutex_lock(&mutex);format_line(ptr, level, fmt, vl, part, &print_prefix, type);snprintf(line, sizeof(line), "%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str);
3. 编译
gcc -g -o ffmpeg_log ffmpeg_log.c -lavutil
但会提示:
fmpeg_log.c:2:9: fatal error: libavutil/log.h: 没有那个文件或目录2 | #include<libavutil/log.h>| ^~~~~~~~~~~~~~~~~
compilation terminated.
原因是gcc 找不到libavutil,需要在编译前告知编译器libavutil在哪里
export PKG_CONFIG_PATH="/home/ffmpeg/lib/pkgconfig"
pkg-config --libs --cflags libavutil
其中pkg-config 就是找libavutil具体位置,-I 是指定头文件,-L是指定库:
-I/home/ffmpeg/include -L/home/ffmpeg/lib -lavutil
4. 修改gcc cmd
gcc -g -o ffmpeg_log ffmpeg_log.c -I/home/ffmpeg/include -L/home/ffmpeg/lib -lavutil
or
sudo gcc -g -o ffmpeg_log ffmpeg_log.c `pkg-config -cflags --libs libavutil`
会生成ffmpeg_log文件,执行:
$ ./ffmpeg_log
hello world
5. ldd 查看可执行文件所依赖的库
$ ldd ffmpeg_loglinux-vdso.so.1 (0x00007ffe051fc000)libavutil.so.59 => /home/ffmpeg/lib/libavutil.so.59 (0x00007a0937c00000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007a0937800000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007a0938dd4000)libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007a0938dbd000)/lib64/ld-linux-x86-64.so.2 (0x00007a0938ed6000)