gstreamer pipeline生成可视化图(GraphViz)
文章目录
前言
Gstreamer在日常debug时,经常会遇到抓取大量log,干扰信息提取与分析,无法明确的了解pipeline内部如何link以及caps negotiation情况,极大的降低了debug效率。
庆幸的是Gstreamer支持pipeline图形化输出,便于直观的了解到复杂pipeline中element的连接关系。gstreamer会将其输出为.dot文件,可以用GraphViz免费的程序读取,描述pipeline的拓扑结构以及每个link的caps negotiation。下文介绍如何实现运行gstreamer cmd生成可视化pipeline 流程图。(PS:默认已安装gstreamer 运行环境,gstreamer安装不在这里做介绍)
一、安装GraphViz
1. 什么是Graphviz?
Graphviz 是一款开源的图表可视化软件。图表可视化指的是用图形的方式去表示抽象图表和网络的结构化信息。在网络、生物信息学、软件工程、数据库和 Web 设计、机器学习、可视化接口等众多其他技术领域都有着重要的应用。
2.安装GraphViz
- Ubuntu
ubuntu 环境可以直接使用apt-get install命令安装。$ sudo apt-get install graphviz
- Windows
windows环境下从官网下载,按照提示一步步安装即可。
https://graphviz.org/download/
二、运行gstreamer 生成dot文件
在gstreamer中生成dot文件需要设置环境变量或debug者宏来触发。
1. gst-launch-1.0 命令行生成dot 文件
执行gst-launch-1.0 命令前,定义GST_DEBUG_DUMP_DOT_DIR环境变量,将改环境变量作为生成管道图的输出位置
export GST_DEBUG_DUMP_DOT_DIR=/tmp/
gst-launch-1.0 playbin flags=0x42 uri=file:///data/out_255.mp4
下面是使用gst-launch-1.0生成的dot文件列表,会把gstreamer STATE Change的每个过程都生成对应的.dot图
0.00.00.328088000-gst-launch.NULL_READY.dot
0.00.00.330350000-gst-launch.READY_PAUSED.dot
0.00.02.007860000-gst-launch.PAUSED_PLAYING.dot
0.00.05.095596000-gst-launch.PLAYING_PAUSED.dot
0.00.05.104625000-gst-launch.PAUSED_READY.dot
2. gstreamer application触发生成dot文件
如果想获取gstreamer application中的pipeline dot文件,则需要使用debug 宏来触发。在application中创建和link element位置添加宏:
GST_DEBUG_BIN_TO_DOT_FILE(pipeline, GST_DEBUG_GRAPH_SHOW_ALL, "pipeline")
gstreamer app 触发" GST_DEBUG_GRAPH_SHOW_ALL" sample code:
- 在demo app的头文件中添加gst/base/gstbytewriter.h
- 设置环境变量,指定输出dot文件位置
- 在状态切换为PLAYING之后,添加宏,用来导出当前状态切换情况下的pipeline dot文件。
- 运行app后,产生dot文件
三、使用Graphviz生成pipeline可视化图
1. 导出.dot文件
adb pull导出生成的.dot文件,到PC(安装Graphviz的环境下)
adb pull /tmp/0.00.01.248129077-gst-launch.READY_PAUSED.dot D:\tmp
2. 使用Graphviz将dot文件转换为可视化图
dot文件转换命令为:
dot -T{format} input_file > output_file
ex1: 转换为pdf可视化图
dot -Tpdf 0.00.01.248129077-gst-launch.READY_PAUSED.dot > test1.pdf
ex2: 转换为png可视化图
dot -Tpng -o test1.png 0.00.01.248129077-gst-launch.READY_PAUSED.dot
总结
介绍使用Graphviz tool生成gstreamer pipeline可视化视图的方法