mirror of
https://github.com/wang-bin/QtAV.git
synced 2026-10-16 20:21:20 +08:00
84 lines
2.7 KiB
Python
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_()
|