Seite 1 von 1
Re: Multimedia mit wxPython
Verfasst: Dienstag 20. Dezember 2011, 14:32
von Dav1d
Der Code sagt leider nicht viel aus, außer, dass du den slider falsch verwendest.
Das ist ein recht teurer Aufruf, den du alle 100ms absetzte, es müssen Daten in einen fd geschrieben werden, die Antwort vom Prozess abgewartet werden. Außerdem ändert sich die Länge des Videos/Lieds nicht, d.h. du musst die "Range" mit SetRange nur einmal setzten, zu Beginn des Videos. Updaten musst du mit .SetValue.
Re: Multimedia mit wxPython
Verfasst: Dienstag 20. Dezember 2011, 15:02
von BlackJack
@Dav1d: Ab wann darf man denn `GetTimeLength()` aufrufen? akhof hat das ja hauptsächlich deswegen in den Timer-Handler verschoben, weil der Aufruf an der Originalstelle von dem Multimediaplayer `None` zurück gegeben hat. Kann es sein, dass das Video schon laufen muss bevor man die Methode aufrufen darf?
Re: Multimedia mit wxPython
Verfasst: Dienstag 20. Dezember 2011, 15:23
von Dav1d
Ja, die Media-Datei muss schon gestartet sein, dafür lässt sich wunderbar das EVT_MEDIA_STARTED Event verwenden.
Kleines Beispiel, ändert die Lautstärke auf Tastendruck und zeigt die Länge und aktuelle Position an:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MplayerCtrl as mpc
import youtube
import wx
#mpc.DEBUG = True
class Frame(wx.Frame):
def __init__(self, parent, id, size=(-1,-1)):
wx.Frame.__init__(self, parent, id, size=size)
self.mpc = mpc.MplayerCtrl(self, -1, 'mplayer')
self.Bind(mpc.EVT_MEDIA_STARTED, self.media_started)
self.Bind(mpc.EVT_MEDIA_FINISHED, self.media_finished)
self.Bind(mpc.EVT_PROCESS_STARTED, self.process_started)
self.Bind(mpc.EVT_PROCESS_STOPPED, self.process_stopped)
self.mpc.Bind(wx.EVT_KEY_DOWN, self.key_down)
self.timer = wx.Timer()
self.interval = 100
self.timer.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
self.Center()
self.Show()
def media_started(self, evt):
print '----------> Media started'
print 'Länge:', self.mpc.GetTimeLength()
self.timer.Start(self.interval)
def media_finished(self, evt):
print '----------> Media finished'
def process_started(self, evt):
print '----------> Process started'
self.mpc.Loadfile('testmovie ü.mpg')
def process_stopped(self, evt):
print '----------> Process stopped'
def on_timer(self, evt):
if self.mpc.playing:
print 'Pos:', self.mpc.GetTimePos()
self.timer.Start(self.interval)
def key_down(self, evt):
k = evt.GetKeyCode()
if k in (43, 45) and self.mpc.playing:
volume = self.mpc.volume
if k == 43:
if not volume > 95:
self.mpc.volume += 5
elif k == 45:
if not volume <= 5:
self.mpc.volume -= 5
evt.Skip()
if __name__ == '__main__':
app = wx.App()
f = Frame(None, -1)
app.MainLoop()
Re: Multimedia mit wxPython
Verfasst: Dienstag 20. Dezember 2011, 17:12
von BlackJack
@Dav1d: Wenn es denn funktioniert — wie gesagt bei dem oben angeführten Beispielprogramm `mediaplayer.py` werden die Handler nicht aufgerufen. Bei Deinem Beispiel funktioniert es.
Re: Multimedia mit wxPython
Verfasst: Dienstag 20. Dezember 2011, 23:02
von Dav1d
@BlackJack, du meinst den Blogbeitrag von driscollis? - Der sollte funktionieren (wobei der zu Zeiten von 0.1.3 entstanden ist, aktuell ist 0.3.1, erst letztens geupdated

)