在GStreamer管道总线上调用gst_bus_set_sync_handler是否安全?

问题描述 投票:1回答:1

要从我的GStreamer管道中获取所有总线消息,我当前正在调用gst_bus_set_sync_handler(从处理程序中返回GST_BUS_DROP)。据我所知,这似乎工作得很好,但是文档指出:

此功能通常仅由总线的创建者调用。应用程序应使用gst_bus异步处理消息监视和轮询功能。

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

c++ gstreamer
1个回答
0
投票

关于gst_bus_set_sync_handler的使用,我有几点注意事项。

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

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

我建议尽可能使用异步消息传递,因为它的警告较少。另一方面,如果gst_bus_set_sync_handler为您工作,则使用它应该没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.