Gstreamer-使用Tee元素挂起显示和录制视频

时间:2019-11-24 10:46:59

标签: gstreamer

我的目标是同时流式传输和录制视频。

Gstreamer版本:1.16.1,操作系统:debian 11

最初,我有一个更复杂的管道,其中包含一个分支上的合成器和不同的自定义过滤器。我构造的管道的简化版本如下:

gst-launch-1.0 videotestsrc ! "video/x-raw,width=500,height=300,framerate=50/1"  !  tee name=t \
 t. ! queue !  x264enc ! splitmuxsink name=mux_sink  max-files=10000 next-file=5 max-size-time=600000000 location=video%02d.mp4 \
 t. ! queue !  "video/x-raw,width=500,height=300,framerate=50/1"  !  glimagesink

此管道如何在我的系统上起作用是因为它启动时没有问题,但从NULL状态变为READY状态并挂在那里。显示的视频也是固定的,没有视频文件被保存。

以下是根据点转储null->就绪状态https://drive.google.com/file/d/1oGwDufDdljbuKr8b0YURvg5VxPzMtQWb/view?usp=sharing

生成的svg文件

我已经分别尝试了两个分支,而没有tee元素-都可以。我还尝试了在两个队列上使用大写过滤器的不同组合。我尝试提高gstreamer调试级别,以查看那里是否有可疑的东西-没什么。

任务应该很简单,我必须在这里遗漏一些东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,默认x264设置的延迟太高。对tune=zerolatency元素使用x264enc选项,或在显示路径的tee后面增加队列大小。这样可以防止预卷的死锁。