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

时间:2018-09-10 19:08:05

标签: gstreamer gstreamer-1.0

有关gstreamer元素的一些信息,我必须发出查询,如

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)。

这是什么原因?两者都没有做相同的事情,向元素询问一些信息并等待答案(阻塞/同步)吗?对我来说,查询似乎正是针对此情况,如“ Foundations”一章和下面的图片所述。

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

感谢您的时间和知识。


Gstreamer Communication

1 个答案:

答案 0 :(得分:1)

正如注释中提到的@vk_gst,查询是同步的,但信号(事件)不是同步的。查询的目的是从管道中获取一些信息,而事件的目的是告诉管道针对给定的条件/要求采取某些措施。示例:您可以查询流的比特率。但是您必须发送信号(事件)以进行播放搜索。

换句话说,查询用于请求一些信息,事件用于通知。如果元素发送查询,则除了成功/失败状态之外,它还会期望其他输出。但是,如果元素发送事件,则仅期望成功/失败状态。该事件的处理方式由接收该事件的其他元素决定。