2011-09-15 4 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

여전히 할 수 없습니다. 오류는 스트림에 데이터가 없음을 나타냅니다. –

+0

'스트림에는 데이터가 없습니다'? videomixer가없는 파이프 라인으로 파일을 단독으로 재생할 수 있습니까? –

답변

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을 삭제하십시오. 나를 위해서 videotestsrcframerate 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. 
관련 문제