Gstreamer: как получить три копии одного и того же видеопотока в одном окне? - PullRequest
2 голосов
/ 29 ноября 2010

Я пытаюсь воспроизвести "Фракталы без компьютера" , но с компьютером вместо трех проекторов. Я думаю, что это должно быть довольно просто сделать с gstreamer: просто скопируйте поток с камеры с tee и поместите три одинаковых изображения на одно с видеомиксером .

Здесь я использую ' 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 \

Проблема в том, что я получаю только две копии: одна соответствует стоку_1, а другая - стоку_2. Если я поменяю последние две строки, то получу только sink_1 и sink_3.

Итак, вопрос в том, как показать все три копии?

Ответы [ 2 ]

5 голосов
/ 08 сентября 2011

как то так

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 
4 голосов
/ 30 ноября 2010

Yoa!добавление sink_i :: zorder = i для каждого i = 0..3 решает проблему.

...