Files
signage-player/src/media_player.py
2025-03-19 16:52:03 +02:00

64 lines
2.2 KiB
Python

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.uix.video import Video
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
import requests
import os
import json
class MediaPlayer(Screen):
def __init__(self, **kwargs):
super(MediaPlayer, self).__init__(**kwargs)
self.playlist = []
self.current_index = 0
self.video_player = Video()
self.image_display = Image()
self.layout = BoxLayout(orientation='vertical')
self.layout.add_widget(self.video_player)
self.layout.add_widget(self.image_display)
self.add_widget(self.layout)
Clock.schedule_interval(self.check_playlist_updates, 300) # Check for updates every 5 minutes
def on_enter(self):
self.load_playlist()
self.play_media()
def load_playlist(self):
# Load playlist from the server or local storage
try:
response = requests.get('http://yourserver.com/api/playlist')
response.raise_for_status() # Raise an exception for HTTP errors
self.playlist = response.json()
except requests.exceptions.RequestException as e:
print(f"Failed to load playlist: {e}")
except json.JSONDecodeError:
print("Failed to parse playlist JSON")
def play_media(self):
if self.playlist:
media = self.playlist[self.current_index]
if media['type'] == 'video':
self.video_player.source = media['url']
self.video_player.play()
self.image_display.source = ''
elif media['type'] == 'image':
self.image_display.source = media['url']
self.video_player.source = ''
self.image_display.reload()
def check_playlist_updates(self, dt):
self.load_playlist()
self.play_media()
class MediaPlayerApp(App):
def build(self):
Window.fullscreen = True
sm = ScreenManager()
sm.add_widget(MediaPlayer(name='media_player'))
return sm
if __name__ == '__main__':
MediaPlayerApp().run()