FFmpeg的日志系统(ubuntu 环境)
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)
相关文章:
FFmpeg的日志系统(ubuntu 环境)
1. 新建.c文件 vim ffmpeg_log.c2. 输入文本 #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 A…...
浅析VO、DTO、DO、PO
一、概念介绍 POJO(plain ordinary java object) : 简单java对象,个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。一个POJO持久化以后就是PO,直接用它传递、传递…...
android kotlin基础复习 enum
1、kotlin中,关键字enum来定义枚举类型。枚举类型可以包含多个枚举常量,并且每个枚举常量可以有自己的属性和方法。 2、测试代码: enum class Color{RED,YELLOW,BLACK,GOLD,BLUE,GREEN,WHITE }inline fun <reified T : Enum<T>>…...
个股场外期权怎么交易?场外期权交易流程是怎样的?
今天带你了解个股场外期权怎么交易?场外期权交易流程是怎样的?个股场外期权是一种非标准化的期权合约,通常在场外市场(OTC市场)由金融机构和投资者之间进行交易。 场外个股期权主要功能 风险管理: 帮助投…...
企业选ETL还是ELT架构?
作为数据处理的重要工具,ETL工具被广泛使用,同时ETL也是数据仓库中的重要环节。本文将从解释ETL工具是怎么处理数据,同时介绍ELT和ETL工具在企业搭建数据仓库的重要优势。 一、什么是ETL? ETL是Extract-Transform-Load的缩写,将…...
【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS 背景介绍开发环境开发步骤及源码工程目录结构背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是…...
【Android】最好用的网络库:Retrofit
最好用的网络库:Retrofit 文章目录 最好用的网络库:RetrofitRetrofit的基本用法Retrofit的使用逻辑Retrofit的基本操作处理复杂的接口地址类型进阶删除提交header中指定参数 Retrofit构建器的最佳写法Retrofit的使用封装 用户网络请求的接口配置繁琐&…...
SpringBoot自动化配置原理
SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 目的:通过依赖能了解SpringBoot管理了哪些starter 讲解: 通过依赖 spring-boot-dependencies 搜索 starter- 发现非常多的官方starter,并且已经帮助我们管理好了版本。 …...
2024级新生数组字符串专题题解
一、题解: 1.A-[NOIP2005]校门外的树_24级新生数组字符串训练题 (nowcoder.com) 这题常见的解法有两种: 第一种是这道题我们可以直接按照题目意思枚举 #include<bits/stdc.h> #define int long long using namespace std;int road[10010];sig…...
C++学习 虚函数,容器
一、虚函数 虚函数是C中的一种函数,允许子类重写父类中的函数,以便在运行时通过基类指针或引用调用子类的函数实现。虚函数的主要作用是实现多态性,这使得基类指针或引用可以根据实际指向的对象类型调用不同的函数实现。具体用法 虚函数的声…...
MacTalk 测评通义灵码,如何实现“微信表情”小功能?
作者:池建强,墨问西东创始人 前段时间,我写了篇墨问研发团队放弃 GitHub Copilot 的文章,没想到留言区一些读者推荐我们试试通义灵码,说它效果很不错。我呢,一直没腾出时间折腾。 直到月中时,…...
Canvas Confetti - 免费开源的五彩纸屑飞舞特效的 JS 库,多用于在网页上实现欢乐庆祝的场景
今天看科技周刊看到的一个酷炫的动效库,使用简单,视觉效果很好,推荐给大家。 Canvas Confetti 是一个基于 JavaScript 的特效动画库,可以在网页界面上轻松地实现五彩纸屑飞舞的庆祝场景特效。这个特效库封装了几种酷炫的特效&…...
[数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):16245 标注数量(xml文件个数):16245 标注数量(txt文件个数):16245 标…...
GS-SLAM论文阅读笔记--LoopSplat
介绍 这篇文章看标题是解决GS-SLAM回环检测的,GS-SLAM回环检测之前文章很少,但他对于SLAM又很重要,确实值得阅读一番。而且这些作者的学校又是很厉害的。 文章目录 介绍1.背景介绍2.关键内容2.1 Gaussian Splatting SLAM2.2 Gaussian Splat…...
Mysql数据库表结构迁移PostgreSQL
1、背景: 公司本来用的数据库都是mysql,为了国产化适配兼容pg和dm。dm提供了数据迁移工具,可以直接做数据迁移,生成脚本之后在其他环境执行。但是pg貌似没有工具能直接用。navicat由于版权问题公司也用不了。pgloader使用总是有问…...
店匠科技携手Stripe共谋电商支付新篇章
在全球电商行业蓬勃发展的背景下,支付环节作为交易闭环的核心,其重要性日益凸显。随着消费者对支付体验要求的不断提高,以及跨境电商的迅猛发展,支付市场正经历着前所未有的变革与挑战。在这一充满机遇与竞争的领域,店匠科技(Shoplazza)凭借其创新的嵌入式支付解决方案—— Sho…...
大众(奥迪)汽车继电器编号对照表
数字功能放大器零件编号1化油器进气歧管加热器40a1719063832燃油泵(CE1 MK1 Golf 和 Early Rocco/cabrio K-Jet,无转速限制器)-443906059A 321906059D/E3燃油泵(CE1 MK1 Golf 和 Early Rocco/cabrio K-Jet,无转速限制器)-4439060594安全带警告继电器5早期 MFA 时钟的换档…...
《佛脚闪卡watch》——Apple Watch上的高效学习助手
在快节奏的生活环境中,时间管理成为了学习成功的关键因素之一。**《佛脚闪卡watch》**是一款专为Apple Watch设计的应用程序,旨在帮助学生和自学者更高效地利用碎片时间进行学习。无论是等待公交、散步还是短暂休息,您都可以随时随地进行复习…...
六、桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与实现分离,使得两者可以独立变化。通过使用桥接模式,可以避免在多个维度上进行继承,降低代码的复杂度,从而提高系统的可扩展性。 组成…...
Vue eslint 语法检测问题
1. 修改 prettier 配置文件 确保你的项目中有 .prettierrc 配置文件,并在其中添加或修改 endOfLine 设置为 lf,确保统一使用 LF 换行符。 在 .prettierrc 文件中添加: {"endOfLine": "lf" }2. 修改 .editorconfig 文件…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
