如何使用gstreamer将4个视频作为1,左边1个大,右边3个(这些应该高于1)?

时间:2017-12-24 09:22:42

标签: gstreamer

这就是我想要实现的目标

enter image description here

我一直在尝试使用视频播放器插件,但我得到的只是4个同样大小的盒子

3 个答案:

答案 0 :(得分:0)

所以这很大程度上取决于你想做什么和做什么。例如,这可以是简单的GUI应用程序,在4个不同的表面上呈现4个视频,GUI负责布局。

如果你真的想要创建一个包含这4个视频流的新单个图像,那么(?, 15)听起来就好了。请看这里的一些例子:

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-videomixer.html

答案 1 :(得分:0)

我以前做了类似你用3台相机描述的东西。

这是我用过它的管道:

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, width=800,  height=480,  framerate=25/1 ! alpha alpha=1.0 ! videobox left=-800 ! videomixer name=mix sink_00::xpos=0 sink_01::xpos=800 sink_02::xpos=0 sink_02::ypos=480 sink_00::alpha=1.0 sink_01::alpha=1.0 sink_02::alpha=1.0 ! videoconvert ! xvimagesink \
               v4l2src device=/dev/video1 ! video/x-raw, width=1600, height=1200, framerate=25/1 ! alpha alpha=1.0 ! videobox border-alpha=0 top=-480  ! mix. \
               v4l2src device=/dev/video2 ! video/x-raw, width=800,  height=480,  framerate=25/1 ! alpha alpha=1.0 ! videobox border-alpha=0 left=-00  ! mix. -e

您需要为每个视频捕捉使用videobox元素(在这种情况下,我使用了v4l2src但您可以使用其他来源,例如filesrc ! decodebin或网络来源)管道和组合它们位于videomixer元素中。

在我的情况下,我在左侧使用了一个视频,在右侧使用了两个视频,但您可以调整lefttop元素的videoboxsink_0x::xpos' and 'sink_0x::ypos参数videomixer元素。

请务必向每个频道添加alpha,否则您的视频将是透明的。

答案 2 :(得分:0)

我使用类似的方法将正在运行的流混合为一个

/usr/local/bin/gst-launch-1.0 -vv -e videomixer name=mix background=2 \
        sink_0::alpha=1.0 \
        sink_0::ypos=0 \
        sink_0::xpos=0 \
        sink_1::alpha=1.0 \
        sink_1::ypos=80 \
        sink_1::xpos=40 \
        sink_2::alpha=1.0 \
        sink_2::ypos=80 \
        sink_2::xpos=410 \
        sink_3::alpha=1.0 \
        sink_3::ypos=80 \
        sink_3::xpos=780 \
        sink_0::zorder=1 \
        sink_1::zorder=3 \
        sink_2::zorder=3 \
        sink_3::zorder=4 \
        ! clockoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=top \
        ! timeoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=bottom \
        ! queue \
            ! nvh264enc preset=1 bitrate=1500 rc-mode=2 gop-size=10 \
            ! h264parse config-interval=-1 \
            ! mpegtsmux ! rtpmp2tpay pt=33 \
            ! udpsink host=239.255.42.61 port=5004 multicast-iface=10g-1 ttl=4 ttl-mc=4 \
        multifilesrc location=/IMG/logo.jpg caps="image/jpeg,framerate=1/1" \
            ! jpegdec ! videoconvert ! videoscale \
                ! video/x-raw,width=1920,height=1080 \
            ! mix.sink_0 \
        udpsrc multicast-group=239.255.42.60 address=239.255.42.60 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
                ! mix.sink_1 \
        udpsrc multicast-group=239.255.42.57 address=239.255.42.57 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
            ! mix.sink_2 \
        udpsrc multicast-group=239.255.42.62 address=239.255.42.62 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
            ! mix.sink_3 \