gstreamer学习笔记(1): 调试相关

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

1. log调试信息的函数

在 gstreamer 1.8.1版本中定义了如下的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之类的函数,因为他们无法控制是否输出         

2. debug level

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

typedef enum {
  GST_LEVEL_NONE = 0,
  GST_LEVEL_ERROR = 1,
  GST_LEVEL_WARNING = 2,
  GST_LEVEL_FIXME = 3,
  GST_LEVEL_INFO = 4,
  GST_LEVEL_DEBUG = 5,
  GST_LEVEL_LOG = 6,
  GST_LEVEL_TRACE = 7,
  /* add more */
  GST_LEVEL_MEMDUMP = 9,
  /* add more */
  GST_LEVEL_COUNT
} GstDebugLevel;

也就是说,gstreamer1.8.1当中将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信息设置当中

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。关于通过UDP传输音视频,我了解一些相关的知识,下面是一些学习笔记: 1. gstreamer是一个流媒体框架,用于创建、处理和播放多媒体流。它支持多种音视频格式,可以通过插件扩展功能。 2. 通过gstreamer可以使用UDP协议传输音视频数据。UDP协议是一种无连接的协议,不保证数据传输的可靠性和顺序性,但是传输效率高。 3. 首先需要创建一个gstreamer的pipeline,包括音视频源、编码器、UDP发送端等组件。例如: ``` gst-launch-1.0 -v filesrc location=test.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.168.1.100 port=5000 ``` 这个pipeline的作用是从test.mp4文件读取音视频流,解码后使用x264编码器进行压缩,然后使用rtph264pay将数据打包成RTP数据包,最后通过udpsink发送到指定的IP地址和端口。 4. 接收端需要创建一个gstreamer的pipeline,包括UDP接收端、解包器、解码器等组件。例如: ``` gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! autovideosink ``` 这个pipeline的作用是从UDP端口5000接收音视频数据,使用rtpjitterbuffer解决网络抖动问题,使用rtph264depay将RTP数据包解包成原始的H.264数据流,然后使用avdec_h264解码器进行解码,最后使用autovideosink播放视频。 5. 在实际使用过程中,还需要考虑数据的带宽限制、网络延迟等问题,以保证音视频传输的效果。 希望这些笔记能对你有帮助。如果你还有其他问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值