ich versuche gerade im Hauptfenster ein Video im Hintergrund abzuspielen, was soweit
auch funktioniert - allerdings möchte ich es als Endlosvideo laufen lassen.
Allein auf die "gst.MESSAGE_EOS" Nachricht zu reagieren und das Video dann neu
starten funktioniert nicht wirklich gut... ich möchte keinen Übergang sehen.
Sollte irgendwie mit entsprechendem seeking evtl. funktionieren um einen sauberen
Übergang zu schaffen. Leider finde ich mich in der Doku überhaupt nicht zurecht, bzw
finde entsprechendes nicht.
Weiss ja jmd. zufällig Rat???
Quelle leicht abgewandelt von: http://pygstdocs.berlios.de/pygst-tutorial/playbin.html
Code: Alles auswählen
#!/usr/bin/env python
import sys, os
import pygst
pygst.require("0.10")
import gst
import time
import gobject
import wx
gobject.threads_init()
class WX_Main(wx.App):
def OnInit(self):
window = wx.Frame(None)
window.SetTitle("Video-Player")
window.SetSize((800, 600))
window.Bind(wx.EVT_CLOSE,self.destroy)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox.Add(hbox, 0, wx.EXPAND, 0)
self.movie_window = wx.Panel(window)
vbox.Add(self.movie_window,1,wx.ALL|wx.EXPAND,4)
window.SetSizer(vbox)
window.Layout()
window.Show()
self.SetTopWindow(window)
self.player = gst.element_factory_make("playbin2", "player")
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.player.set_property('uri',"file://" + "/home/ubuntu/test.avi")
self.player.set_state(gst.STATE_PLAYING)
return True
def on_message(self, bus, message):
t = message.type
print t
if t == gst.MESSAGE_EOS:
self.player.set_state(gst.STATE_NULL)
#self.player.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH,0)
self.player.set_state(gst.STATE_PLAYING)
elif t == gst.MESSAGE_ERROR:
self.player.set_state(gst.STATE_NULL)
def on_sync_message(self, bus, message):
if message.structure is None:
return
message_name = message.structure.get_name()
if message_name == 'prepare-xwindow-id':
imagesink = message.src
imagesink.set_property('force-aspect-ratio', True)
imagesink.set_xwindow_id(self.movie_window.GetHandle())
def destroy(self,event):
#Stop the player pipeline to prevent a X Window System error
self.player.set_state(gst.STATE_NULL)
event.Skip()
app = WX_Main()
app.MainLoop()