FFMPEG技巧(1)如何打印日志

  

由于如今的工作比以前忙了,已经有好些日子没有分享技术博文了,还是得继续坚持下去。鉴于如今视频直播如此火爆,那就选个主题,聊聊播放器,聊聊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)如何打印日志