【GStreamer】GST_SEEK_FLAG_FLUSH、GST_SEEK_FLAG_KEY_UNIT与GST_SEEK_FLAG_ACCURATE

        在利用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->PLAYING, 这是因为该参数会使管道切换至PAUSE丢弃当前的数据,然后再切换回PLAYING继续从seek后的位置进行播放。该方法使seek动作变得更加高效迅速!

GST_SEEK_FLAG_KEY_UNIT:对于大多数编码的视频流,无法定位到任意位置,而只能搜索某些称为关键帧的帧。使用此标志时,查找实际上将移至最接近的关键帧并立即开始产生数据。如果不使用此标志,则管道将在内部移动到最接近的关键帧(没有其他选择),但是直到到达请求的位置时才显示数据。最后一种选择更准确,但可能需要更长的时间。

GST_SEEK_FLAG_ACCURATE:某些媒体剪辑没有提供足够的索引信息,这意味着寻找任意位置非常耗时。在这些情况下,GStreamer通常会估计要寻找的位置,并且通常效果很好。如果此精度不足以满足您的情况(您会发现搜索没有达到您要求的确切时间),请提供此标志。请注意,计算搜索位置可能需要更长的时间(在某些文件上非常长)。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章