到目前为止,我们已经接触到如何创建一个处理媒体数据流的管道,并如何使它运行。更多的应用程序开发者对在媒体数据流的处理过程中能否提供反馈信息给用户,以及提供什么反馈信息给用户,更感兴趣。举例来说: 对于多媒体播放器,我们想要对播放中的音乐显示一个进度条。或者进行代码转换的应用程序可能需要一个进度条来显示当前处理的代码百分比。 GStreamer 内置了方法来支持上述功能。它通过使用查询(querying)的概念来达到上述目的。由于位置偏移 (Seeking)与查询是相当类似的, 所以位置偏移 (Seeking)也将在后面讨论。位置偏移 (Seeking)的触发使用了事件(events)的概念。
查询:获得流位置或长度
查询(Querying)主要用来请求数据流中一些与处理轨迹相关的特定性质。这包括流的长度(如果可以得到)或者当前的位置信息。这些流特性可以以其它不同的格式重新 得到,像时间、音频样本、视频帧或一串字节。尽管提供了更简洁的方法 (gst_element_query_position()及gst_element_query_duration()), 但还是常用 gst_element_query()来得到上述信息。你通常可以直接查询管道, Gstreamer 会给出一些详细的内部信息,诸如被查询的元件的名字等。
在内部,查询将会发送给接收端,然后一直向后“分派”直到有个元件能够处理它。结果将会返回给函数调用者。通常地,这是 demuxer 做的事情,尽管 demuxer 有活的源(live source