使用gstreamer API实现功能时,我一般先用gst-launch-1.0验证可行性和效果,然后再编码实现,这个过程中需要分析下各element的连接关系,而gstreamer提供了一套机制生成dot文件,方便我们查看各个阶段的dot图。
命令行
命令行只需要设置环境变量GST_DEBUG_DUMP_DOT_DIR即可,例如:
GST_DEBUG_DUMP_DOT_DIR=. gst-launch-1.0 filesrc location=sintel_trailer-480p.ogv ! decodebin name=decode ! videoscale ! "video/x-raw,width=320,height=240" ! x264enc ! queue ! mp4mux name=mux ! filesink location=320x240.mp4 decode. ! audioconvert ! avenc_aac ! queue ! mux.
会生成pipeline状态转换时的dot文件
ls *.dot
0.00.00.338833216-gst-launch.NULL_READY.dot 0.00.05.754936518-gst-launch.PLAYING_PAUSED.dot
0.00.00.568036395-gst-launch.READY_PAUSED.dot 0.00.05.760536591-gst-launch.PAUSED_READY.dot
0.00.00.570132427-gst-launch.PAUSED_PLAYING.dot
dot文件需要用dot命令转换为png,svg等格式的图片方便查看,dot命令通过graphviz来安装
sudo apt install graphviz
转换为图片
dot -Tsvg 0.00.00.570132427-gst-launch.PAUSED_PLAYING.dot -o test.svg
dot -Tpng 0.00.00.570132427-gst-launch.PAUSED_PLAYING.dot -o test.png
C代码
先可以通过运行命令时,设置环境变量GST_DEBUG_DUMP_DOT_DIR,或者代码里面导入环境变量。然后在需要的时候调用GST_DEBUG_BIN_TO_DOT_FILE()
或者GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()
来生成dot文件,一般是在状态转换时调用即可。