有关gstreamer元素的一些信息,我必须发出查询,如
gst_element_query_position (data.playbin, GST_FORMAT_TIME, ¤t)
(来自basic tutorial 4)
对于其他人,我必须发出动作信号,如
g_signal_emit_by_name (data->playbin, "get-video-tags", i, &tags)
(来自playback tutorial 1)。
这是什么原因?两者都没有做相同的事情,向元素询问一些信息并等待答案(阻塞/同步)吗?对我来说,查询似乎正是针对此情况,如“ Foundations”一章和下面的图片所述。
但是动作信号如何适合该图像呢?它们是事件(用于请求)和消息(用于响应)的组合还是仅仅是查询的组合?最重要的是:为什么已经存在查询,它们为什么存在?
感谢您的时间和知识。
答案 0 :(得分:1)
正如注释中提到的@vk_gst,查询是同步的,但信号(事件)不是同步的。查询的目的是从管道中获取一些信息,而事件的目的是告诉管道针对给定的条件/要求采取某些措施。示例:您可以查询流的比特率。但是您必须发送信号(事件)以进行播放搜索。
换句话说,查询用于请求一些信息,事件用于通知。如果元素发送查询,则除了成功/失败状态之外,它还会期望其他输出。但是,如果元素发送事件,则仅期望成功/失败状态。该事件的处理方式由接收该事件的其他元素决定。