管道未完成从 READY 到 PAUSED 的转换
Pipeline does not complete transition from READY to PAUSED
我正在使用一个管道来播放一个文件,同时为其他目的生成一个缩放版本(因此是 appsink)。
管道如下:
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
并且没有完成从 READY 到 PAUSED 的转换。如果我执行以下操作之一,它将完成转换(然后通过移动到 PLAYING 正确播放):
- 删除从 tee 退出的两个分支之一(因此 x264enc 单独工作)
- 从指向 appsink 的分支标题中删除 x264enc 元素。
这里有一张图,其中的管道与上面的管道非常接近,显示了同样的问题。 'guilty' 元素是仍在 READY->PAUSED 转换中的 appsink,但我看不出有任何原因。顺便说一下,如果我从 appsink 分支中删除 x264enc,它就可以工作了!
为什么?
为 x264enc
元素尝试选项 tune=zerolatency
。或者在 tee
之后增加 queue
大小。这样做的原因是 x264enc
在其默认配置中的延迟比默认 queue
大小要长。例如。在它产生任何数据之前,它消耗的比其他 queue
路径可以容纳的更多。所以这两个分支相互死锁,无法预滚动。
我正在使用一个管道来播放一个文件,同时为其他目的生成一个缩放版本(因此是 appsink)。
管道如下:
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
并且没有完成从 READY 到 PAUSED 的转换。如果我执行以下操作之一,它将完成转换(然后通过移动到 PLAYING 正确播放):
- 删除从 tee 退出的两个分支之一(因此 x264enc 单独工作)
- 从指向 appsink 的分支标题中删除 x264enc 元素。
这里有一张图,其中的管道与上面的管道非常接近,显示了同样的问题。 'guilty' 元素是仍在 READY->PAUSED 转换中的 appsink,但我看不出有任何原因。顺便说一下,如果我从 appsink 分支中删除 x264enc,它就可以工作了!
为什么?
为 x264enc
元素尝试选项 tune=zerolatency
。或者在 tee
之后增加 queue
大小。这样做的原因是 x264enc
在其默认配置中的延迟比默认 queue
大小要长。例如。在它产生任何数据之前,它消耗的比其他 queue
路径可以容纳的更多。所以这两个分支相互死锁,无法预滚动。