我的目标是同时流式传输和录制视频。
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调试级别,以查看那里是否有可疑的东西-没什么。
任务应该很简单,我必须在这里遗漏一些东西。
谢谢!
答案 0 :(得分:1)
在这种情况下,默认x264设置的延迟太高。对tune=zerolatency
元素使用x264enc
选项,或在显示路径的tee后面增加队列大小。这样可以防止预卷的死锁。