由于如今的工作比以前忙了,已经有好些日子没有分享技术博文了,还是得继续坚持下去。鉴于如今视频直播如此火爆,那就选个主题,聊聊播放器,聊聊FFMPEG那些事吧。
FFMPEG是个好东西,可以说目前市面上的任何一款“通用型”播放器,都离不开FFMPEG,因为没有什么其他的库比它支持的格式更加全面了。
这里首先致敬一下雷神,博客地址:《雷霄骅的专栏》,分享了很多音视频方面的技术文章,开源代码以及FFMPEG源码的分析,无论对入门者还是资深开发,都有很大的价值。
我要写的主题,与雷神不同,我会测重介绍使用FFMPEG开发播放器过程中的一些比较基础的小经验或者说开发笔记,因此,使用技巧这个单词,意味小技巧,小帖士,因此,本系列的目标读者是FFMPEG的入门者,也欢迎路过的高手们能对分享的内容给出宝贵的建议和意见。
本文则从开发和调试程序最重要的一点:日志说打起,看看基于FFMPEG开发,如何打印日志,如何设置日志的级别。
<强> 1。,FFMPEG打印日志的函数强>
FFMPEG有一套自己的日志系统,它使用av_log()函数来打印日志,其声明位于:& lt; libavutil/log.h>
它的函数原型如下:
/* * ,* Send 从而specified message 用,log if 从而level is less than 或是相等 ,*用,current av_log_level只By 默认情况下,,all logging messages 断开连接;sent ,* stderr只却;能够behavior 还要be altered by setting a different logging 回调 ,*功能。 ,* @see av_log_set_callback ,* ,* @param avcl  A pointer 用an arbitrary struct of which 从而first field is ,*,,,,,,,pointer 用an AVClass 结构。 ,* @param level 从而importance level of 从而message expressed using a @ref ,*,,,,,,,lavu_log_constants “Logging 常数”。 ,* @param fmt 从而format string (printf-compatible), that specifies 如何 ,*,,,,,,,subsequent arguments 断开连接;converted 用输出。 ,*/void av_log (void * avcl, int 水平,const char * fmt,,…),
参数含义:
avcl:指定一个包含AVClass的结构体,指定该日志所属的结构体,如AVFormatContext, AVCodecContext等等,可以设置为空
水平:日志的级别、下面给出可选的值
fmt:跟c语言的printf()定义一样
<强> 2。,FFMPEG日志级别强>
日志的级别是一个int类型,其可选的数值及其含义如下:
/* * ,* Print no 输出。 ,*/# define AV_LOG_QUIET ,, 8/* * ,* Something went  really wrong 以及will crash 现在我方表示歉意。 ,*/# define AV_LOG_PANIC ,,, 0/* * ,* Something went  wrong 以及recovery is not 可能的。 ,* For 例如,,no header was found For a format which 视情况而定 ,*提醒headers 或是an illegal combination of parameters is 使用。 ,*/# define AV_LOG_FATAL ,,, 8/* * ,* Something went  wrong 以及cannot losslessly be 恢复。 然而,,*,not all future data is 影响。 ,*/# define AV_LOG_ERROR ,, 16/* * ,* Something somehow  does not look 正确只却;能够may 或是may 不是 ,* lead 用问题只An example would be 从而use of -vstrict 2。 ,*/# define AV_LOG_WARNING 24/* * ,* Standard 信息。 ,*/# define AV_LOG_INFO ,,, 32/* * ,* Detailed 信息。 ,*/# define AV_LOG_VERBOSE 40/* * ,* Stuff which  is only useful for libav *,开发人员。 ,*/# define AV_LOG_DEBUG ,,, 48
<强> 3。,FFMPEG设置和获取当前日志级别强>
由一个全局的变量来控制哪个级别及以上的日志会打印输出,设置和获取这个全局变量的函数如下:
/* * ,* Get 从而current log 水平 ,* ,* @see lavu_log_constants ,* ,* @return Current  log 水平 ,*/int av_log_get_level(无效);/* * ,* Set 从而log 水平 ,* ,* @see lavu_log_constants ,* ,* @param level  Logging 水平 ,*/void av_log_set_level (int 水平);FFMPEG技巧(1)如何打印日志