diff --git a/signage_player/__pycache__/player.cpython-311.pyc b/signage_player/__pycache__/player.cpython-311.pyc index f6f277f..59930e5 100644 Binary files a/signage_player/__pycache__/player.cpython-311.pyc and b/signage_player/__pycache__/player.cpython-311.pyc differ diff --git a/signage_player/main_data/log.txt b/signage_player/main_data/log.txt index feb4ecd..468a0b2 100644 --- a/signage_player/main_data/log.txt +++ b/signage_player/main_data/log.txt @@ -251,3 +251,75 @@ [INFO] [SignageApp] Successfully downloaded start_page.jpeg to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/start_page.jpeg [INFO] [SignageApp] Preparing to download Big_Buck_Bunny_1080_10s_30MB.mp4 from http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4... [INFO] [SignageApp] Successfully downloaded Big_Buck_Bunny_1080_10s_30MB.mp4 to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/Big_Buck_Bunny_1080_10s_30MB.mp4 +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Big_Buck_Bunny_1080_10s_30MB.mp4', 'url': 'http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}], 'playlist_version': 4} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 4 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] Successfully downloaded cropped-cropped-main-picture-scaled-1.jpeg to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/cropped-cropped-main-picture-scaled-1.jpeg +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] Successfully downloaded start_page.jpeg to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/start_page.jpeg +[INFO] [SignageApp] Preparing to download Big_Buck_Bunny_1080_10s_30MB.mp4 from http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4... +[INFO] [SignageApp] Successfully downloaded Big_Buck_Bunny_1080_10s_30MB.mp4 to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/Big_Buck_Bunny_1080_10s_30MB.mp4 +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] Successfully downloaded Banner_poarta_2_x6.jpg to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/Banner_poarta_2_x6.jpg +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Big_Buck_Bunny_1080_10s_30MB.mp4', 'url': 'http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}], 'playlist_version': 4} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 4 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] File cropped-cropped-main-picture-scaled-1.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] File start_page.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Big_Buck_Bunny_1080_10s_30MB.mp4 from http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4... +[INFO] [SignageApp] File Big_Buck_Bunny_1080_10s_30MB.mp4 already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] File Banner_poarta_2_x6.jpg already exists. Skipping download. +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Big_Buck_Bunny_1080_10s_30MB.mp4', 'url': 'http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}], 'playlist_version': 4} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 4 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] File cropped-cropped-main-picture-scaled-1.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] File start_page.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Big_Buck_Bunny_1080_10s_30MB.mp4 from http://digi-signage.moto-adv.com/media/Big_Buck_Bunny_1080_10s_30MB.mp4... +[INFO] [SignageApp] File Big_Buck_Bunny_1080_10s_30MB.mp4 already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] File Banner_poarta_2_x6.jpg already exists. Skipping download. +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}, {'duration': 101, 'file_name': 'WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4', 'url': 'http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4'}], 'playlist_version': 5} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 5 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] File cropped-cropped-main-picture-scaled-1.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] File start_page.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] File Banner_poarta_2_x6.jpg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 from http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4... +[INFO] [SignageApp] Successfully downloaded WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 to /home/pi/Desktop/tkinter_player/signage_player/static_data/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}, {'duration': 101, 'file_name': 'WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4', 'url': 'http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4'}], 'playlist_version': 5} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 5 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] File cropped-cropped-main-picture-scaled-1.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] File start_page.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] File Banner_poarta_2_x6.jpg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 from http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4... +[INFO] [SignageApp] File WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 already exists. Skipping download. +[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} +[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$AR3TdZUp40MEqohrAIhp1uYvye7mp/.5t26NJXF8jYcracIOhb4KS', 'playlist': [{'duration': 15, 'file_name': 'cropped-cropped-main-picture-scaled-1.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg'}, {'duration': 15, 'file_name': 'start_page.jpeg', 'url': 'http://digi-signage.moto-adv.com/media/start_page.jpeg'}, {'duration': 10, 'file_name': 'Banner_poarta_2_x6.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg'}, {'duration': 101, 'file_name': 'WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4', 'url': 'http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4'}], 'playlist_version': 5} +[INFO] [SignageApp] Fetched updated playlist from server. +[INFO] [SignageApp] Local playlist version: 0, Server playlist version: 5 +[INFO] [SignageApp] Preparing to download cropped-cropped-main-picture-scaled-1.jpeg from http://digi-signage.moto-adv.com/media/cropped-cropped-main-picture-scaled-1.jpeg... +[INFO] [SignageApp] File cropped-cropped-main-picture-scaled-1.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download start_page.jpeg from http://digi-signage.moto-adv.com/media/start_page.jpeg... +[INFO] [SignageApp] File start_page.jpeg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download Banner_poarta_2_x6.jpg from http://digi-signage.moto-adv.com/media/Banner_poarta_2_x6.jpg... +[INFO] [SignageApp] File Banner_poarta_2_x6.jpg already exists. Skipping download. +[INFO] [SignageApp] Preparing to download WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 from http://digi-signage.moto-adv.com/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4... +[INFO] [SignageApp] File WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 already exists. Skipping download. diff --git a/signage_player/player.py b/signage_player/player.py index d6f966a..a39fbac 100644 --- a/signage_player/player.py +++ b/signage_player/player.py @@ -3,6 +3,8 @@ import json import tkinter as tk from PIL import Image, ImageTk import vlc +import subprocess +import sys CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'main_data', 'app_config.txt') PLAYLIST_DIR = os.path.join(os.path.dirname(__file__), 'static_data', 'playlist') @@ -158,7 +160,7 @@ class SimpleTkPlayer: self.video_canvas.pack(fill=tk.BOTH, expand=True) self.root.attributes('-fullscreen', True) self.root.update_idletasks() - self.vlc_instance = vlc.Instance() + self.vlc_instance = vlc.Instance('--vout=x11') self.vlc_player = self.vlc_instance.media_player_new() self.vlc_player.set_mrl(file_path) self.vlc_player.set_fullscreen(True) @@ -236,16 +238,39 @@ class SimpleTkPlayer: if self.paused is not True: self.paused = True self.pause_btn.config(text='▶ Resume') - import subprocess, sys + # Explicitly pause VLC video if playing + if hasattr(self, 'vlc_player') and self.vlc_player: + try: + self.vlc_player.pause() + except Exception: + pass + # Destroy controls overlay so settings window is always interactive + if hasattr(self, 'controls_win') and self.controls_win: + self.controls_win.destroy() + self.controls_win = None settings_path = os.path.join(os.path.dirname(__file__), 'appsettings.py') # Open settings in a new process so it doesn't block the main player - proc = subprocess.Popen([sys.executable, settings_path]) + proc = subprocess.Popen([sys.executable, settings_path], close_fds=True) + # Give the window manager a moment to focus the new window + self.root.after(300, lambda: self.root.focus_force()) # Wait for the settings window to close, then resume self.root.after(1000, lambda: self.check_settings_closed(proc)) def check_settings_closed(self, proc): if proc.poll() is not None: + # Resume playback and unpause VLC if needed self.resume_play() + # Restore and recreate controls overlay + self.root.deiconify() + self.create_controls() + self.show_controls() + if hasattr(self, 'vlc_player') and self.vlc_player: + try: + # Only resume if it was paused by us + if self.vlc_player.get_state() == vlc.State.Paused: + self.vlc_player.play() + except Exception: + pass else: self.root.after(1000, lambda: self.check_settings_closed(proc)) diff --git a/signage_player/static_data/media/Banner_poarta_2_x6.jpg b/signage_player/static_data/media/Banner_poarta_2_x6.jpg new file mode 100644 index 0000000..fcf0864 Binary files /dev/null and b/signage_player/static_data/media/Banner_poarta_2_x6.jpg differ diff --git a/signage_player/static_data/media/big-buck-bunny-1080p-60fps-30sec.mp4 b/signage_player/static_data/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 similarity index 60% rename from signage_player/static_data/media/big-buck-bunny-1080p-60fps-30sec.mp4 rename to signage_player/static_data/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 index 2edb1cb..d5e0a13 100644 Binary files a/signage_player/static_data/media/big-buck-bunny-1080p-60fps-30sec.mp4 and b/signage_player/static_data/media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4 differ diff --git a/signage_player/static_data/media/call-of-duty-black-3840x2160-23674.jpg b/signage_player/static_data/media/call-of-duty-black-3840x2160-23674.jpg deleted file mode 100644 index 62f7d98..0000000 Binary files a/signage_player/static_data/media/call-of-duty-black-3840x2160-23674.jpg and /dev/null differ diff --git a/signage_player/static_data/media/cropped-cropped-main-picture-scaled-1.jpeg b/signage_player/static_data/media/cropped-cropped-main-picture-scaled-1.jpeg new file mode 100644 index 0000000..8a15a16 Binary files /dev/null and b/signage_player/static_data/media/cropped-cropped-main-picture-scaled-1.jpeg differ diff --git a/signage_player/static_data/media/demo2.jpeg b/signage_player/static_data/media/demo2.jpeg deleted file mode 100644 index 29d8372..0000000 Binary files a/signage_player/static_data/media/demo2.jpeg and /dev/null differ diff --git a/signage_player/static_data/media/start_page.jpeg b/signage_player/static_data/media/start_page.jpeg new file mode 100644 index 0000000..3a57493 Binary files /dev/null and b/signage_player/static_data/media/start_page.jpeg differ diff --git a/signage_player/static_data/playlist/server_playlist_v4.json b/signage_player/static_data/playlist/server_playlist_v4.json deleted file mode 100644 index 78da892..0000000 --- a/signage_player/static_data/playlist/server_playlist_v4.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "playlist": [ - { - "file_name": "big-buck-bunny-1080p-60fps-30sec.mp4", - "url": "media/big-buck-bunny-1080p-60fps-30sec.mp4", - "duration": 30 - }, - { - "file_name": "call-of-duty-black-3840x2160-23674.jpg", - "url": "media/call-of-duty-black-3840x2160-23674.jpg", - "duration": 10 - }, - { - "file_name": "demo2.jpeg", - "url": "media/demo2.jpeg", - "duration": 10 - } - ], - "version": 4 -} \ No newline at end of file diff --git a/signage_player/static_data/playlist/server_playlist_v5.json b/signage_player/static_data/playlist/server_playlist_v5.json new file mode 100644 index 0000000..aaa4698 --- /dev/null +++ b/signage_player/static_data/playlist/server_playlist_v5.json @@ -0,0 +1,25 @@ +{ + "playlist": [ + { + "file_name": "cropped-cropped-main-picture-scaled-1.jpeg", + "url": "media/cropped-cropped-main-picture-scaled-1.jpeg", + "duration": 15 + }, + { + "file_name": "start_page.jpeg", + "url": "media/start_page.jpeg", + "duration": 15 + }, + { + "file_name": "Banner_poarta_2_x6.jpg", + "url": "media/Banner_poarta_2_x6.jpg", + "duration": 10 + }, + { + "file_name": "WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4", + "url": "media/WhatsApp_Video_2025-08-21_at_18.34.19_86a6f243.mp4", + "duration": 101 + } + ], + "version": 5 +} \ No newline at end of file diff --git a/video_profile.txt b/video_profile.txt new file mode 100644 index 0000000..ebfa6d4 --- /dev/null +++ b/video_profile.txt @@ -0,0 +1,11 @@ +Video Profile for Player Compatibility (based on intro1.mp4) + +Codec: H.264 +Profile: Main +Resolution: 1920x1080 +Bitrate: ~14,700 kbps +Framerate: 29.97 fps + +Recommended ffmpeg conversion command: + +ffmpeg -i input.mp4 -c:v libx264 -profile:v main -b:v 14700k -vf "scale=1920:1080,fps=29.97" -c:a copy output_normalized.mp4