控制gstreamer源插件';s输出率

控制gstreamer源插件';s输出率,gstreamer,Gstreamer,全部, 我有一个gstreamer源插件,可以从avi文件中读取视频帧。它连接到gstreamer的核心tee和两个队列元素,将视频帧推送到两个视频处理元素。这两个视频处理元素的输出被我的mux插件多路复用 有了tee和queue,目前我的gstreamer源插件一直在向两个队列推送近6-10个视频帧,直到我相信队列限制被填满。我想要的是只从我的源插件推送一个视频帧,然后等待我的mux插件发出下一帧的信号 有人能指导如何在gstreamer框架中实现这一点吗 谢谢! 手臂 另外,我尝试使用que

全部,

我有一个gstreamer源插件,可以从avi文件中读取视频帧。它连接到gstreamer的核心tee和两个队列元素,将视频帧推送到两个视频处理元素。这两个视频处理元素的输出被我的mux插件多路复用

有了tee和queue,目前我的gstreamer源插件一直在向两个队列推送近6-10个视频帧,直到我相信队列限制被填满。我想要的是只从我的源插件推送一个视频帧,然后等待我的mux插件发出下一帧的信号

有人能指导如何在gstreamer框架中实现这一点吗

谢谢! 手臂


另外,我尝试使用queue元素的max size buffers属性设置为1,但它不起作用。

看看现有的GStreamer muxer。基本上,速率控制是通过使用gstcollectpad在每个sinkpad上等待一个缓冲区,然后阻塞来完成的,一旦每个sinkpad都有一个缓冲区,您就可以将它们组合在一起(正确地使它们相对同步),然后转发数据。因此,速率控制是通过在muxer内部进行阻塞来完成的,并且只有在muxer解除阻塞(即消耗缓冲区)后,才能在该沉降板上推送一个新的缓冲区


muxer前面的队列与此无关,但是如果您想保持较低的内存使用率,可以使用max size buffers=1或类似设置。

感谢Sebastian的回答!从avi读取6-10帧并推送到两个队列的行为发生在第一个视频帧缓冲区到达我的mux之前。因此,我不明白mux级别的阻塞如何有助于减缓从源插件推送的帧。它将减缓从源插件推送的帧,直到队列满为止。然后阻塞源,直到队列有空间容纳另一个缓冲区,并且当muxer使用缓冲区时,总是有空间容纳另一个缓冲区。如果两个源管道部分彼此独立,或者队列上的max size buffers=1也可以使用队列,那么也可以不使用队列。你说没有,但也许这是其他地方的问题。你能提供一些代码吗?当然。我将通过电子邮件发送代码,以便您可以复制。请给我你的电子邮件。仅供参考。。根据我的理解,最大缓冲区大小=1不能按预期工作。一旦队列获得第一个缓冲区,它就应该阻塞其接收器垫,因此源插件也会阻塞。据我所见,它在阻塞之前至少缓冲3个缓冲区,最大缓冲区设置为1。这意味着队列将缓冲区转发到下游。最大缓冲区大小=1时,它只能容纳一个缓冲区。你可以在网上找到我的邮箱地址