Trying to play multiple video files at once in Gstreamer

I am trying to make a command for gstreamer to play multiple video files at the same time. So I did some research and found this

gst-launch -e videomixer name=mix ! ffmpegcolorspace ! xvimagesink \ videotestsrc pattern=1 ! video/x-raw-yuv, framerate=5/1, width=320, height=180 ! \ videobox border-alpha=0 top=0 left=0 ! mix. \ videotestsrc pattern=15 ! video/x-raw-yuv, framerate=5/1, width=320, height=180 ! \ videobox border-alpha=0 top=0 left=-320 ! mix. \ videotestsrc pattern=13 ! video/x-raw-yuv, framerate=5/1, width=320, height=180 ! \ videobox border-alpha=0 top=-180 left=0 ! mix. \ videotestsrc pattern=0 ! video/x-raw-yuv, framerate=5/1, width=320, height=180 ! \ videobox border-alpha=0 top=-180 left=-320 ! mix. \ videotestsrc pattern=3 ! video/x-raw-yuv, framerate=5/1, width=640, height=360 ! mix. 

This output image = http://i.stack.imgur.com/4lZWL.png

and here is the code that I modified, suppose it will be

http://i.stack.imgur.com/Mdsc0.png

 time gst-launch -e videomixer name=mix ! ffmpegcolorspace ! xvimagesink \ filesrc location=./Cityscape1Min_720p_mp4.mp4 ! video/x-raw-yuv, framerate=5/1, \ width=320, height=180 ! videobox border-alpha=0 top=0 left=0 ! mix. \ filesrc location=./Cityscape1Min_720p_mp4.mp4 ! video/x-raw-yuv, framerate=5/1, \ width=320, height=180 ! videobox border-alpha=0 top=0 left=-320 ! mix. \ filesrc location=./Cityscape1Min_720p_mp4.mp4 ! video/x-raw-yuv, framerate=5/1, \ width=320, height=180 ! videobox border-alpha=0 top=-180 left=0 ! mix. \ filesrc location=./Cityscape1Min_720p_mp4.mp4 ! video/x-raw-yuv, framerate=5/1, \ width=320, height=180 ! videobox border-alpha=0 top=-180 left=-320 ! mix. 

But that will not work. Anyone have any other solutions?

+6
source share
2 answers

I like this approach, it will create a 2x2 matrix. sink_0 is your background, you can also set it as an image. Additional information about the picture in the picture .

 gst-launch -e \ videomixer name=mix \ sink_0::xpos=0 sink_0::ypos=0 sink_0::alpha=0\ sink_1::xpos=0 sink_1::ypos=0 \ sink_2::xpos=200 sink_2::ypos=0 \ sink_3::xpos=0 sink_3::ypos=100 \ sink_4::xpos=200 sink_4::ypos=100 \ ! xvimagesink \ videotestsrc pattern="black" \ ! video/x-raw-yuv,width=400,height=200 \ ! mix.sink_0 \ uridecodebin uri='file:///home/user/video/test1.mp4' \ ! ffmpegcolorspace ! videoscale \ ! video/x-raw-yuv,width=200,height=100 \ ! mix.sink_1 \ uridecodebin uri='file:///home/user/video/test2.mp4' \ ! ffmpegcolorspace ! videoscale \ ! video/x-raw-yuv,width=200,height=100 \ ! mix.sink_2 \ uridecodebin uri='file:///home/user/video/test.avi' \ ! ffmpegcolorspace ! videoscale \ ! video/x-raw-yuv,width=200,height=100 \ ! mix.sink_3 \ uridecodebin uri='mms://server/video/test.wmv' \ ! ffmpegcolorspace ! videoscale \ ! video/x-raw-yuv,width=200,height=100 \ ! mix.sink_4 \ 
+3
source

Remove framerate=5/1 from all of your actual videos. For me, only videotestsrc can be changed using framerate capfilter.

 gst-launch-0.10 -e videomixer name=mix ! ffmpegcolorspace ! xvimagesink \ uridecodebin uri=file:///home/user/Desktop/sintel_trailer-480p.webm ! \ ffmpegcolorspace ! videoscale ! \ video/x-raw-yuv, width=320, height=180 ! \ videobox border-alpha=0 top=0 left=0 ! mix. \ videotestsrc pattern=15 ! \ video/x-raw-yuv, width=320, height=180 ! \ videobox border-alpha=0 top=0 left=-320 ! mix. \ videotestsrc pattern=13 ! \ video/x-raw-yuv, width=320, height=180 ! \ videobox border-alpha=0 top=-180 left=0 ! mix. \ videotestsrc pattern=0 ! \ video/x-raw-yuv, width=320, height=180 ! \ videobox border-alpha=0 top=-180 left=-320 ! mix. \ videotestsrc pattern=3 ! \ video/x-raw-yuv, framerate=5/1, width=640, height=360 ! mix. 
0
source

Source: https://habr.com/ru/post/897364/


All Articles