3

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

gst_element_query_position (data.playbin, GST_FORMAT_TIME, &current)

(来自基础教程 4

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

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

(来自播放教程 1)。

这是什么原因?不是都在做同样的事情,向元素询问一些信息并等待答案(阻塞/同步)吗?对我来说,查询似乎正是针对这一点的,正如“基础”一章和下图所解释的那样。

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

感谢您的时间和知识。


Gstreamer 通信

4

1 回答 1

1

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

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

于 2018-09-18T09:40:23.160 回答