1

案例
连续读取文件并提供给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 然后再次播放

所有这些都行不通。

4

1 回答 1

3

它对我不起作用,因为我使用的是0.10 v 的 gstreamer。如果没有使用 0.10 版本的限制gstreamer,请使用1.2版本的 gstreamer。

但是,在 v 0.10 中,刷新搜索通常用作刷新管道的替代品。

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

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

gstreamer-devel 邮件列表中有一篇文章讨论了两个版本中的刷新行为。

于 2014-10-08T11:23:50.317 回答