FFmpeg的日志系统(ubuntu 环境)

1. 新建.c文件

bash 复制代码
vim ffmpeg_log.c

2. 输入文本

bash 复制代码
#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 都可以印出来

c 复制代码
#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:

c 复制代码
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. 编译

bash 复制代码
gcc -g -o ffmpeg_log ffmpeg_log.c -lavutil

但会提示:

bash 复制代码
fmpeg_log.c:2:9: fatal error: libavutil/log.h: 没有那个文件或目录
    2 | #include<libavutil/log.h>
      |         ^~~~~~~~~~~~~~~~~
compilation terminated.

原因是gcc 找不到libavutil,需要在编译前告知编译器libavutil在哪里

bash 复制代码
export PKG_CONFIG_PATH="/home/ffmpeg/lib/pkgconfig"
pkg-config --libs --cflags libavutil

其中pkg-config 就是找libavutil具体位置,-I 是指定头文件,-L是指定库:

bash 复制代码
-I/home/ffmpeg/include -L/home/ffmpeg/lib -lavutil 

4. 修改gcc cmd

bash 复制代码
gcc -g -o ffmpeg_log ffmpeg_log.c -I/home/ffmpeg/include -L/home/ffmpeg/lib -lavutil

or

bash 复制代码
sudo gcc -g -o ffmpeg_log ffmpeg_log.c `pkg-config -cflags --libs  libavutil`

会生成ffmpeg_log文件,执行:

bash 复制代码
$ ./ffmpeg_log 
hello world

5. ldd 查看可执行文件所依赖的库

bash 复制代码
$ ldd ffmpeg_log
	linux-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)
相关推荐
kaoa0005 小时前
Linux入门攻坚——53、drbd - Distribute Replicated Block Device,分布式复制块设备-2
linux·运维·服务器
落羽的落羽5 小时前
【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化
linux·c++·人工智能·学习·机器学习·c++20·c++40周年
RisunJan5 小时前
Linux命令-e2label命令(设置第二扩展文件系统的卷标)
linux·运维·服务器
Claire_ccat5 小时前
2025山西省网络安全职业技能大赛PWN方向题解
linux·安全·网络安全·pwn·栈溢出
小苏兮5 小时前
【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试
java·linux·运维·学习·1024程序员节
LCG元5 小时前
Linux 软件安装大全:apt/yum/dpkg/rpm/snap 到底用哪个?
linux
倦王5 小时前
Linux一些基本命令--黑马学习
linux·运维·服务器
小武~6 小时前
嵌入式Linux系统性能优化:深入剖析I/O性能瓶颈
linux·运维·性能优化
dragoooon346 小时前
[Linux——Lesson21.进程信号:信号概念 & 信号的产生]
linux·运维·服务器
头发还没掉光光6 小时前
Linux网络初始及网络通信基本原理
linux·运维·开发语言·网络·c++