Gstreamer用三个流合成图像

Posted

技术标签:

【中文标题】Gstreamer用三个流合成图像【英文标题】:Gstreamer Compositing image with three streams 【发布时间】:2016-11-16 18:55:57 【问题描述】:

我正在尝试使用 gstreamer 的 videomixer 插件合成三个流。 我找到了这个线程Combine multiple images with gstreamer,我可以设法将我的两个流并排放置,但我不知道如何添加第三个。有人可以帮忙吗?

我使用和工作的原始命令:

gst-launch-1.0 uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! videomixer name=m sink_1::xpos=320 ! autovideosink uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m.

我的版本有两个 udp 流,也可以:

gst-launch-1.0 -v udpsrc port=9000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! avdec_h264 ! videoconvert ! videomixer name=m sink_1::xpos=640 ! autovideosink -v udpsrc port=9001 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! avdec_h264 ! videoconvert! m.

但是如何添加第三个流?

【问题讨论】:

【参考方案1】:

为什么只停在 3,让我们做 4 :)

gst-launch-1.0 uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! videomixer name=m sink_1::xpos=320 sink_2::ypos=240 sink_3::xpos=320 sink_3::ypos=240 ! autovideosink uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m.  uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m. uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m.

让格式更好一点:

gst-launch-1.0 \
videomixer name=m sink_1::xpos=320 sink_2::ypos=240 sink_3::xpos=320 sink_3::ypos=240 ! autovideosink \
uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m. \
uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m. \
uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m. \
uridecodebin uri=http://old.koniclab.info/fileadmin/images/koniclab_logo_negro.png ! videoscale ! video/x-raw, width=320, height=240 ! imagefreeze ! m.

在处理结束时开始创建元素没有问题..使用gst-launch您只需定义哪些元素链接到哪些其他元素..其余的gst-launch可以自己解决..

您只需复制粘贴创建输入的部分,无论它是什么,最后链接到 m。 ..那么你需要添加另一个 sink_XX::some-pos=ZZZ。

我想你可以弄清楚其余的。

HTH

【讨论】:

谢谢你,这很有效,而且确实看起来格式很好。出于某种原因,我收到一条错误消息,指出没有 glvideomixer 元素,但使用 videomixer 可以。 @alainbaumann 更改为 videomixer.. 如果它解决了您的问题,您可以在投票数下方打勾来接受问题,如果您真的喜欢它,您也可以投票

以上是关于Gstreamer用三个流合成图像的主要内容,如果未能解决你的问题,请参考以下文章

初探 gstream

GStreamer基础教程02 - 基本概念

安装 Gstreamer 后没有这样的元素 filesrc

Sailfish OS下的gstreamer没有输出声音

使用 OpenCV 2.4.8 的 gstreamer 管道程序引发运行时错误

如何在一个流中合成多个图像