Queue gstreamer管道现在正在运行,需要一组队列组件,为什么?

Queue gstreamer管道现在正在运行,需要一组队列组件,为什么?,queue,gstreamer,pipeline,Queue,Gstreamer,Pipeline,我有一个C程序,它将视频和音频从v4l2源录制成flv格式。我注意到这个程序在更新版本的ubuntu上不起作用。我决定尝试在gst启动中运行problamatic管道,并尝试找到重现问题的最简单管道。仅关注视频方面,我将其简化为您在下面看到的内容 所以我有一个gstreamer管道正在工作: gst-launch v4l2src ! tee name="vtee" ! queue ! videorate ! ffmpegcolorspace ! ffdeinterlace ! x264enc !

我有一个C程序,它将视频和音频从v4l2源录制成flv格式。我注意到这个程序在更新版本的ubuntu上不起作用。我决定尝试在gst启动中运行problamatic管道,并尝试找到重现问题的最简单管道。仅关注视频方面,我将其简化为您在下面看到的内容

所以我有一个gstreamer管道正在工作:

gst-launch v4l2src ! tee name="vtee" ! queue ! videorate ! ffmpegcolorspace ! ffdeinterlace ! x264enc ! flvmux name="mux" ! filesink location=vid.flv vtee. ! queue ! xvimagesink
现在,只有当我在xvimagesink之前一个接一个地添加一堆队列时,它才会起作用。虽然这确实有效,但在管道开始工作之前,我得到了2秒的延迟,并且我也得到了以下信息:

gst-launch v4l2src ! tee name="vtee" ! queue ! videorate ! ffmpegcolorspace ! ffdeinterlace ! x264enc ! flvmux name="mux" ! filesink location=vid.flv vtee. ! queue ! queue ! queue ! queue ! queue ! xvimagesink
尽管上面的第二条管道可以工作,但在管道开始运行之前会有一个暂停,我得到了消息(我不认为这个系统速度慢,它是一个拥有大量ram的核心i7):


有人能解释这里发生了什么吗?我做错了什么?

你声称第一条管道停止工作,但你没有解释发生了什么。事情停止运转是因为其他事情发生了变化: -GStreamer和子模块的版本? -操作系统的版本? -相机的版本


不必在一行中添加一组队列。实际上,它们将创建线程边界,并在线程之间分隔前后部分,这将增加您看到的延迟,这将影响延迟和同步。

一条旧消息,但问题仍未解决。介于
9.10
11.10
之间(我在注意到之前升级了一些)。我避开了
x264enc
,改用了
ffenc\u mpeg4

我刚注意到这张便条是从:

注意:我们可以用
x264enc+someothermuxer
替换
theoraenc+oggmux
,但管道将冻结,除非我们使
xImageSink
前面的队列[19]元素泄漏,即
“队列泄漏=1”

这对我不起作用,所以我会坚持使用
ffenc\u mpeg4

Additional debug info:
gstbasesink.c(2692): gst_base_sink_is_too_late (): /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.