首页 > 解决方案 > 在 GStreamer 管道总线上调用 gst_bus_set_sync_handler 是否安全?

问题描述

为了从我的 GStreamer 管道中获取所有总线消息,我目前正在调用gst_bus_set_sync_handlerGST_BUS_DROP从我的处理程序返回)。据我所知,这似乎完美无缺,但文档指出:

此函数通常仅由总线的创建者调用。应用程序应该使用 gst_bus watch 和 poll 函数异步处理消息。

我应该担心吗?我假设“总线的创建者”与管道的创建者(我)不同,或者是吗?

标签: c++gstreamer

解决方案


关于使用gst_bus_set_sync_handler.

首先,由于它在发布消息的同一线程中同步运行您的代码,因此只要您的回调运行,您就会阻止该线程执行其他工作。如果您在处理消息时做了大量工作,这可能会导致性能问题。

其次,您可能无法可靠地gst_element_set_state在同步消息处理程序中使用,因为不允许元素在其流线程中设置自己的状态。这是否是一个问题将取决于管道中的哪个流线程发送了消息,这在异步消息处理程序中通常不必担心。

我建议尽可能使用异步消息传递,因为它有更少的警告。另一方面,如果gst_bus_set_sync_handler对你有用,使用它应该不是问题。


推荐阅读