分享

GStreamer Debugging

 开花结果 2022-01-29

Refer to: http://developer./wiki/index.php/GStreamer_Debugging
    https://blog.csdn.net/xuanwolanxue/article/details/62236413

注:本篇笔记以gstreamer 1.14.0 版本为蓝本,若有出入的地方,请确认版本信息

1. log调试信息的函数

在 gstreamer 1.14.0版本中定义了如下的log输出宏:

1.1 最基本的log输出宏

GST_CAT_LEVEL_LOG(cat,level,object,...)

其中

  • cat:表示category,用于区分log信息的类别,在后面说到debug level等信息的设置的时候会用到;

  • level:表示当前输出的这条log信息属于哪一个等级,具体的等级定义,将在后文中介绍;

  • obj:表示输出的log信息属于哪一个GObject,注:此项可以设置为NULL,表示不属于任何GObject;

  • …:为log信息的内容。

1.2 不同的log输出宏分组

为了使用的方便,根据不同的输出需求,在基础输出宏的基础上再做了一次封装,同样是使用宏定义的方式。

  • GST_CAT_ERROR_OBJECT(cat,obj,…)

  • GST_CAT_WARNING_OBJECT(cat,obj,…)

  • GST_CAT_INFO_OBJECT(cat,obj,…)

  • GST_CAT_DEBUG_OBJECT(cat,obj,…)

  • GST_CAT_LOG_OBJECT(cat,obj,…)

  • GST_CAT_FIXME_OBJECT(cat,obj,…)

  • GST_CAT_TRACE_OBJECT(cat,obj,…)

这一组主要使用到了category和GObject。

  • GST_CAT_ERROR(cat,…)

  • GST_CAT_WARNING(cat,…)

  • GST_CAT_INFO(cat,…)

  • GST_CAT_DEBUG(cat,…)

  • GST_CAT_LOG(cat,…)

  • GST_CAT_FIXME(cat,…)

  • GST_CAT_TRACE(cat,…)

这一组只使用到了category,而obj项将被设置为NULL

  • GST_ERROR_OBJECT(obj,…)

  • GST_WARNING_OBJECT(obj,…)

  • GST_INFO_OBJECT(obj,…)

  • GST_DEBUG_OBJECT(obj,…)

  • GST_LOG_OBJECT(obj,…)

  • GST_FIXME_OBJECT(obj,…)

  • GST_TRACE_OBJECT(obj,…)

这一组只使用到了 obj, 而category项将被设置为GST_CAT_DEFAULT,即默认类别

  • GST_ERROR(…)

  • GST_WARNING(…)

  • GST_INFO(…)

  • GST_DEBUG(…)

  • GST_LOG(…)

  • GST_FIXME(…)

  • GST_TRACE(…)

这一组最简洁,log输出时,只需要输出内容,其中category为GST_CAT_DEFAULT,obj为NULL。

注: 官方建议不要在代码中轻易使用printf或g_print之类的函数,因为他们无法控制是否输出

上文所提到的log输出宏 在gstreamer包的gstinfo.h中定义,部分截图如下所示:

 

2. debug level

在gstreamer 1.14.0 版本中对debug level的定义如下(注:不同的版本中debug level的数量可能会有差别):

也就是说,gstreamer1.14.0当中将debug level分为了10个等级:

0: 什么都不打印
1: 打印error的信息
2: 打印error,warning 的信息
3: 打印error warning,FIXME的信息

以此类推,debug level等级数字越大,输出的log信息就越多。

3. 使用命令行参数开启或设置debug信息

  • –gst-debug-level=LEVEL
    其中LEVEL的取值为[0,9], 使用这种方式将同时开启/关闭所有模组的 debug信息,可能会导致debug信息过多而影响关键信息的获取。

  • –gst-debug=STRING
    其中STRING为字符串,使用这种方式只输出由STRING指定范围内的调试信息,格式为 : category_name:LEVEL, 如果要设置多个类别时,每个类别设置之间使用“,”分开,例如:–gst-debug=”videodecoder:5,fdsrc:4,oggdemux:3”

4. 使用环境变量开启或设置debug信息

gstreamer中还可以使用环境变量开启或关闭debug信息,此环境变量为:GST_DEBUG,其使用方式和命令行参数 –gst-debug 一样,都是有一对对 category_name:LEVEL 这样的二元组构成,二元组与二元组之间使用 “,”(逗号)隔开。

注意:
1. 二元组与二元组之间只能用逗号隔开,其不能有空格等其他符号;
2. category_name支持"*"通配符, 如 "GST_ELEMENT_*:4"

5. 在代码中动态设置debug等级

在前面提到的两种开启或设置debug信息的方式都是在调用gst_init()函数期间完成的。也就是说它们有一个缺点,就是无法在运行过程中动态的调整debug信息的输出方式与等级,要实现这一个功能就需要通过调用一些函数接口的方式来动态调整log信息的输出等级。

gst_debug_set_default_threshold(level) //控制全局(所有类别)的log等级

gst_debug_set_threshold_for_name(name, level) //控制某一个类别的log等级,如:xxx(“videodecoder”, 5)

gst_debug_set_threshold_from_string(list, reset)//和GST_DEBUG类似,也是支持同时设置多个元组的log信息,后面一个reset参数: TRUE:清除之前的log输出设置信息,FALSE:将设置信息添加到现有的log信息设置当中

6. Create DOT file to see exact pipeline and capabilities used(使用 gst dump 出 pipeline 构成图)

In order to generate a DOT file, set the GST_DEBUG_DUMP_DOT_DIR environment variable to point to the folder where you want the .dot files to be stored.

  1. Install “dot” tool on your host machine…to do so simply install graphviz:

    sudo apt-get install graphviz

  2. On your target board, set the environment dot dump variable:
     创建用于存放数据的目录: /root

    export GST_DEBUG_DUMP_DOT_DIR=/root
    mkdir -p $GST_DEBUG_DUMP_DOT_DIR

  3. Run your pipeline, a .dot file will be generated according to each of the state changes that occur showing how the caps are negotiated during the process.

  4. Convert the dot files to PNG image files or SVG graphics files

    dot -Tpng input.dot > output.png

    dot -Tsvg input.dot > output.svg

Using SVG allows you to infinitely zoom to be able to read all the text. You can use inkscape to view and edit SVG files.

例如:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多