⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gstrenderer.py

📁 属性sosuo算法
💻 PY
字号:
import appimport tracebackimport gobjectimport eventloopfrom threading import Eventimport pygtkimport gtkimport pygstpygst.require('0.10')import gstimport gst.interfacesclass Tester:    def __init__(self, filename):        self.playbin = gst.element_factory_make('playbin')        self.videosink = gst.element_factory_make("fakesink", "videosink")        self.playbin.set_property("video-sink", self.videosink)        self.audiosink = gst.element_factory_make("fakesink", "audiosink")        self.playbin.set_property("audio-sink", self.audiosink)        self.bus = self.playbin.get_bus()        self.bus.add_signal_watch()        self.watch_id = self.bus.connect("message", self.onBusMessage)        self.done = Event()        self.success = False        self.playbin.set_property("uri", "file://%s" % filename)        self.playbin.set_state(gst.STATE_PAUSED)    def result (self):        self.done.wait(5)        self.disconnect()        print self.success        return self.success    def onBusMessage(self, bus, message):        if message.src == self.playbin:            if message.type == gst.MESSAGE_STATE_CHANGED:                prev, new, pending = message.parse_state_changed()                if new == gst.STATE_PAUSED:                    self.success = True                    self.done.set()                    # Success            if message.type == gst.MESSAGE_ERROR:                self.success = False                self.done.set()    def disconnect (self):        self.bus.disconnect (self.watch_id)        self.playbin.set_state(gst.STATE_NULL)        del self.bus        del self.playbin        del self.audiosink        del self.videosinkclass Renderer(app.VideoRenderer):    def __init__(self):        self.playbin = gst.element_factory_make("playbin", "player")        self.bus = self.playbin.get_bus()        self.bus.add_signal_watch()        self.watch_id = self.bus.connect("message", self.onBusMessage)        self.sink = gst.element_factory_make("ximagesink", "sink")        self.playbin.set_property("video-sink", self.sink)            def onBusMessage(self, bus, message):        "recieves message posted on the GstBus"        if message.type == gst.MESSAGE_ERROR:            err, debug = message.parse_error()            print "onBusMessage: gstreamer error: %s" % err        elif message.type == gst.MESSAGE_EOS:#            print "onBusMessage: end of stream"            eventloop.addIdle(app.controller.playbackController.onMovieFinished,                              "onBusMessage: skipping to next track")        else:            if not message.structure == None:                if message.structure.get_name() == 'prepare-xwindow-id':                    sink = message.src                    sink.set_xwindow_id(self.widget.window.xid)                    sink.set_property("force-aspect-ratio", True)        return True                def setWidget(self, widget):        widget.connect_after("realize", self.onRealize)        widget.connect("unrealize", self.onUnrealize)        widget.connect("expose-event", self.onExpose)        self.widget = widget    def onRealize(self, widget):        self.gc = widget.window.new_gc()        self.gc.foreground = gtk.gdk.color_parse("black")            def onUnrealize(self, widget):#        print "onUnrealize"        self.sink = None            def onExpose(self, widget, event):        if self.sink:            self.sink.expose()        else:            widget.window.draw_rectangle(self.gc,                                         True,                                         0, 0,                                         widget.allocation.width,                                         widget.allocation.height)        return True            def canPlayFile(self, filename):        """whether or not this renderer can play this data"""        return Tester(filename).result()    def goFullscreen(self):        """Handle when the video window goes fullscreen."""        print "haven't implemented goFullscreen method yet!"            def exitFullscreen(self):        """Handle when the video window exits fullscreen mode."""        print "haven't implemented exitFullscreen method yet!"    def selectFile(self, filename):        """starts playing the specified file"""        self.stop()        self.playbin.set_property("uri", "file://%s" % filename)#        print "selectFile: playing file %s" % filename    def getProgress(self):        print "getProgress: what does this do?"    def getCurrentTime(self):        try:            position, format = self.playbin.query_position(gst.FORMAT_TIME)            position = position / 1000000000        except Exception, e:            print "getCurrentTime: caught exception: %s" % e            position = 0        return position            def playFromTime(self, seconds):        #self.playbin.set_state(gst.STATE_NULL)        event = gst.event_new_seek(1.0,                                   gst.FORMAT_TIME,                                   gst.SEEK_FLAG_FLUSH|gst.SEEK_FLAG_ACCURATE,                                   gst.SEEK_TYPE_SET,                                   seconds * 1000000000,                                   gst.SEEK_TYPE_NONE, 0)        result = self.playbin.send_event(event)        if not result:            print "playFromTime: seek failed"        self.play()#        print "playFromTime: starting playback from %s sec" % seconds    def getDuration(self):        try:            duration, format = self.playbin.query_duration(gst.FORMAT_TIME)            duration = duration / 1000000000        except Exception, e:            print "getDuration: caught exception: %s" % e            duration = 1        return duration            def reset(self):        self.playbin.set_state(gst.STATE_NULL)#        print "** RESET **"    def setVolume(self, level):#        print "setVolume: set volume to %s" % level        self.playbin.set_property("volume", level * 4.0)            def play(self):        self.playbin.set_state(gst.STATE_PLAYING)#        print "** PLAY **"            def pause(self):        self.playbin.set_state(gst.STATE_PAUSED)#        print "** PAUSE **"            def stop(self):        self.playbin.set_state(gst.STATE_NULL)#        print "** STOP **"            def getRate(self):        return 256        def setRate(self, rate):        print "setRate: set rate to %s" % rate

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -