Gstreamer - 使用 Tee 元素挂起显示和录制视频
Gstreamer - display and record video using Tee element hangs
我的目标是同时流式传输和录制视频。
Gstreamer 版本:1.16.1,OS: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->ready 状态生成的 svg 文件:https://drive.google.com/file/d/1oGwDufDdljbuKr8b0YURvg5VxPzMtQWb/view?usp=sharing
我已经在没有 tee 元素的情况下分别尝试了两个分支 - 都有效。我还在两个队列上尝试了不同的上限过滤器组合。我尝试提高 gstreamer 调试级别以查看那里是否有可疑的东西 - 没有。
任务应该很简单,我一定是漏掉了什么。
提前致谢!
对于此用例,默认 x264 设置的延迟太高。对 x264enc
元素使用 tune=zerolatency
选项或增加显示路径发球台后的队列大小。这将防止预滚动死锁。
我的目标是同时流式传输和录制视频。
Gstreamer 版本:1.16.1,OS: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->ready 状态生成的 svg 文件:https://drive.google.com/file/d/1oGwDufDdljbuKr8b0YURvg5VxPzMtQWb/view?usp=sharing
我已经在没有 tee 元素的情况下分别尝试了两个分支 - 都有效。我还在两个队列上尝试了不同的上限过滤器组合。我尝试提高 gstreamer 调试级别以查看那里是否有可疑的东西 - 没有。
任务应该很简单,我一定是漏掉了什么。
提前致谢!
对于此用例,默认 x264 设置的延迟太高。对 x264enc
元素使用 tune=zerolatency
选项或增加显示路径发球台后的队列大小。这将防止预滚动死锁。