oaubert / python-vlc

Python vlc bindings
GNU Lesser General Public License v2.1
381 stars 108 forks source link

New playback of another video file in PyQT5 using VLC #249

Open Tadont opened 1 year ago

Tadont commented 1 year ago

Good afternoon everyone, I am writing a script that, when launched, plays a video by its number. Then, after the end of playback, the script asks for the video number for the next playback, and so on.

` import sys import time import vlc from PyQt5 import QtGui, QtWidgets from PyQt5.QtCore import Qt class Player(QtWidgets.QMainWindow):

def __init__(self, parent=None):
    super(Player, self).__init__(parent)
    self.setWindowTitle("Media Player")
    # creating a basic vlc instance
    self.instance = vlc.Instance(['--video-on-top'])
    self.instance.log_unset()

    self.media=None

    self.mediaplayer = self.instance.media_player_new()

    self.create_ui()
    self.open_file()
def create_ui(self):

    self.videoframe = QtWidgets.QFrame(
        frameShape=QtWidgets.QFrame.Box, frameShadow=QtWidgets.QFrame.Raised)

    if sys.platform.startswith("linux"):  # for Linux using the X Server
        self.mediaplayer.set_xwindow(self.videoframe.winId())
    elif sys.platform == "win32":  # for Windows
        self.mediaplayer.set_hwnd(self.videoframe.winId())
    elif sys.platform == "darwin":  # for MacOS
        self.mediaplayer.set_nsobject(self.videoframe.winId())

    central_widget = QtWidgets.QWidget()
    self.setCentralWidget(central_widget)
    self.setWindowFlags(Qt.FramelessWindowHint)
    lay = QtWidgets.QVBoxLayout(central_widget)
    lay.addWidget(self.videoframe)

def play(self):
    if self.mediaplayer.play() == -1:
       self.open_file()
    self.mediaplayer.play()

def open_file(self):
    numberfile = input("File number: ")
    filename = (f"/home/Tadont/Video/{numberfile}.mp4")
    self.media = self.instance.media_new(filename)
    self.mediaplayer.set_media(self.media)
    self.eventManager=self.mediaplayer.event_manager()
    self.eventManager.event_attach(vlc.EventType.MediaPlayerEndReached, self.next_file)
    self.play()

def next_file(self, event):
     if event.type == vlc.EventType.MediaPlayerEndReached:
         #self.mediaplayer.stop()
         self.open_file()

def main():
app = QtWidgets.QApplication(sys.argv) player = Player() player.show() player.move(1, 1) player.resize(406, 86) player.setObjectName("MainWindow") player.setStyleSheet("#MainWindow{background-color:black}") sys.exit(app.exec_())

if name == "main": main()`

I have the first file to play, then I write the file number for the second playback, but the second file does not start. How to solve this problem?