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)
相关推荐
Linux运维老纪27 分钟前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
斯普信专业组34 分钟前
Ceph异地数据同步之-RBD异地同步复制(下)
linux·服务器·ceph
counsellor39 分钟前
CentOS 7安装hyperscan
linux·centos·hyperscan
电星托马斯41 分钟前
Linux系统CentOS 6.3安装图文详解
linux·运维·服务器·程序人生·centos
啞謎专家44 分钟前
CentOS中挂载新盘LVM指南:轻松扩展存储空间,解决磁盘容量不足问题
linux·运维·服务器
s_little_monster1 小时前
【Linux】进程信号的捕捉处理
linux·运维·服务器·经验分享·笔记·学习·学习方法
一大Cpp1 小时前
Ubuntu与本地用户交流是两种小方法
linux·运维·ubuntu
小王不会写code1 小时前
CentOS 7 镜像源失效解决方案(2025年)
linux·运维·centos
zyplanke1 小时前
CentOS Linux升级内核kernel方法
linux·运维·centos
go_bai2 小时前
Linux环境基础开发工具——(2)vim
linux·开发语言·经验分享·笔记·vim·学习方法