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)
相关推荐
比兔代理9 分钟前
住宅代理IP的出口节点调度:ASN、BGP 与 IP 段信誉机制解析
linux·服务器·网络
AAA代码批发商10 分钟前
DAYS 38 TCP并发服务器模型详解
linux·网络·笔记·学习
spencer_tseng15 分钟前
kylin redis-6.2.14.tar.gz
linux·redis·kylin·edis-6.2.14
昌原的儿子LEO37 分钟前
Linux 网络编程:select 与 epoll IO 多路复用详解
linux·网络·数据库
Jason_zhao_MR42 分钟前
Linux与采集MCU通信为什么我们用了双SPI
linux·arm开发·单片机·嵌入式硬件·嵌入式
草莓熊Lotso43 分钟前
【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南
linux·网络·数据库·redis·tcp/ip·缓存·bootstrap
λqaq71 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存
CS_Zero1 小时前
Ubuntu 22.04挂载新硬盘
linux·运维·ubuntu
oushaojun21 小时前
深入 Linux 动态链接:so 库构建与运行逻辑(转)
linux
好评1241 小时前
【Linux】应用层自定义协议与序列化
linux·运维·网络