diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py
index 1b3464fde..b1511eae6 100644
--- a/openlp/core/lib/htmlbuilder.py
+++ b/openlp/core/lib/htmlbuilder.py
@@ -178,7 +178,14 @@ sup {
vid.src = '';
vid2.src = '';
break;
- }
+ case 'length':
+ return vid.duration;
+ case 'currentTime':
+ return vid.currentTime;
+ case 'seek':
+ vid.currentTime = path;
+ break;
+ }
}
function show_image(src){
diff --git a/openlp/plugins/media/lib/mediacontroller.py b/openlp/plugins/media/lib/mediacontroller.py
index 31d9f37cf..200af77bf 100644
--- a/openlp/plugins/media/lib/mediacontroller.py
+++ b/openlp/plugins/media/lib/mediacontroller.py
@@ -38,6 +38,7 @@ from openlp.core.lib import Receiver
from openlp.plugins.media.lib import MediaBackends, MediaStates
from webkitcontroller import WebkitController
from phononcontroller import PhononController
+from vlccontroller import VlcController
log = logging.getLogger(__name__)
@@ -93,7 +94,7 @@ class MediaManager(object):
self.curDisplayMediaController = {}
self.displayWebkitController = WebkitController(self)
self.displayPhononController = PhononController(self)
- #self.displayVlcController = VlcController(self)
+ self.displayVlcController = VlcController(self)
self.Timer = QtCore.QTimer()
self.Timer.setInterval(200)
@@ -134,13 +135,12 @@ class MediaManager(object):
self.Timer.stop()
def setDisplay(self, display):
- #self.setupVlcController(display)
+ self.setupVlcController(display)
self.setupPhononController(display)
self.setupWebkitController(display)
def setupWebkitController(self, display):
- #self.displayWebkitController[display] = display.webView
display.webView.raise_()
def setupPhononController(self, display):
@@ -155,22 +155,11 @@ class MediaManager(object):
display.phononWidget.raise_()
def setupVlcController(self, display):
- display.vlcWidget = QtGui.QWidget(display)
- instance=vlc.Instance()
- self.movieName = None
- player=instance.media_player_new(self.movieName)
- # the media player has to be 'connected' to the QFrame
- # (otherwise a video would be displayed in it's own window)
- # this is platform specific!
- # you have to give the id of the QFrame (or similar object) to
- # vlc, different platforms have different functions for this
- if sys.platform == "linux2": # for Linux using the X Server
- player.set_xwindow(self.hwnd)
- elif sys.platform == "win32": # for Windows
- player.set_hwnd(self.hwnd)
- elif sys.platform == "darwin": # for MacOS
- player.set_agl(self.hwnd)
-
+ display.vlcWidget = QtGui.QFrame(display)
+ # creating a basic vlc instance
+ display.vlcInstance = vlc.Instance()
+ # creating an empty vlc media player
+ display.vlcMediaPlayer = display.vlcInstance.media_player_new()
display.vlcWidget.setGeometry(QtCore.QRect(0, 0,
display.screen[u'size'].width(), display.screen[u'size'].height()))
display.vlcWidget.raise_()
@@ -203,14 +192,29 @@ class MediaManager(object):
"""
usePhonon = QtCore.QSettings().value(
u'media/use phonon', QtCore.QVariant(True)).toBool()
- if usePhonon and not isBackground:
+ useVlc = True
+ if videoPath.endswith(u'.swf'):
+ useVlc = False
+ usePhonon = False
+ elif videoPath.endswith(u'.wmv'):
+ useVlc = False
+ usePhonon = True
+
+ if useVlc:
+ self.curDisplayMediaController[display] = self.displayVlcController
+ display.phononWidget.setVisible(False)
+ display.webView.setVisible(False)
+ display.vlcWidget.setVisible(True)
+ elif usePhonon and not isBackground:
self.curDisplayMediaController[display] = self.displayPhononController
display.phononWidget.setVisible(True)
display.webView.setVisible(False)
+ display.vlcWidget.setVisible(False)
else:
self.curDisplayMediaController[display] = self.displayWebkitController
display.phononWidget.setVisible(False)
display.webView.setVisible(True)
+ display.vlcWidget.setVisible(False)
if len(self.curDisplayMediaController) > 0:
if not self.Timer.isActive():
self.Timer.start()
diff --git a/openlp/plugins/media/lib/phononcontroller.py b/openlp/plugins/media/lib/phononcontroller.py
index 1e78b005f..d8b71d29a 100644
--- a/openlp/plugins/media/lib/phononcontroller.py
+++ b/openlp/plugins/media/lib/phononcontroller.py
@@ -39,6 +39,7 @@ class PhononController(MediaController):
MediaController.__init__(self, parent)
def load(self, display, path, volume):
+ print "load vid in Phonon Controller"
display.phononActive = True
display.mediaObject.stop()
display.mediaObject.clearQueue()
diff --git a/openlp/plugins/media/lib/vlccontroller.py b/openlp/plugins/media/lib/vlccontroller.py
index 5bbb438d4..7d36a51a4 100644
--- a/openlp/plugins/media/lib/vlccontroller.py
+++ b/openlp/plugins/media/lib/vlccontroller.py
@@ -25,33 +25,70 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
-from openlp.plugins.media.lib import MediaController
+import sys
+
+from openlp.plugins.media.lib import MediaController, MediaStates
class VlcController(MediaController):
"""
Specialiced MediaController class
to reflect Features of the Vlc backend
"""
- def __init__(self):
- pass
+ def __init__(self, parent):
+ self.parent = parent
+ MediaController.__init__(self, parent)
def load(self, display, path, volume):
- pass
+ print "load vid in Vlc Controller"
+ vol = float(volume) / float(10)
+
+ # create the media
+ display.vlcMedia = display.vlcInstance.media_new(unicode(path))
+ # put the media in the media player
+ display.vlcMediaPlayer.set_media(display.vlcMedia)
+
+ # parse the metadata of the file
+ display.vlcMedia.parse()
+
+ # the media player has to be 'connected' to the QFrame
+ # (otherwise a video would be displayed in it's own window)
+ # this is platform specific!
+ # you have to give the id of the QFrame (or similar object) to
+ # vlc, different platforms have different functions for this
+ if sys.platform == "linux2": # for Linux using the X Server
+ display.vlcMediaPlayer.set_xwindow(int(display.vlcWidget.winId()))
+ elif sys.platform == "win32": # for Windows
+ display.vlcMediaPlayer.set_hwnd(int(display.vlcWidget.winId()))
+ elif sys.platform == "darwin": # for MacOS
+ display.vlcMediaPlayer.set_agl(int(display.vlcWidget.winId()))
+ # start playing
+ self.play(display)
+ self.state = MediaStates.PlayingState
def play(self, display):
- self.display[u'live']
+ display.vlcMediaPlayer.play()
+ self.state = MediaStates.PlayingState
- def pause(self):
- pass
+ def pause(self, display):
+ display.vlcMediaPlayer.pause()
+ self.state = MediaStates.PausedState
- def stop(self):
- pass
+ def stop(self, display):
+ display.vlcMediaPlayer.stop()
+ self.state = MediaStates.StoppedState
def seek(self, display, seekVal):
+ if display.vlcMediaPlayer.is_seekable():
+ display.vlcMediaPlayer.set_position(seekVal/1000.0)
+
+ def reset(self, display):
pass
- def updateUI(self):
- pass
+ def updateUI(self, display):
+ display.parent.seekSlider.setMaximum(1000)
+ if not display.parent.seekSlider.isSliderDown():
+ currentPos = display.vlcMediaPlayer.get_position() * 1000
+ display.parent.seekSlider.setSliderPosition(currentPos)
def getSupportedFileTypes(self):
pass
diff --git a/openlp/plugins/media/lib/webkitcontroller.py b/openlp/plugins/media/lib/webkitcontroller.py
index 962440a20..c021b9e7d 100644
--- a/openlp/plugins/media/lib/webkitcontroller.py
+++ b/openlp/plugins/media/lib/webkitcontroller.py
@@ -25,7 +25,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
-from openlp.plugins.media.lib import MediaController
+from openlp.plugins.media.lib import MediaController, MediaStates
class WebkitController(MediaController):
"""
@@ -38,9 +38,11 @@ class WebkitController(MediaController):
self.isFlash = False
def load(self, display, path, volume):
+ print "load vid in Webkit Controller"
vol = float(volume) / float(10)
display.webView.setVisible(True)
display.phononWidget.setVisible(False)
+ display.vlcWidget.setVisible(False)
if path.endswith(u'.swf'):
js = u'show_flash("load","%s");' % \
(path.replace(u'\\', u'\\\\'))
@@ -50,34 +52,44 @@ class WebkitController(MediaController):
(path.replace(u'\\', u'\\\\'), str(vol))
self.isFlash = False
display.frame.evaluateJavaScript(js)
+ self.state = MediaStates.PlayingState
def play(self, display):
if self.isFlash:
display.frame.evaluateJavaScript(u'show_flash("play","");')
else:
display.frame.evaluateJavaScript(u'show_video("play");')
-
+ self.state = MediaStates.PlayingState
def pause(self, display):
if self.isFlash:
display.frame.evaluateJavaScript(u'show_flash("pause","");')
else:
display.frame.evaluateJavaScript(u'show_video("pause");')
+ self.state = MediaStates.PausedState
def stop(self, display):
if self.isFlash:
display.frame.evaluateJavaScript(u'show_flash("stop","");')
else:
display.frame.evaluateJavaScript(u'show_video("stop");')
+ self.state = MediaStates.StoppedState
def seek(self, display, seekVal):
- pass
+ if not self.isFlash:
+ print seekVal, float(seekVal)/1000
+ display.frame.evaluateJavaScript(u'show_video("seek", "%f");' % (float(seekVal)/1000))
def reset(self, display):
display.frame.evaluateJavaScript(u'show_video("close");')
def updateUI(self, display):
- pass
+ if not self.isFlash:
+ length = display.frame.evaluateJavaScript(u'show_video("length");')
+ display.parent.seekSlider.setMaximum(length.toFloat()[0]*1000)
+ if not display.parent.seekSlider.isSliderDown():
+ currentTime = display.frame.evaluateJavaScript(u'show_video("currentTime");')
+ display.parent.seekSlider.setSliderPosition(currentTime.toFloat()[0]*1000)
def getSupportedFileTypes(self):
pass