gstreamer - 管道未完成从 READY 到 PAUSED 的转换

标签 gstreamer

我正在使用一个管道,该管道应该播放文件,同时生成用于其他目的的缩放版本(因此是 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 的转换。如果我执行以下操作之一,它会完成转换(然后通过移动到“播放”来正确播放):

  1. 删除从 tee 退出的两个分支之一(这样 x264enc 就可以单独工作)
  2. 从分支标题中删除 x264enc 元素到 appsink。

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

为什么? Pipeline

最佳答案

尝试使用 x264enc 元素的 tune=zerolatency 选项。或者增加 tee 之后的queue 大小。其原因是默认配置下的 x264enc 的延迟时间高于默认队列大小。例如。在生成任何数据之前,它消耗的数据超出了其他队列路径所能容纳的数据。所以两个分支互相死锁,无法预卷。

关于gstreamer - 管道未完成从 READY 到 PAUSED 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403296/

相关文章:

c# - C# 上的 GStreamer UDPSRC 实现

video-streaming - 为什么我应该使用传输协议(protocol) (mpeg-ts) 通过网络发送 h264 格式?

docker - 如何在 docker 容器内运行服务以使用 gstreamer 从 IDS uEye 摄像头获取源?

c - 学习 GObject 和 Glib 的 Material

python - 以编程方式将图像发送到 v4l2 设备

linux - Gstreamer 错误 : Pipeline could not be constructed: syntax error

python - GStreamer;无法播放错误: "Invalid URI\"\"."

networking - GStreamer:通过网络传输 vorbis 编码的音频

java - 具有多个 UDP 接收器的 GStreamer 管道(包含图像)

linux - gstreamer 中是否有内置语音?