要从我的GStreamer管道中获取所有总线消息,我当前正在调用gst_bus_set_sync_handler
(从处理程序中返回GST_BUS_DROP
)。据我所知,这似乎工作得很好,但是文档指出:
此功能通常仅由总线的创建者调用。应用程序应使用gst_bus异步处理消息监视和轮询功能。
我应该担心吗?我假设“总线的创建者”与管道(我)的创建者不同,或者是吗?
关于gst_bus_set_sync_handler
的使用,我有几点注意事项。
首先,由于它在发布消息的同一线程中同步运行代码,因此只要您的回调运行,您就将阻止该线程执行其他工作。如果您在处理消息时做了很多工作,可能会导致性能问题。
第二,您可能无法可靠地在同步消息处理程序中使用gst_element_set_state
,因为不允许元素在其流线程中设置其自己的状态。这是否是一个问题,将取决于管道中的哪个流线程发送了消息,通常您不必在异步消息传递处理程序中担心这些问题。
我建议尽可能使用异步消息传递,因为它的警告较少。另一方面,如果gst_bus_set_sync_handler
为您工作,则使用它应该没有问题。