Time management
仅当管道处于PLAYING
状态时,可以刷新屏幕。如果不在PLAYING
状态,什么都不做,因为大多数查询都会失败。
函数与知识点
GstClockTime
说明:所需的超时时间必须以GstClockTime
的形式指定。即以纳秒(ns)为单位。表示不同时间单位的数字应乘以诸如GST_SECOND
或GST_MSECOND
之类的宏。这使得代码更易读。gst_element_query_position()
功能:查询一个元素(通常是顶层pipeline
或playbin
元素)的流位置(以纳秒为单位)。这将是一个介于0和流持续时间(如果已知)之间的值。这个查询通常只能在管道预滚(即达到PAUSED
或PLAYING
状态)后才能工作。当调用函数时,应用程序将在管道总线上收到一个ASYNC_DONE
消息。说明:如果重复调用这个函数,也可以创建一个查询并在gst_element_query()
中重用它。gst_element_query (GstElement * element, GstQuery * query)
功能:对给定的元素执行查询。说明:对于没有实现查询处理程序的元素,此函数将查询转发给随机的srcpad或该元素的随机链接的sinkpad的对等体。请注意,某些查询可能需要运行中的管道才能正常工作。gst_element_query_duration()
功能:查询一个元素(通常是顶级pipeline
或playbin
元素)的总流持续时间(以纳秒为单位)。这个查询只有在管道预滚(即达到PAUSED
或PLAYING
状态)后才能工作当调用函数时,应用程序将在管道总线上收到一个ASYNC_DONE
消息。说明:如果出于某种原因持续时间发生变化,将在管道总线上收到一个DURATION_CHANGED
消息,在这种情况下,应该使用这个函数重新查询持续时间。GST_TIME_FORMAT()
功能:一个可以在类似printf
的格式字符串中使用的字符串,用于以h:m:s
格式显示GstClockTime
值。使用GST_TIME_ARGS
来构造相应的参数。GST_TIME_ARGS()
功能:使用GST_TIME_FORMAT
格式字符串对t
进行格式化。注意:t
将被评估多次。说明:t
是一个GstClockTime
。gst_element_seek_simple()
功能:在给定的元素上执行简单的跳转的简单API,意味着它只会相对于流的起始位置跳转到给定的位置。对于更复杂的操作,比如段跳转(例如循环播放)或更改播放速度或相对于最后配置的播放段进行跳转,应该使用gst_element_seek()
。说明:在完全预滚的PAUSED
或PLAYING
管道中,对可跳转的媒体类型进行跳转总是保证返回TRUE
,对于肯定不可跳转的媒体类型(如实时流),返回FALSE
。一些元素允许在READY
状态下进行跳转,在这种情况下,它们将存储跳转事件并在放入PAUSED
状态时执行它。如果元素支持在READY
状态下进行跳转,在接收到READY
状态下的事件时,它将始终返回TRUE
。GST_SEEK_FLAG_FLUSH
功能:这会在进行跳转之前丢弃管道中的所有数据。在重新填充管道并开始显示新数据之前,可能会暂停一会儿,但极大地增加了应用程序的响应能力。如果不提供此标志,旧的数据可能会在一段时间内显示,直到新位置出现在管道末尾。GST_SEEK_FLAG_KEY_UNIT
说明:对于大多数编码后的视频流,不可能在任意位置进行跳转,而只能在称为关键帧的特定帧之间进行跳转。当使用此标志时,跳转实际上会移动到最接近的关键帧并立即开始生成数据。如果不使用此标志,则管道会在内部移动到最接近的关键帧(没有其他选择),但数据不会显示,直到到达请求的位置。这个最后的选择更准确,但可能需要更长时间。GST_SEEK_FLAG_ACCURATE
说明:某些媒体剪辑没有足够的索引信息,这意味着在任意位置进行跳转是耗时的。在这些情况下,GStreamer通常会估计要进行跳转的位置,并且通常工作得很好。如果这种精度对您的情况不够好(您看到的跳转时间不准确),那么请提供此标志。请注意,计算跳转位置可能需要更长时间(非常长时间,在某些文件上)。gst_query_new_seeking(GstFormat format)
功能:构造一个新的查询对象,用于查询流的跳转属性。cleanup
函数:gst_query_unref
。返回值:一个新的GstQuery
(所有权转移)