本文假设已经按照在Ubuntu18.04上从源码构建Gstreamer搭建GST源码环境。
Step1:验证环境:
export FFMPEG运行环境:
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
播放视频片源:
gst-play-1.0 /media/caozilong/B0509F8C509F5844/The.Godfather.Part2.Blu-ray.720p.x264.DD51-HiS@MySiLU.mkv

环境是ready的,接下来,我们就以这条播放器管道为例,观察它的拓扑结构。
Step2:可视化操作:
1.安装dot,graphviz中提供了dot命令。
sudo apt-get install graphviz
2.设置管道描述文件生成目录环境变量
Gstreamer提供了GST_DEBUG_DUMP_DOT_DIR宏定义,该宏定义用于指定整个pipeline的拓扑结构图存放的路径。拓扑结构图的格式为Dot,可以使用上一步骤安装的GraphViz工具将Dot文件转成Png,便于查看。
export GST_DEBUG_DUMP_DOT_DIR=/tmp/
这会将.dot生成的文件放在/ tmp /目录中,如果需要,可以更改该目录。
3.播放:
gst-play-1.0 /media/caozilong/B0509F8C509F5844/The.Godfather.Part2.Blu-ray.720p.x264.DD51-HiS@MySiLU.mkv
4。观察/tmp目录输出:

5.转换成PNG
dot -Tpng -o test1.png /tmp/0.00.00.337195187-gst-play.async-done.dot

dot -Tpng -o test1.png /tmp/0.16.41.192091431-gst-play.error.dot

据红色的是src element和src pad.紫色的是sink element和sink pad.绿色的是中间级element.
通过gst-inspect-1.0命令,可以深入产看每个elements的特性。

一个GST的典型应用流程:
下图用人话表示就是,应用发送给MP3解码器一笔Bitstream,在等待还帧的过程中,发生了一些事情,这些事情是,解码器分别返回了A,B两笔PCM,应用再将这两笔PCM交给Render模块处理完成之后,得到了回帧。之后将两个回帧空闲Buffer再次发送给了MP3 Codec,去填充PCM。当这些完成之后,最早发送出去的BITSTREAM IN Buffer的回帧得到了响应。

多路解码情况下的管道结构
H264裸流文件生成:
ffmpeg -i /home/caozilong/cutout1.mp4 -codec copy -bsf: h264_mp4toannexb xxx.h264
gst-launch-1.0 multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false \
multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false \
multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false \
multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false \
multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false \
multifilesrc location=xxx.h264 loop=true ! h264parse ! vaapih264dec ! "video/x-raw(memory:VASurface)" ! fakevideosink sync=false

如下是用标准X86上的GST环境抓取的管道图

gst-launch-1.0 multifilesrc location=xxx.h264 loop=true ! decodebin ! glimagesink multifilesrc location=xxx.h264 loop=true ! decodebin ! glimagesink

gstreamer task create:
gstremer task are encapsulated in function g_system_thread_new.


本文介绍了如何在Ubuntu18.04上验证Gstreamer环境,并通过dot和graphviz工具进行Gstreamer pipeline的可视化操作。详细步骤包括环境验证、安装可视化工具、设置输出目录、播放视频以及查看和转换拓扑结构图。文章还讨论了一个GST典型应用流程和多路解码的管道结构。
7080

被折叠的 条评论
为什么被折叠?



