2010-06-14 69 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来编写管道,以便更好地进行调试。