Итак, меня интересует буферизация в pygst. Приложение играет поток из сети, в нем есть возможность поиска по песне (seek). Этот seek получается слишком дерганным, не ровным. Seek производится по изменению слайдера в окне:
def UpdatePos(self):
val = self.seekslider.GetValue()
if self.player.get_state()[1] == gst.STATE_PLAYING or self.player.get_state()[1] == gst.STATE_PAUSED:
try:
self.player.seek_simple(gst.FORMAT_TIME,gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_KEY_UNIT, val * gst.SECOND)
self.seekslider.SetValue(val)
pos_i = self.player.query_position(self.time_format,None)[0]
dur_i = self.player.query_duration(self.time_format,None)[0]
self.SetTimingText(pos_i,self.tpos)
self.SetTimingText(dur_i-pos_i+1,self.tdur)
except gst.QueryError:
pass
###PyGST (Gstreamer) init###
self.player = gst.element_factory_make("playbin", "player")
fakesink = gst.element_factory_make("fakesink", "fakesink")
self.player.set_property("video-sink", fakesink)
bus = self.player.get_bus()
bus.add_signal_watch()
bus.connect("message", self.on_message)
self.time_format = gst.Format(gst.FORMAT_TIME)