Gstreamer:如何在一个窗口中获得同一视频流的三个副本?

Gstreamer:如何在一个窗口中获得同一视频流的三个副本?,gstreamer,Gstreamer,我想用电脑而不是三台投影仪来复制。 我认为使用gstreamer应该很简单:只需使用tee复制来自摄影机的流,并使用videomixer将三张相同的图片放在一张上 这里我使用“videotestsrc pattern=1”作为我希望复制的流,使用“videotestsrc pattern=“black”作为整个屏幕的背景 #!/bin/bash gst-launch -v \ videotestsrc pattern=1 ! video/x-raw-yuv,width=200,heigh

我想用电脑而不是三台投影仪来复制。 我认为使用gstreamer应该很简单:只需使用tee复制来自摄影机的流,并使用videomixer将三张相同的图片放在一张上

这里我使用“videotestsrc pattern=1”作为我希望复制的流,使用“videotestsrc pattern=“black”作为整个屏幕的背景

#!/bin/bash
gst-launch -v \
    videotestsrc pattern=1 ! video/x-raw-yuv,width=200,height=200 \
        ! tee name=t \
    videomixer name=mix \
          sink_0::xpos=0   sink_0::ypos=0 \
          sink_1::xpos=100 sink_1::ypos=0 \
          sink_2::xpos=200 sink_2::ypos=200 \
          sink_3::xpos=0   sink_3::ypos=200 \
        ! ffmpegcolorspace ! xvimagesink \
    videotestsrc pattern="black" ! video/x-raw-yuv,width=400,height=400 \
        ! mix.sink_0 \
    t. ! queue ! mix.sink_1 \
    t. ! queue ! mix.sink_2 \
    t. ! queue ! mix.sink_3 \
问题是我只得到两个副本:一个对应于sink_1,另一个对应于sink_2。 如果我交换最后两行,那么我只得到sink_1和sink_3


所以问题是如何显示所有三份副本?

Yoa!为每个i=0..3添加sink_i::zorder=i解决了这个问题。

类似这样的东西

gst-launch -v \
videotestsrc pattern=1 ! video/x-raw-yuv,width=200,height=200 \
    ! tee name=t \
videomixer name=mix \
      sink_0::xpos=0   sink_0::ypos=0    sink_0::zorder=0\
      sink_1::xpos=100 sink_1::ypos=0    sink_1::zorder=1\
      sink_2::xpos=200 sink_2::ypos=200  sink_2::zorder=2\
      sink_3::xpos=0   sink_3::ypos=200  sink_3::zorder=3\
    ! ffmpegcolorspace ! xvimagesink \
videotestsrc pattern="black" ! video/x-raw-yuv,width=400,height=400 \
    ! mix.sink_0 \
t. ! queue ! mix.sink_1 \
t. ! queue ! mix.sink_2 \
t. ! queue ! mix.sink_3