相关连接:https://blog.csdn.net/knowledgebao/article/details/84621238
目录
4.2,element的*_class_init函数增加如下代码:
1. log调试信息的函数
1.1 最基本的log输出宏
GST_CAT_LEVEL_LOG(cat,level,object,...)
其中
- cat:表示category,用于区分log信息的类别,在后面说到debug level等信息的设置的时候会用到,可以是plugin名称或element名称或者是plugin或element的部分字符;
- level:表示当前输出的这条log信息属于哪一个等级,具体的等级定义,将在后文中介绍;
- obj:表示输出的log信息属于哪一个GObject(一般指element),注:此项可以设置为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之类的函数,因为他们无法控制是否输出
2,日志级别定义:
https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html
- 0: 什么都不打印
- 1: 打印error的信息
- 2: 打印error,warning 的信息
- 3: 打印error warning,FIXME的信息
- ...
3,控制日志输出:
3.1. 使用命令行参数开启或设置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”
3.2. 使用环境变量开启或设置debug信息
gstreamer中还可以使用环境变量开启或关闭debug信息,此环境变量为:GST_DEBUG,其使用方式和命令行参数 –gst-debug 一样,都是有一对对 category_name:LEVEL 这样的二元组构成,二元组与二元组之间使用 “,”(逗号)隔开。
注意:
1. 二元组与二元组之间只能用逗号隔开,其不能有空格等其他符号;
2. category_name支持"*"通配符, 如 "GST_ELEMENT_*:4"
比如:
cat /etc/profile下增加GST_DEBUG变量(ffdecode,ffencode都是element,6是日志级别):
export GST_DEBUG=ffdecode:6,ffencode:6
3.3. 在代码中动态设置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信息设置当中
4,定义自己的LOG模块:
4.1,element实现的.c文件开始位置增加如下代码:
GST_DEBUG_CATEGORY_STATIC (gst_ff_enc_ele_debug);
#define GST_CAT_DEFAULT gst_ff_enc_ele_debug
4.2,element的*_class_init函数增加如下代码:
GST_DEBUG_CATEGORY_INIT(gst_ff_enc_ele_debug, "ffEnc",
0, "ffmpeg Encode");
参考资料:
- https://blog.csdn.net/knowledgebao/article/details/82802454
- https://blog.csdn.net/xuanwolanxue/article/details/62236413
有任何问题,请联系:knowledgebao@163.com