0

我有一个 C 程序,可以将 v4l2 源中的视频和音频记录为 flv 格式。我注意到该程序不适用于较新版本的 ubuntu。我决定尝试在 gst-launch 中运行有问题的管道,并尝试找到能够重现问题的最简单的管道。仅专注于视频方面,我已将其简化为您在下面看到的内容。

所以我有一个正在工作的 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

虽然上面的第二个管道有效,但在管道开始运行之前有一个暂停,我收到了消息(我不认为这个系统慢 2,它是一个带有大量内存的核心 i7):

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.

谁能解释这里发生了什么?我究竟做错了什么?

4

2 回答 2

1

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

不必连续添加一堆队列。在实践中,它们会创建线程边界并在线程之间分离前后部分,它会增加你看到的延迟,这会影响延迟和同步。

于 2010-11-10T12:34:20.253 回答
0

一条旧消息,但问题仍未解决。介于9.10和之间11.10(我在注意到之前升级了一些)。我通过避免使用x264encandffenc_mpeg4来解决它。

我刚刚注意到Gstreamer Cheat Sheet中的这个注释:

注意:我们可以替换theoraenc+oggmux为,x264enc+someothermuxer但除非我们将队列 [19] 元素放在泄漏的前面,否则管道将冻结xvimagesink,即"queue leaky=1".

这对我不起作用,所以我会坚持使用ffenc_mpeg4.

于 2011-12-23T09:14:03.060 回答