我使用通过appsrc将数据馈送到GStreamer并通过multifilesink输出。这很好。然而,如果有太多的数据(例如,因为分辨率太高),输出开始延迟。事实上,时间越长,multifilesink输出的文件就越隐蔽。
例如,如果我让这个过程持续一段时间,multifilesink可能会输出一分钟前的帧,即使它开始时有一个非常小的延迟。
我如何告诉GStreamer丢弃帧以避免达到如此大的延迟?
指出:
- 我的appsrc有is-live和do-timestamp设置。
- 我已经尝试添加max-latency和block(false)到appsrc,但这似乎没有改变任何东西。
- 我也试过在我的multifilesink上设置max-lateness,但这似乎也没有做任何事情。
(PS:我的代码可以在这里找到,在回答关于这种类型的设置的另一个问题。)
最后通过在我的capsfilter
之前在我的管道中添加一个泄漏的queue
来解决这个问题。在我的例子中:
GstElement* queue = gst_element_factory_make("queue", NULL);
g_object_set(G_OBJECT(queue), "leaky", 2, NULL);
g_object_set(G_OBJECT(queue), "max-size-time", 500 * GST_MSECOND, NULL);
成功了