All pastes #163997 Raw Edit

kfish:gst video seek

public python v1 · immutable
·published 2006-09-08 04:59 UTC
rendered paste body
#!/usr/bin/env python# Conrad Parker (kfish) <conrad@metadecks.org># 8 Sep 2006# Based on twism's player: http://pastebin.ca/150771import sysimport urllibimport pygstpygst.require("0.10")import gstimport pygtkimport gtkclass VideoPipeline:    def __init__(self, uri, start_offset):        self.uri = uri        # Create a playbin        playbin = gst.element_factory_make ("playbin")        self.playbin = playbin        # Create a pipeline        self.pipeline = gst.Pipeline ()        bus = gst.Bus ()        self.pipeline.set_bus (bus)        bus.add_signal_watch ()        bus.connect ("message::eos", self.eos_handler, playbin)                self.pipeline.add (playbin)        self.playbin.set_property ("uri", uri)        self.pipeline.set_state (gst.STATE_PAUSED)        self.seek(start_offset)    def eos_handler (self, bus, message, playbin):        print "Got EOS while playing", self.uri        self.seek (0)    def seek (self, time_nanoseconds):        time_seconds = time_nanoseconds / 1000000000        print "Seeking to ", time_nanoseconds, " (", time_seconds, "s)"        r = self.pipeline.seek (1.0, gst.FORMAT_TIME,                                gst.SEEK_FLAG_FLUSH,                                gst.SEEK_TYPE_SET, time_nanoseconds,                                gst.SEEK_TYPE_NONE, -1)        print "Seek result: ", r    def play(self):        self.pipeline.set_state (gst.STATE_PLAYING)class Main:    def __init__(self):        if (len(sys.argv) < 3):            print "Usage: vtest uri start_offset"            return        uri = sys.argv[1]        if not gst.uri_is_valid(uri):            uri = "file://" + urllib.pathname2url(uri)        start_offset = long(sys.argv[2]) * 1000000000L        v = VideoPipeline(uri, start_offset)        v.play()        gtk.main()start = Main()