![]() |
[PyQt] Embedding a Video in Video Player - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [PyQt] Embedding a Video in Video Player (/thread-15712.html) |
Embedding a Video in Video Player - WhatsupSmiley - Jan-28-2019 Hi, I am trying to code a video player where it plays a video file. Originally I tried to use PyQt5 however I don't have the video widget / MediaPlayer widget so coding it is for me. However, I am struggling to get a video to show and play. I don't know if it's my path? or if I am even using the right video file format? The function openFile is where the video file is supposed to be called in. This is the code I have for the video player: from PyQt5.QtCore import QDir, Qt, QUrl from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer from PyQt5.QtMultimediaWidgets import QVideoWidget from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel, QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget) from PyQt5.QtWidgets import QMainWindow,QWidget, QPushButton, QAction from PyQt5.QtGui import QIcon import sys class VideoWindow(QMainWindow): def __init__(self, parent=None): super(VideoWindow, self).__init__(parent) self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) #calls the mediaPlayer videoWidget = QVideoWidget() #calls the videoWidget into the window self.playButton = QPushButton() self.playButton.setEnabled(False) #default is on False, will not play video self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) #How the button looks self.playButton.clicked.connect(self.play) #when clicked, should play self.positionSlider = QSlider(Qt.Horizontal) #the video slider self.positionSlider.setRange(0, 0) #setting the range of the slider self.positionSlider.sliderMoved.connect(self.setPosition) self.errorLabel = QLabel() self.errorLabel.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) # Create a widget for window contents wid = QWidget(self) self.setCentralWidget(wid) # Create layouts to place inside widget controlLayout = QHBoxLayout() controlLayout.setContentsMargins(0, 0, 0, 0) controlLayout.addWidget(self.playButton) controlLayout.addWidget(self.positionSlider) layout = QVBoxLayout() layout.addWidget(videoWidget) layout.addLayout(controlLayout) layout.addWidget(self.errorLabel) # Set widget to contain window contents wid.setLayout(layout) self.mediaPlayer.setVideoOutput(videoWidget) self.mediaPlayer.stateChanged.connect(self.mediaStateChanged) self.mediaPlayer.positionChanged.connect(self.positionChanged) self.mediaPlayer.durationChanged.connect(self.durationChanged) self.mediaPlayer.error.connect(self.handleError) def openFile(self): homePath = open("videoplayback(1).mp4", "r") fileName, _ = QFileDialog.getOpenFileName(self, homePath) QDir.homePath() if fileName != " ": self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(fileName))) self.playButton.setEnabled(True) else: self.playButton.setEnabled(True) #fileName.show def exitCall(self): sys.exit(app.exec_()) def play(self): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.mediaPlayer.pause() else: self.mediaPlayer.play() def mediaStateChanged(self, state): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) else: self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) def positionChanged(self, position): self.positionSlider.setValue(position) def durationChanged(self, duration): self.positionSlider.setRange(0, duration) def setPosition(self, position): self.mediaPlayer.setPosition(position) def handleError(self): self.playButton.setEnabled(False) self.errorLabel.setText("Error: " + self.mediaPlayer.errorString()) if __name__ == '__main__': app = QApplication(sys.argv) player = VideoWindow() player.resize(640, 480) player.show() sys.exit(app.exec_())Any suggestions would be greatly appreciated! Or if you know an easier way, I'm all ears! |