av_log av_dump_format不能打印的原因

Android 音视频开发之FFMPeg笔记 音视频应用场景:直播类、短视频、网络视频、音视频通话、视频监控、人工智能 播放器架构: 解复用(将多媒体文件中的音频流视频流进行拆流归类) 音频解码-----> PCM数据---->音频播放 视频解码-----> YUV数据----->视频渲染 渲染流程: YUV----->渲染器渲染形成纹理(内存中的特殊空间)----->copy到显卡,通过算法计算,最后显示到窗口 FFMMPEG----->一个优秀的、跨平台的多媒体框架,可以进行解码、编码、转码、 阅读详情
AVLog是FFmpeg的日志输出工具。在FFmpeg中所有的日志输出不是通过printf()函数而是通过av_log()函数。av_log()会最终调用fprintf(stderr,…)函数将日志内容输出到命令行界面上。但是在一些非命令行程序(MFC程序,Android程序等)中,av_log()调用的fprintf(stderr,…)就无法将日志内容显示出来了。对于这种情况,FFmpeg提供了日志回调函数av_log_set_callback()。该函数可以指定一个自定义的日志输出函数,将日志输出到指定的位置。

下面的自定义函数FFmpegLogFunc()将日志输出到了“ffmpeglog.txt”文本中。

void FFmpegLogFunc(void ptr, int level, const char fmt, va_list vl) {
	FILE *fp = fopen("FFmpegLog.txt", "a+");
	if (fp) {
		vfprintf(fp, fmt, vl);
		fflush(fp);
		fclose(fp);
	}
}
av_log_set_callback(FFmpegLogFunc);

使用说明

av_log(NULL, AV_LOG_WARNING, "start to write oneline to test av_log\n");

日志回调函数调整
1)选择性的打印,代码如下

void FFmpegLogFunc(void ptr, int level, const char fmt,va_list vl)
{
FILE *fp = fopen("ffmpeglog.txt","a+");

    if(level > AV_LOG_ERROR)   return;  

if(fp)
{   
    vfprintf(fp,fmt,vl);
    fflush(fp);
    fclose(fp);
}   
}

2)避免每次打开文件

void FFmpegLogFunc(void ptr, int level, const char fmt,va_list vl)
{
static FILE *fp = NULL; 
if(NULL == fp)
{ 
fp = fopen("ffmpeglog.txt","a+"); 
}

if(fp)
{   
    vfprintf(fp,fmt,vl);
    fflush(fp);
}   
}

3)指定日志输出的等级
调用av_log_set_level(AV_LOG_DEBUG);
说明:比AV_LOG_DEBUG等级高的都不会输入到文件
等级最高的的宏定义是#define AV_LOG_TRACE 56

完整测试代码

#include <libavformat/avformat.h>




void FFmpegLogFunc(void* ptr, int level, const char * fmt, va_list vl) {
	FILE *fp = fopen("FFmpegLog.txt", "a+");
	if (fp) {
		/*
		struct tm sys;
		GetLocalTime(&sys);
		char szTime[128] = { 0 };
		sprintf(szTime, "I:%4d-%02d-%02d %02d:%02d:%02d ms:%03d:", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
		fwrite(szTime, strlen(szTime), 1, fp);
*/
		vfprintf(fp, fmt, vl);
		
		fflush(fp);
		fclose(fp);
	}
}

int main(int argc, char *argv[])
{
    int err_code;
    char errors[1024];

    AVFormatContext *fmt_ctx = NULL;

    if(argc < 2){
        fprintf(stderr, "[Usage]you should input media file!\n");
        return -1;
    }

    char *src_filename = argv[1];
	av_log_set_level(AV_LOG_INFO);
	av_log_set_callback(FFmpegLogFunc);
	av_log(NULL ,AV_LOG_INFO, "av_log src_filename:%s\n", src_filename);
	printf( "printf src_filename:%s\n", src_filename);
    av_register_all();

    /* open input file, and allocate format context */
    if ((err_code=avformat_open_input(&fmt_ctx, src_filename, NULL, NULL)) < 0) {
        av_strerror(err_code, errors, 1024);
        fprintf(stderr, "Could not open source file %s, %d(%s)\n", src_filename, err_code, errors);
        exit(1);
    }
	printf("open source file succes \n");
	
    /* retreive stream information */
    if((err_code = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
        av_strerror(err_code, errors, 1024);
        fprintf(stderr, "Could not open source file %s, %d(%s)\n", src_filename, err_code, errors);
        exit(1);
    }
	printf("avformat_find_stream_info success\n");

    /* dump input information to stderr */
    av_dump_format(fmt_ctx, 0, src_filename, 0);
	printf("after av_dump_format\n");

    /* close input file */
    avformat_close_input(&fmt_ctx);

    return 0;
}


参考
http://www.bkjia.com/ASPjc/1034665.html

FFmpeg学习笔记(2):FFmpeg 打印日志 FFmpeg 日志输出系统介绍 首先,我们要学习的就是FFmpeg的日志输出系统 。 FFmpeg提供了av_log_set_level()用于设置当前Log的级别。具体的声明代码如下: /** * Set the log level * * @see lavu_log_constants * * @param level Logging level */ void av_log_set_level(int level); FFmpeg 日志输出的核心函数方法为: av_log() 。 阅读详情

相关推荐

FFmpeg:打印音/视频信息(Meta信息)

FFmpeg:打印音/视频信息(Meta信息)

weixin_42136255的博客 2083

【FFMPEG】打印 av_log 的输出

    在使用FFMPEG库的时候,如果有使用上的错误,FFMPEG 通过av_log 可以打印相应的消息到标准输出里。但有时候我们并没有标准输出,那么这个时候应该怎么处理呢?    方法:使用 av_log_set_callback 获取 av_log的打印输出。    示例如下:void Init() { ... av_log_set_callback(&amp;FFMPEG_Callba...

言小非的专栏 2902

最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)

本程序是FFmpeg中的libavutil的示例,目前包含: AVLog AVOption (AVClass) AVDictionary ParseUtil

linux命令

top %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7915040 total, 6527188 free, 870596 used, 517256 buff/cache KiB Swap: 8126460 total, 8126460 free, 0 used. 6772280 avail Mem 其中id代表cpu使用情况,0代表使用达到极限,

宝安小雨 1014

高效爬取懂车帝车型数据:从静态解析到动态反爬实战

本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。

wind6的博客 937

抖音短视频数据抓取实战系列(一)——模拟器性能对比与优化配置

本文是抖音短视频数据抓取实战系列的开篇,重点探讨了模拟器选型与优化配置。通过对比雷电、夜神、逍遥三大主流模拟器在性能、抖音兼容性及抓包友好度上的表现,文章指出雷电模拟器因其稳定的桥接网络模式和良好的兼容性,是数据抓取的优选。并提供了雷电模拟器从安装、网络桥接到系统优化的详细配置指南,旨在帮助读者构建稳定高效的抓取环境。

weixin_29230901的博客 246

FFmpeg:av_dump_format()

最近在研究ffmpeg,雷神的博客给了很大的帮助,可惜雷神走了。在雷神博客里面发现没有av_dump_format()这个函数,那就自己写篇文章来记录下。 av_dump_format是打印输入和输出格式的详细信息,声明位于libavformat/avformat.h下,如下所示 /** * Print detailed information about the input or output format, such as * duration, bitrate, streams, conta

拿头去拼啊 809

基于 Node.js + MongoDB 技术栈的小众开源短链接程序 —— Lynx

开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。搜索了很久才找到这么一款基于的短链接程序——Lynx。这个开源项目非常小众,Star 数只有两百多。

zc_mk的博客 827

av_dump_format函数简介

原型:void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output); 参数: * Print detailed information about the input o

disadministrator的专栏 2万+

网络安全隔离技术解析:单向网闸与双向网闸的核心差异与应用场景

本文深入解析网络安全隔离技术中的单向网闸与双向网闸,详细比较两者的核心差异与应用场景。单向网闸通过物理隔离确保数据单向流动,适用于金融交易等高风险场景;双向网闸则支持严格安检的双向数据交互,常见于医疗、政务等领域。文章还提供了选型建议和技术发展趋势,帮助读者根据安全需求和业务场景选择最适合的网闸解决方案。

weixin_29323365的博客 528

ffmpeg之av_dump_format函数详细解释

av_dump_format函数是FFmpeg库提供的用于将AVFormatContext结构体中媒体文件的信息进行格式化输出的函数。该函数的作用是输出媒体文件的格式信息,包括文件格式、码率、格式特征信息、音视频流等相关信息,以便于用户了解媒体文件的详细信息。:指定是否是输出上下文,1表示输出AVOutputContext格式信息,0表示输出AVInputContext格式信息。:指定输出音视频流的索引号,当index为-1时代表输出所有音视频流的信息。:指定媒体文件的URL,通常设置为NULL。

ZZU_LGY 1849

Pico-实时预览工具PreviewTool

Unity XR SDK与Preview Tool下载链接:SDK - Pico Developer Platform1、下载Preview Tool后,将PreviewTool的APK先安装在VR头显里2、在PC端打开Preview Tool.exe文件Window -> Package Manager -> Add package from disk,选择下载的pico sdk中的package.json(如下图),Open导入。Edit -> Project Settings,设置设备和安卓版本,如下

晴天下的大头娃娃 4251

FFmpeg av_dump_format函数使用

函数说明 一般使用av_find_stream_info函数探测码流格式,它的作用是为pFormatContext->streams填充上正确的音视频格式信息。可以通过av_dump_format函数将音视频数据格式通过av_log输出到指定的文件或者控制台,方便开发者了解输入的视音频格式,对于程序的调用,删除该函数的调用没有任何的影响/*** Prin...

weixin_34356310的博客 818

YOLOv11 改进 - 注意力机制 | LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测

本文介绍了一种用于滑坡检测的模型LS-YOLO及其在YOLOv11中的结合应用。LS-YOLO首先构建多尺度滑坡数据集MSLD,为模型训练提供丰富数据。设计了基于高效通道注意力、平均池化和空间可分离卷积的多尺度特征提取模块MSFE,充分提取滑坡特征信息。在解耦头中采用膨胀卷积增加模型感受野。我们将MSFE模块集成进YOLOv11,替换部分原有模块。实验表明,改进后的YOLOv11在数据集中表现出色 。

魔改工程师的博客 870

rk3588平台USB 3.0 -OAK深度相机适配方法

摘要:本文记录了OAK摄像头设备的配置与测试流程。主要内容包括:1)添加USB设备udev规则;2)拉取相关依赖库;3)安装Python3和pip;4)安装项目依赖;5)安装FFmpeg工具;6)测试摄像头功能并转换视频格式;7)将测试视频拷贝到U盘查看。操作步骤涵盖了从设备驱动配置到功能测试的完整流程,提供了详细的命令行操作指引。通过该文档可快速完成OAK摄像头的环境搭建和基础功能验证。

yy_hear的博客 325

ffmpeg之av_dump_format的使用,打印流的信息

#include #include extern "C"{ #include #include #include } #pragma comment(lib,"avcodec.lib") #pragma comment(lib,"avutil.lib") #pragma comment(lib,"avformat.lib") int main(int

7869

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

FFmpeg开发实战(三):打印音视频meta信息

FFmpeg提供了一个API专门用来打印多媒体文件的格式 —— av_dump_format ( )。

WHEgqing的专栏 711

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息

在之前使用FFmpeg命令行的时候,我们经常看到FFmpeg命令行在输出音视频文件的会打印一下文件的Meta信息,类似如图: 那么我们如何通过代码的方式输出这些Meta信息呢? FFmpeg提供了一个API专门用来打印多媒体文件的格式 —— av_dump_format ( )。 下面是示例代码: // 使用FFmpeg打印多媒体文件的Meta信息 void ffmpe...

weixin_30794499的博客 400

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux下开发ffmpeg(6),打印音视频信息

目录 重要函数 //打开一个多媒体文件 avformat_open_input() avformat_close_input() //将多媒体信息打印出来 av_dump_format() meta.c #include <libavutil/log.h> #include <libavformat/avformat.h> int main(int argc,ch...

张雨的博客 487

FFmpeg之avformat_open_input解析

我们知道avformat_open_input()能打开视频容器,那么现在我比较关心视频文件的MetaData怎么查看, 刚好FFMpeg给我们提供了av_dump_format()函数会自动打印MetaData信息,打印有关输入或输出格式的详细信息,例如   *持续时间,比特率,流,容器,程序,元数据,边数据,   *编解码器和时基。。 函数说明         一般使用av_find_str...

SmallBottle-CGWLMX的博客 1688

FFMPEG4.0.2打印音视频meta信息

av_register_all avformat_open_input/avformat_close_input av_dump_format 代码: #include <libavutil/log.h> #include <libavformat/avformat.h> int main(int argc, char **argv){ int ret = 0; AV...

ASCE_S的博客 247

ffmpeg 基本概念

多媒体文件其实是个容器(比如mp4是个包装盒,里面可以放mp3/aac, h264视频数据) 在容器里有很多流(Stream/Track) 每种流是由不同的编码器编码的 从流中读取的是包,在一个包中包含着一个或多个帧 常用结构体 AVFormatContext 格式上下文 AVStream 流 AVPacket 打印音视频信息 avformat_open_input/avformat_close_input av_find_input_format av_dump_...

qq_15255121的专栏 435

音视频从入门到精通——FFmpeg之Duration计算

计算方式参考av_dump_format函数。

mirana的专栏 1854

av_dump_format经验分析,FFmpeg获取媒体文件总时长(FLV获取总时长的误区)

av_dump_format经验分析,关闭FFmpeg获取媒体文件总时长的时长(FLV获取总时长的误区)

TrueDei 545
上一篇: Spark window idea 开发环境搭建
下一篇: MP4文件格式解析
未来创世纪
博客等级 码龄18年 960粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值