Untitled

 avatar
unknown
plain_text
5 months ago
2.4 kB
1
Indexable
eeimport tkinter as tk
import sys
import vlc

_isMacOS = sys.platform.startswith('darwin')
_isWindows = sys.platform.startswith('win')
_isLinux = sys.platform.startswith('linux')

class VideoPlayer:
    def __init__(self, parent, video_path):
        self.parent = parent  # == root

        # Create video frame
        self.video_frame = tk.Frame(self.parent)
        self.canvas = tk.Canvas(self.video_frame)
        self.canvas.pack(fill=tk.BOTH, expand=1)

        # VLC player
        args = []
        if _isLinux:
            args.append('--no-xlib')
            args.append('--vout=mmal_vout')  # Use mmal for Raspberry Pi hardware acceleration

        # Create VLC instance
        self.Instance = vlc.Instance(args)

        # Create Player
        self.player = self.Instance.media_player_new()
        self.player.video_set_mouse_input(True)

        # Set the window id where to render VLC's video output
        h = self.canvas.winfo_id()
        if _isWindows:
            self.player.set_hwnd(h)
        elif _isLinux:
            self.player.set_xwindow(h)

        # Load the media file
        self.media = self.Instance.media_new(video_path)
        self.player.set_media(self.media)

        # Bind to the main window's close event
        self.parent.protocol("WM_DELETE_WINDOW", self.on_closing)

        # Attach event handler for video end event
        self.player.event_manager().event_attach(vlc.EventType.MediaPlayerEndReached, self.on_video_end)

    def on_closing(self):
        """Handle the closing of the application."""
        self.player.stop()  # Stop the player
        self.parent.destroy()  # Close the tkinter window

    def on_video_end(self, event):
        """Callback for when the video playback ends."""
        self.player.stop()  # Ensure player stops after video ends

    def play(self):
        """Start playback of the video."""
        self.player.play()
        self.player.set_fullscreen(True)  # Enable full-screen mode

def startup():
    video_file = "Video1.mp4"  # Specify the video file to play
    movie_player = VideoPlayer(root, video_file)
    movie_player.play()  # Start playback immediately

if __name__ == '__main__':
    root = tk.Tk()
    root.attributes('-fullscreen', True)  # Set the window to full screen
    root.bind('<Escape>', lambda e: root.attributes('-fullscreen', False))  # Bind Escape to exit full screen
    root.after(1000, startup)
    root.mainloop()
Editor is loading...
Leave a Comment