def __init__(self, display=True):
import pygst
import gst
if display:
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Video-Player")
self.window.set_default_size(500, 400)
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self.window.connect('delete-event', lambda _: reactor.stop())
self.movie_window = gtk.DrawingArea()
self.window.add(self.movie_window)
self.window.show_all()
self.player = gst.Pipeline("player")
self.appsrc = gst.element_factory_make("appsrc", "source")
self.appsrc.connect("enough-data", self.on_enough_data)
self.appsrc.connect("need-data", self.on_need_data)
self.appsrc.set_property("max-bytes", 10000)
if display:
self.decodebin = gst.element_factory_make("decodebin2", "decodebin")
self.decodebin.connect("new-decoded-pad", self.on_decoded_pad)
self.player.add(self.appsrc, self.decodebin)
gst.element_link_many(self.appsrc, self.decodebin)
else:
sink = gst.element_factory_make("filesink", "filesink")
sink.set_property("location", "/tmp/hls-player.ts")
self.player.add(self.appsrc, sink)
gst.element_link_many(self.appsrc, sink)
bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("message", self.on_message)
bus.connect("sync-message::element", self.on_sync_message)
self._playing = False
self._need_data = False
self._cb = None
评论列表
文章目录