暂停使用T形三通制成的gstreamer螺纹

暂停使用T形三通制成的gstreamer螺纹,gstreamer,Gstreamer,我有一个gstreamer管道,它从网络摄像头中获取视频并将其分成两个线程: 1) 使用appsink,以便我可以通过编程方式编辑捕获的帧 2) 将视频保存到文件中 管道如下所示: gst-launch-1.0 v4l2src device=/dev/video0 \ ! tee name=t ! queue ! videoconvert ! videoscale ! appsink name=sink caps="video/x-raw,format=RGB,width=800,framera

我有一个gstreamer管道,它从网络摄像头中获取视频并将其分成两个线程:
1) 使用appsink,以便我可以通过编程方式编辑捕获的帧
2) 将视频保存到文件中

管道如下所示:

gst-launch-1.0 v4l2src device=/dev/video0 \
! tee name=t ! queue ! videoconvert ! videoscale ! appsink name=sink caps="video/x-raw,format=RGB,width=800,framerate=15/1" t. \
! queue ! video/x-raw,width=800,framerate=15/1 ! jpegenc ! avimux ! filesink location=/tmp/output.avi
<>我在C++应用程序中使用这个。< /P> 我的问题是,在大多数情况下,我不需要两个线程同时运行,而只需要其中一个线程。在极少数情况下,两者都需要。
因此,我需要一些方法来暂时暂停/停止appsink或视频保存-以节省CPU

我现在的做法是破坏管道,在需要时只使用一个线程重新创建它,但这看起来很难看

我一直在寻找一个更好的解决方案,但到目前为止运气不佳——有没有办法做到这一点


提前谢谢

一种更简单的方法是使用
元件。它有一个
drop
属性,您可以将其设置为true或false。把它放在发球台队列的正后方

编辑:这不起作用。GStreamer邮件列表中的这篇文章提供了更多详细信息:


这看起来很有希望,但当我在其中一个“队列”后面加上“!valve drop=TRUE”时,另一个队列似乎也停止了……啊,嗯,你说得对。我撤销了我的建议。虽然
身份丢失概率=0.99
似乎几乎起作用。非常奇怪。实际上这个线程说只有在运行时设置drop=true时它才会中断。我猜最初可能会将其设置为false,然后让两个线程运行一段时间,然后动态地将其中一些线程设置为drop=true。我明天就试试,谢谢!“实际上,这个线程说只有在运行时设置drop=true时它才会中断。”这可能不是您想要编写的。线程则相反,只有在编译时设置了drop=true,它才会中断。