gstreamer 中动作信号与查询的目的是什么?

What is the purpose of action signals vs. queries in gstreamer?

关于 gstreamer 元素的一些信息,我必须发出一个 query like

gst_element_query_position (data.playbin, GST_FORMAT_TIME, &current)

(来自 basic tutorial 4

而对于其他人,我必须发出 动作信号 ,例如

g_signal_emit_by_name (data->playbin, "get-video-tags", i, &tags)

(来自 playback tutorial 1)。

这是什么原因?两者不都在做同样的事情,向元素询问一些信息并等待答案 (blocking/synchronously) 吗?对我来说,查询似乎正是为此目的,如“Foundations”一章和下图所述。

但是动作信号如何适应那幅图呢?它们是事件(用于请求)和消息(用于响应)的组合还是只是查询?最重要的是:为什么在已经有查询的情况下它们还存在?

感谢您的时间和知识。


正如评论中提到的@vk_gst,查询是同步的但信号(事件)不是。查询的目的是从管道获取一些信息,而事件的目的是告诉管道对给定的 condition/requirement 采取一些行动。示例:您可以查询流的比特率。但是您必须发送信号(事件)才能播放搜索。

换句话说,query是请求一些信息,event是通知。如果一个元素发送一个查询,它期望除了 success/failure 状态之外的一些输出。但是如果一个元素发送一个事件,它只需要 success/failure 状态。如何处理该事件留给接收它的其他元素。