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)
相关推荐
Spring_java_gg4 分钟前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻4 分钟前
Linux:认识文件系统
linux·运维·服务器
会掉头发32 分钟前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★34 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
饮啦冰美式1 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp1 小时前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
wowocpp1 小时前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
Huaqiwill1 小时前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge1 小时前
Netty篇(入门编程)
java·linux·服务器