在利用GStreamer的 gst_element_seek_simple() 接口实现快进快退时,参数 GstSeekFlags seek_flags 会用到参数GST_SEEK_FLAG_FLUSH、GST_SEEK_FLAG_KEY_UNIT与GST_SEEK_FLAG_ACCURATE等参数。
接口原型:
快进10秒的函数调用:
gst_element_seek_simple (data.playbin, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, 10 * GST_SECOND);
下面简单讲解一下几个参数:
GST_FORMAT_TIME:
表示我们正在以时间单位指定目的地。
GstSeekFlags
,讲解几个最常见的:
GST_SEEK_FLAG_FLUSH
:这将在执行查找之前丢弃当前在管道中的所有数据。在重新填充管道并开始显示新数据时,可能会稍作暂停,但会大大提高应用程序的“响应能力”。如果未提供此标志,则可能会显示“陈旧”数据一段时间,直到新位置出现在管道的末端。
这个参数非常关键,如果在bus上监听了state change信号,提供了此标志,会发现seek时,pipeline状态会由PLAYING->PAUSE->PLAY