GStreamer Basic tutorial 学习笔记(十一)

Debugging工具

目标

  1. 如何获取更多的GStreamer调试信息(设置环境变量)。
  2. 如何将自己的调试信息打印到GStreamer日志中(重定向)。
  3. 如何获取管道图形(GraphViz)。

调试日志

介绍:GStreamer的调试日志非常详细,当完全启用时,可能会导致应用程序无响应(由于控制台滚动)或填满几百兆字节的文本文件(当重定向到文件时)。因此,日志被分类,很少需要同时启用所有类别。

第一个类别是调试级别(Debug Level),它是一个指定所需输出量的数字:

# 名称 描述
0 none 不输出任何调试信息。
1 ERROR 记录所有 fatal errors。这些是不允许core或element执行请求操作的错误。如果应用程序编程处理触发错误的条件,仍然可以恢复。
2 WARNING 记录所有warnings。通常这些不是致命的,但预计会出现用户可见的问题。
3 FIXME 记录所有“fixme”消息。这些通常是已知不完整的代码路径被触发的消息。它在大多数情况下可能发生,但可能在特定情况下导致问题。
4 INFO 记录所有信息性(informational)消息。这些通常用于系统中仅发生一次的事件,或者是重要且稀有到足以在此级别记录的事件。
5 DEBUG 记录所有调试(debug)消息。这些是发生在对象生命周期中有限次数的一般调试消息。这包括设置(setup)、拆卸(teardown)、更改参数等。
6 LOG 记录所有日志(log)消息。这些是在对象生命周期中重复发生的事件,包括流媒体和稳定状态的情况。这适用于每个元素中的每个缓冲区发生的日志消息。
7 TRACE 记录所有跟踪(trace)消息。这些是非常频繁发生的消息。例如,每当修改GstBuffer或GstEvent等GstMiniObject的引用计数时会生成trace消息。
9 MEMDUMP 记录所有内存转储消息。这是最重量级的日志记录,可能包括转储内存块的内容。

使用说明

  • 要启用调试输出,将GST_DEBUG环境变量设置为所需的调试级别。低于该级别的所有级别也将显示(例如,如果您将GST_DEBUG设置为2,您将获得ERRORWARNING消息)。
  • 此外,每个GStreamer的插件或部分都定义了自己的类别,因此您可以为每个单独的类别指定调试级别。例如,GST_DEBUG=2,audiotestsrc:6,将为audiotestsrc元素使用调试级别6,对于其他所有元素使用级别2
  • 因此,GST_DEBUG环境变量是一个以逗号分隔的类别列表:级别对的列表,其中级别是可选的,表示所有类别的默认调试级别。
  • 还可以使用’'通配符。例如,GST_DEBUG=2,audio:6将为所有以音频开头的类别使用调试级别6GST_DEBUG=*:2等效于GST_DEBUG=2
  • 使用gst-launch-1.0 --gst-debug-help获取所有已注册类别的列表。请记住,每个插件都会注册自己的类别,因此,在安装或删除插件时,此列表可能会发生变化。
  • 当GStreamer总线上发布的错误信息无法帮助您找出问题时,请使用GST_DEBUG。通常的做法是将输出日志重定向到文件,然后稍后检查它,搜索特定的消息。

图形化输出

步骤

  • 当管道变得过于庞大且你无法跟踪其连接关系时,GStreamer提供了输出图形文件的功能。这些文件是.dot文件,可以用像GraphViz这样的免费程序读取,描述了管道的拓扑结构以及每个链接中的caps negotiation
  • 当使用playbinuridecodebin等一体化元素时,这也非常方便,因为它们在内部实例化了多个元素。使用.dot文件可以了解它们内部创建了什么样的管道(同时还能学习一些GStreamer的知识)。
  • 要获取.dot文件,只需将GST_DEBUG_DUMP_DOT_DIR环境变量设置为指向想要放置文件的文件夹。gst-launch-1.0在每次状态变化时都会创建一个.dot文件,这样您就可以看到caps negotiation的演变过程。取消设置该变量即可禁用此功能。在应用程序内部,您可以使用GST_DEBUG_BIN_TO_DOT_FILE()GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()宏根据需要生成.dot文件。

函数与知识点

  1. GST_DEBUG_CATEGORY_INIT() 功能:使用给定的属性初始化一个新的GstDebugCategory,并设置为默认阈值。
  2. GST_DEBUG_BIN_TO_DOT_FILE() 功能:为了帮助调试应用程序,可以使用此方法将构成管道的整个GStreamer元素网络写入一个dot文件中。可以使用graphviz处理该文件,生成一个图像。
  3. GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS() 功能:这个方法类似于GST_DEBUG_BIN_TO_DOT_FILE(),但是在文件名中添加了当前的时间戳,以便可以用来拍摄多个快照。

你可能感兴趣的:(GStreamer学习笔记,c++,GStreamer,服务器,webrtc)