2010-06-14 8 views
7

Dies funktioniert:Warum steht diese Gstreamer-Pipeline still?

gst-launch-0.10 \ 
videotestsrc ! ffmpegcolorspace ! 'video/x-raw-yuv' ! mux. \ 
audiotestsrc ! audioconvert ! 'audio/x-raw-int,rate=44100,channels=1' ! mux. \ 
avimux name=mux ! filesink location=gst.avi 

Ich kann es für eine Weile laufen lassen, es töten, und dann totem gst.avi zeigt eine schöne Testkarte mit Ton.

jedoch versuchen, etwas nützlicher wie

gst-launch-0.10 \ 
filesrc location=MVI_2034.AVI ! decodebin name=dec \ 
dec. ! ffmpegcolorspace ! 'video/x-raw-yuv' ! mux. \ 
dec. ! audioconvert ! 'audio/x-raw-int,rate=44100,channels=1' ! mux. \ 
avimux name=mux ! filesink location=gst.avi 

zu tun, zeigt es nur

Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 

und dann auf unbestimmte Zeit Ständen.

Was ist der Trick, um die Version mit decidebin rollen zu bekommen?

Antwort

3

Aha ... das tut, was ich will:

gst-launch-0.10 \ 
filesrc location=MVI_2034.AVI ! decodebin name=dec \ 
dec. ! queue ! ffmpegcolorspace ! 'video/x-raw-yuv' ! queue ! mux. \ 
dec. ! queue ! audioconvert ! 'audio/x-raw-int,channels=1' ! audioresample ! 'audio/x-raw-int,rate=44100' ! queue ! mux. \ 
avimux name=mux ! filesink location=gst.avi 

Die Warteschlangenelemente (beide Vorder- und Hinter) entscheidend zu sein scheinen.

Weitere Experimente Dinge wie videoflip oder

videorate ! 'video/x-raw-yuv,framerate=25/1' 

in den Video-Teil der Pipeline arbeiten alle wie erwartet hinzugefügt wird.

+2

Beim Muxen oder Demuxen sind Puffer erforderlich. Hier kommen die Warteschlangenelemente ins Spiel. Sie können die Feinabstimmung noch verfeinern, indem Sie die Anzahl der Puffer in der Warteschlange angeben. –

+0

Danke für den Tipp. Stellt sich heraus, während die obige Pipeline für 640x480 Video funktioniert, musste ich die maximale Größe Bytes der abschließenden Videowarteschlange erhöhen, um es mit 1280x720 Inhalt nicht zu Deadlock zu bekommen. – timday

0

Ihre Pipeline scheint korrekt zu sein. gst-launch ist jedoch ein limitiertes Tool - ich würde vorschlagen, die Pipeline in Python oder Ruby für besseres Debuggen zu programmieren.