DeepStream4.0系列之pipeline分析工具

点击查看系列文章目录

0 背景

deepstream是基于gstreamer开发的,因此里边涉及的基本概念都是gstreamer中的,比如element、pipeline、pad等等,这些基本概念大家可以参考《GStreamer基础教程2:基本概念》。当然不比纠结这些名词的定义,大家在使用过程中,会逐渐了解这些概念的。

本文我们介绍的一个工具是pipeline分析工具。我们创建deepstream应用时,本质上就是在创建不同的pipeline,有了pipeline才能实现各种各样的功能。但对于初学者来说,手动创建pipeline不是一件容易的事情。如果有一个可视化的工具,能把pipeline的结构显示出来,岂不是很直观。话不多说,接下来就介绍如何实现这个功能。

1 安装依赖

在开始之前,假设你的系统上已经安装过gstreamer库,唯一需要安装的依赖是graphviz,这个工具可以将我们调试生成的.dot文件转化为图像或者pdf文件,便于查看

sudo apt-get install graphviz

2 生成pipeline图

有两种方式可以创建pipeline,即使用gst-launch-1.0和使用应用程序的方式。但无论哪种方式,我们都需要先定义一下GST_DEBUG_DUMP_DOT_DIR环境变量,GStreamer使用此环境变量作为生成的管线图的输出位置。我们直接修改~/.bashrc文件

export GST_DEBUG_DUMP_DOT_DIR=/home/nvidia/pipeline/

修改后source ~/.bashrc,gstreamer不会自动创建该路径 ,需要你提前创建好

2.1 gst-launch-1.0创建

如果您使用gst-launch-1.0,则每次更改pipeline状态时都会生成一个新的pipeline图。如果您想了解程序运行期间pipeline的演变方式,这将特别有用。gst-launch-1.0的使用方法参考《GStreamer基础教程10:GStreamer工具》,这里不阐开介绍。

每次运行gst-launch-1.0指令后,就会在上边环境变量设置的目录里生成dot文件。

2.2 应用程序创建

如果您使用的是自定义GStreamer应用程序,则需要使用GStreamer调试宏来触发管道生成。

例如,要查看完整的管道图,可以在应用程序中创建并链接完pipeline element的位置添加以下宏调用:

GST_DEBUG_BIN_TO_DOT_FILE(pipeline, GST_DEBUG_GRAPH_SHOW_ALL, "pipeline")

eg:GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN (appCtx->pipeline.pipeline),GST_DEBUG_GRAPH_SHOW_ALL,"ds-app-playing");

GST_DEBUG_BIN_TO_DOT_FILE 宏的定义如下

#define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) gst_debug_bin_to_dot_file (bin, details, file_name)

其中gst_debug_bin_to_dot_file原型定义如下

gst_debug_bin_to_dot_file (GstBin * bin,
                           GstDebugGraphDetails details,
                           const gchar * file_name)

第一个参数是要分析的pipeline;

第二个参数是输出图所包含的信息情况,共有以下选择

GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE (1) – show caps-name on edges
GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS (2) – show caps-details on edges
GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS (4) – show modified parameters on elements
GST_DEBUG_GRAPH_SHOW_STATES (8) – show element states
GST_DEBUG_GRAPH_SHOW_FULL_PARAMS (16) – show full element parameter values even if they are very long
GST_DEBUG_GRAPH_SHOW_ALL (15) – show all the typical details that one might want
GST_DEBUG_GRAPH_SHOW_VERBOSE (4294967295) – show all details regardless of how large or verbose they make the resulting output

第三个参数是输出文件的名字。

除了GST_DEBUG_BIN_TO_DOT_FILE 这个宏以外,还有GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS可以使用,参数及使用方法与GST_DEBUG_BIN_TO_DOT_FILE 完全相同,区别在于输出文件带有时间戳信息,便于我们获得不同时刻创建的pipeline情况。如果自己的pipeline没有经常改变,我们使用GST_DEBUG_BIN_TO_DOT_FILE产生一次pipeline图即可。

如果运行后没有如期生成dot文件,可以再执行下设置环境变量的指令。

3 文件转换

经过上述步骤生成的dot文件不能直接打开,我们需要使用graphviz工具来转换成图片或者pdf文件

使用方式如下

dot -T{format} input_file > output_file

例如转化成pdf文件

dot -Tpdf ***.dot > ***.pdf

转化成png图像

dot -Tpng ***.dot > ***.png

转化成jpg图像

dot -Tjpg ***.dot > ***.jpg

4 批量转换脚本

如果你经常使用gst-launch-1.0来进行管道测试,会在目录下生成一堆dot文件,你可以使用下边的脚本来批量转换

#!/bin/sh

MESON_BUILD_ROOT="${MESON_BUILD_ROOT:-build}"
INPUT_DIR="${INPUT_DIR:-$MESON_BUILD_ROOT/pipeline}"

if [ -d "$INPUT_DIR" ]; then
    DOT_FILES=`find build/pipeline -name "*.dot"`
    for file in $DOT_FILES
    do
        dest=`sed s/.dot/.pdf/ <<< "$file"`
        dot -Tpdf $file > $dest
    done
else
    echo "Input directory $INPUT_DIR does not exist"
fi

 

你可能感兴趣的:(deepstream,视频开发)