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

gstreamer中动作信号与查询的目的是什么?,gstreamer,gstreamer-1.0,Gstreamer,Gstreamer 1.0,关于gstreamer元素的一些信息,我必须发出一个查询 gst\u元素\u查询\u位置(data.playbin、gst\u格式\u时间和当前) (来自) 而对于其他人,我必须发出一个动作信号 g\u信号\u按名称发出(数据->playbin,“获取视频标签”、i和标签) (来自) 原因是什么?这两者不是都在做同样的事情,向元素询问一些信息并等待答案(阻塞/同步)?对我来说,问题似乎正是针对这一点的,正如在“”一章和下面的图片中所解释的 但是,行动信号是如何融入这幅画面的呢?它们是事件(用于请

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

gst\u元素\u查询\u位置(data.playbin、gst\u格式\u时间和当前)

(来自)

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

g\u信号\u按名称发出(数据->playbin,“获取视频标签”、i和标签)

(来自)

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

但是,行动信号是如何融入这幅画面的呢?它们是事件(用于请求)和消息(用于响应)的组合,还是仅仅是查询?最重要的是:当已经有查询时,它们为什么存在

谢谢你的时间和知识



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


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

这是一个非常好的问题。我建议您将其发布在Gstreamer开发人员的官方邮件列表上。我看到的一个区别是,查询是同步处理的,而信号不是。谢谢。因此,一个查询可以说是一个“const”方法,而一个事件则不是?没有严格的规则,比如查询应该是“const”,事件不应该是“const”。它取决于单个查询和事件。我用更多的信息更新了我的答案。