在我正在使用Gstreamer 0.10的应用程序上,我们从TCP套接字(从本地运行的另一个进程)接收流式音频数据。
我们可以向正在运行的流程发出“seek”命令:我们开始接收与我们指定的新位置相对应的数据。
到目前为止一切顺利。
但是,我们发出搜寻的时间与我们开始在正确位置播放数据的时间之间存在延迟。
我很确定这是因为我们缓冲数据。
因此,当我们发出seek命令时,我想清除管道中缓冲的数据。
但是,我没有设法做到这一点:我在pad上使用了gst_pad_push_event(gst_event_new_flush_start()),然后在之后使用了gst_event_new_flush_stop,它们都返回TRUE。
然而,音乐会停止,永远不会重新开始。
使用导出GST_DEBUG=2
我可以看到以下警告:
gdpdepay gstgdpdepay.c:429:gst_gdp_depay_chain:<gdpdepay-1> pushing depayloaded buffer returned -2
由于另一个进程继续推送数据,而flush可能会在短时间内“打开”,这可能会解释此警告。但我希望其他进程能够继续推送数据,并且我们的管道能够在发送flush_stop事件后继续从此套接字读取数据并在管道中处理它们。
谷歌搜索这个问题,我发现了一些改变管道状态的建议,但这也没有帮助。
非常欢迎任何帮助!