管道无法完成从“就绪”到“暂停”的转换

时间:2019-03-28 17:07:16

标签: gstreamer

我正在使用一个流水线,该流水线应播放一个文件,并同时为其他目的生成可缩放的版本(因此,应用程序接收器也是如此)。

管道如下:

gst-launch-1.0.exe filesrc location=a.mp4 ! decodebin ! tee name=fork 
   fork. ! queue ! videoconvert ! autovideosink 
   fork. ! queue ! videoconvert ! videoscale ! video/x-raw,format=I420,width=320,height=180 ! x264enc ! appsink

,并且不会完成从“就绪”到“暂停”的转换。如果我执行以下任一操作,它将完成过渡(然后通过移动到PLAYING可以正确播放):

  1. 删除从tee退出的两个分支之一(因此x264enc可以正常工作)
  2. 将x264enc元素从分支标题移至appsink。

这里有一张图,它的管道非常接近上面的管道,显示了相同的问题。 “有罪”元素是仍然处于READY-> PAUSED转换的appsink,但是我看不到任何原因。顺便说一句,如果我从appsink分支中删除了x264enc,它将起作用!

为什么? Pipeline

1 个答案:

答案 0 :(得分:0)

尝试使用tune=zerolatency元素的选项x264enc。或者,在queue之后增加tee的大小。原因是x264enc的默认配置比默认queue的延迟高。例如。它消耗的能量比产生任何数据之前其他queue路径所能容纳的更多。因此,这两个分支彼此僵局,无法预滚动。