2011-09-15 137 views
6

我試圖爲gstreamer發出一個命令,以便它可以同時播放多個視頻文件。所以我做了一些研究,發現這一個試圖在Gstreamer中同時播放多個視頻文件

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. 

這是輸出圖像= http://i.stack.imgur.com/4lZWL.png

,這裏是我修改的假設是這樣的

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. 
代碼

但它不起作用。任何人有其他解決方案

+0

猜你需要解碼你的視頻文件。嘗試插入'decodebin2!每個'videobox'元素前的videorate!'。 –

+0

還是不行。錯誤說Stream不包含數據 –

+0

'Stream不包含數據'?您確定您可以使用沒有視頻混合器的管道自行播放文件嗎? –

回答

3

我喜歡這種方法,它會創建一個2x2矩陣。 sink_0是您的背景,您也可以將其設置爲圖像。更多關於picture in 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 \ 
+0

是否可以使用單個'videosrc'創建矩陣2x2? – CAMOBAP

0

從您所有的實際視頻中刪除framerate=5/1。對我而言,只有videotestsrc可以用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. 
相關問題