Ijkplayer打印FFMpeg日志

背景

在打印Ijkplayer播放日志的过程中,在ijkplayer中日志可以正常输出。但是涉及到FFMpeg的日志,则无法输出

原因

由于FFMPeg中的libavutil/log.c中使用的是fprintf,所以输出到了标准输出中,而Android有自己的一套输出日志的端口。需要使用av_log_set_callback将日志桥接到自定义的函数,然后通过该函数进行重输出。

方案

  1. ./compile-ffmpeg.sh armv7a编译的是/ijkplayer/android/contrib/ffmpeg-armv7a路径下的ffmpeg库,而不是extra下面的ffmpeg
  2. 在ijkplayer的ff_player.c中的ffp_global_init通过av_log_set_callback注册好回调函数,然后即可通过该函数将ffmpeg库中的输出重定向到ijkplayer中

这步完成后,发现还是打印不出来日志

  1. 最后,一怒之下,把ijksdl_log.h中的日志打印都换成了android jni的日志打印,就打印出来了
#ifdef EXTRA_LOG_PRINT
#define VLOG(level, TAG, ...)    ((void)__android_log_vprint(level, TAG, __VA_ARGS__))
#define ALOG(level, TAG, ...)    ((void)__android_log_print(level, TAG, __VA_ARGS__))
#else
#define VLOG(level, TAG, ...)    ((void)__android_log_vprint(level, TAG, __VA_ARGS__))
#define ALOG(level, TAG, ...)    ((void)__android_log_print(level, TAG, __VA_ARGS__))
#endif

#else

#define IJK_LOG_UNKNOWN     0
#define IJK_LOG_DEFAULT     1

#define IJK_LOG_VERBOSE     2
#define IJK_LOG_DEBUG       3
#define IJK_LOG_INFO        4
#define IJK_LOG_WARN        5
#define IJK_LOG_ERROR       6
#define IJK_LOG_FATAL       7
#define IJK_LOG_SILENT      8

#define VLOG(level, TAG, ...)    ((void)__android_log_vprint(level, TAG, __VA_ARGS__))
#define ALOG(level, TAG, ...)    ((void)__android_log_print(level, TAG, __VA_ARGS__))

#endif
  1. 最后在修改完ffmpeg中的日志后,需要进入/ijkplayer/android/contrib重新编译ffmpeg库,编译完后,再编译ijkplayer库

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静默虚空的博客

[协议]ICMP协议剖析

1、ICMP简介 ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。 ICMP的协议号为1。 ICMP报文就...

44870
来自专栏wOw的Android小站

[Android] Handler消息传递机制

其实这块知识我都看过,但是读完这段话有些地方还是让我回想了一小会儿。想完就觉着既然回想了一遍,不如整理一篇博客出来好了。

32110
来自专栏跟着阿笨一起玩NET

C#分析URL参数获取参数和值得对应列表(二)

40620
来自专栏james大数据架构

使用AsyncTask异步更新UI界面及原理分析

概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类。AsyncTask的内部实现是一个线程池,所有...

272100
来自专栏耕耘实录

批量创建用户并使用sudo和ACL来控制用户权限

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

12040
来自专栏向治洪

android 开发Handler源码剖析

Android的消息机制主要是Handler的运行机制,而讲Handler的机制,又需要和MessageQueue和Looper结合。MessageQueue中...

19670
来自专栏Golang语言社区

golang(GO语言)http详解简单基础

因为好像长时间的写PHP可能大家感觉烦躁了,所以写一点golang的东西大家可以拿去玩玩,golang在web开发中让你得心应手,其实也是很好的东西,只要你玩进...

54760
来自专栏Android干货

Android项目实战(三十一):异步下载apk文件并安装(非静默安装)

33460
来自专栏mukekeheart的iOS之旅

Android基础总结(7)——异步消息处理

服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务。服务的运行不依赖任何用户界...

27950
来自专栏拂晓风起

Flash Actionscript 多线程Worker 压缩图片

12040

扫码关注云+社区

领取腾讯云代金券