2010-06-14 99 views
7

這工作:這個gstreamer管道爲什麼失速?

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 

我可以讓它運行了一段時間,殺死它,然後totem gst.avi顯示一個很好的測試卡音。

然而,試圖做類似

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 

更加有用它只是顯示

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

,然後無限期停止。

獲取帶有decodebin滾動版本的技巧是什麼?

回答

3

啊哈...這做什麼,我想:

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 

隊列元素(前沿和後)就顯得至關重要。

進一步的實驗將像videoflip事物或

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

進入管道的視頻部分如預期的所有工作。

+2

當多路複用或多路分解時,需要有緩衝區。這就是隊列元素的來源。您可以通過指定隊列中緩衝區的數量來進一步微調它。 – 2010-06-16 03:02:54

+0

感謝您的提示。當上面的流水線對640x480視頻有效時,我不得不提高尾隨視頻隊列的最大字節數,以使它不會與1280x720內容發生死鎖。 – timday 2010-06-17 12:51:55

0

你的管道似乎是正確的。然而,gst-launch是一個有限的工具 - 我會建議使用python或ruby來編寫管道,以便更好地進行調試。