如何更改GStreamer管道&x27;运行时的拓扑结构?

如何更改GStreamer管道&x27;运行时的拓扑结构?,gstreamer,Gstreamer,我有一个GStreamer管道,它的拓扑结构有时会改变。我们所做的是: gst_element_set_state(pipeline, GST_STATE_READY); gst_element_unlink(node1, tee); gst_element_link(node1, oldfilm); gst_element_link(oldfilm, tee); gst_element_set_state(pipeline, GST_STATE_PLAYING); 我们假设在重新连接元素时必

我有一个GStreamer管道,它的拓扑结构有时会改变。我们所做的是:

gst_element_set_state(pipeline, GST_STATE_READY);
gst_element_unlink(node1, tee);
gst_element_link(node1, oldfilm);
gst_element_link(oldfilm, tee);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
我们假设在重新连接元素时必须停止管道。问题:我们的应用程序挂起,通常在我们更改拓扑结构的前几次之后视频停止流,然后对gst_元素_设置_状态(管道、gst_状态_播放)的下一次调用永远不会返回。应用程序仍然响应^C,这当然会杀死它


我们的结论是,我们做得不对。在应用程序运行时,改变管道拓扑的正确方法是什么?

早在2016年的GStreamer会议上,我就听到了一个关于这个主题的讨论,在这种情况下,这个话题非常有用

幻灯片:

谈话:

我希望这能解释如何解决这类问题。

爱迪生说了这样的话:“不,我没有失败。我成功地找到了1000种制造灯泡的错误方法。”。所以,我对gstreamer就是这样。只有990种使用gstreamer的错误方法。。。。