如何冲洗gstreamer管道

时间:2013-12-04 05:40:18

标签: flush seek gstreamer-0.10

案例
连续读取文件并提供给appsrc元素。 来源 - appsrc

我在播放状态下有一个GStreamer管道。当我按下一个意味着应该清除appsrc队列的按钮时,现在希望管道刷新/清理。播放应从现在添加到/或在刷新后添加的缓冲区开始。

问题
我使用的API返回false。我无法冲洗。

fprintf(stderr, "The flush event start was <%d>",gst_element_send_event(GST_ELEMENT (pipe), gst_event_new_flush_start());    
fprintf(stderr, "The flush event stop was  <%d>",gst_element_send_event(GST_ELEMENT (pipe), gst_event_new_flush_stop()));

以上两者都返回0.这意味着错误。 这是错误的原因是什么?

如何使用某些API尝试刷新管道中的数据?或者是否有其他用于跳过播放的API?

尝试

  • gst_event_new_flush_start ()gst_event_new_flush_stop ()发送到管道,有或没有几毫秒的间隙
  • gst_event_new_seek (1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_SET, 0);
  • 将管道设置为NULL然后再次播放

所有这些都行不通。

1 个答案:

答案 0 :(得分:1)

这对我不起作用,因为我使用的是 0.10 v的gstreamer。如果没有使用0.10版gstreamer的约束,请使用 1.2 < / strong> gstreamer的版本。

然而,在第0.10节中,冲洗寻求通常用作冲洗管道的替代品。

使用1.2v时,两个API gst_event_new_flush_start ()gst_event_new_flush_stop ()可以正常工作。在这种情况下,您可以直接使用冲洗。

无论哪种方式,你都应该能够冲洗。创建一个内部API,用于执行刷新搜索并将其用作刷新API。

gstreamer-devel mailing list中有一篇帖子谈到了flush在两个版本中的行为。