【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通常會估計要尋找的位置,並且通常效果很好。如果此精度不足以滿足您的情況(您會發現搜索沒有達到您要求的確切時間),請提供此標誌。請注意,計算搜索位置可能需要更長的時間(在某些文件上非常長)。

 

 

 

 

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