我有一个 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.
谁能解释这里发生了什么?我究竟做错了什么?