Files
2018-05-16 13:17:11 -05:00

84 lines
2.7 KiB
Python

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import QtAV, QtAVWidgets
class PlayerWindow(QtWidgets.QWidget):
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
self.m_unit = 1000.0
self.setWindowTitle("QtAV simple player example")
self.m_player = QtAV.AVPlayer(self)
vl = QtWidgets.QVBoxLayout()
self.setLayout(vl)
self.m_vo = QtAV.VideoOutput(self)
if self.m_vo.widget() is None:
QtWidgets.QMessageBox.warning(0, "QtAV error", "Can not create video renderer")
return
self.m_player.setRenderer(self.m_vo)
vl.addWidget(self.m_vo.widget())
self.m_slider = QtWidgets.QSlider()
self.m_slider.setOrientation(QtCore.Qt.Horizontal)
self.m_slider.sliderMoved[int].connect(self.seekBySliderVal)
self.m_slider.sliderPressed.connect(self.seekBySlider)
self.m_player.positionChanged.connect(self.updateSliderVal)
self.m_player.started.connect(self.updateSlider)
self.m_player.notifyIntervalChanged.connect(self.updateSliderUnit)
vl.addWidget(self.m_slider)
hb = QtWidgets.QHBoxLayout()
vl.addLayout(hb)
self.m_openBtn = QtWidgets.QPushButton("Open")
self.m_playBtn = QtWidgets.QPushButton("Play/Pause")
self.m_stopBtn = QtWidgets.QPushButton("Stop")
hb.addWidget(self.m_openBtn)
hb.addWidget(self.m_playBtn)
hb.addWidget(self.m_stopBtn)
self.m_openBtn.clicked.connect(self.openMedia)
self.m_playBtn.clicked.connect(self.playPause)
self.m_stopBtn.clicked.connect(self.m_player.stop)
def openMedia(self):
fname = QtWidgets.QFileDialog.getOpenFileName(None, "Open a video")[0]
if not fname:
return
self.m_player.play(fname)
def seekBySliderVal(self, value):
if not self.m_player.isPlaying():
return
self.m_player.seek(int(value * self.m_unit))
def seekBySlider(self):
self.seekBySliderVal(self.m_slider.value())
def playPause(self):
if not self.m_player.isPlaying():
self.m_player.play()
return
self.m_player.pause(not self.m_player.isPaused())
def updateSliderVal(self, value):
self.m_slider.setRange(0, int(self.m_player.duration() / self.m_unit))
self.m_slider.setValue(int(value / self.m_unit))
def updateSlider(self):
self.updateSliderVal(self.m_player.position())
def updateSliderUnit(self):
self.m_unit = float(self.m_player.notifyInterval())
self.updateSlider()
if __name__ == "__main__":
QtAVWidgets.registerRenderers()
app = QtWidgets.QApplication(sys.argv)
player = PlayerWindow()
player.show()
player.resize(800, 600)
app.exec_()