1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import vlc
LOCAL_DIR = os.getenv("LOCAL_DIR", "/home/displex/content") # Default local directory
def fetch_local_file_list(directory):
try:
# Extend to fetch jpg and png files as well
return [f for f in os.listdir(directory) if f.lower().endswith(('.mp4', '.jpg', '.png'))]
except Exception as e:
return []
def update_play_list(media_list, instance, media_files):
media_list.lock()
while media_list.count() > 0:
media_list.remove_index(0)
for media_file in media_files:
media_path = os.path.join(LOCAL_DIR, media_file)
if media_file.lower().endswith(('.jpg', '.png')):
media = instance.media_new(media_path)
else:
media = instance.media_new(media_path)
media_list.add_media(media)
media_list.unlock()
class VideoHandler(FileSystemEventHandler):
def __init__(self, media_list, instance):
self.media_list = media_list
self.instance = instance
def on_created(self, event):
if event.src_path.endswith((".mp4", ".jpg", ".png")):
update_play_list(self.media_list, self.instance, fetch_local_file_list(LOCAL_DIR))
def on_deleted(self, event):
if event.src_path.endswith((".mp4", ".jpg", ".png")):
update_play_list(self.media_list, self.instance, fetch_local_file_list(LOCAL_DIR))
def play_videos():
instance = vlc.Instance('--no-xlib --aout=alsa --quiet --file-logging --logfile=vlc-log.txt --no-video-title-show --verbose=2')
media_list = instance.media_list_new()
player = instance.media_list_player_new()
player.set_media_list(media_list)
player.set_playback_mode(vlc.PlaybackMode.loop)
media_files = fetch_local_file_list(LOCAL_DIR)
update_play_list(media_list, instance, media_files)
observer = Observer()
event_handler = VideoHandler(media_list, instance)
observer.schedule(event_handler, LOCAL_DIR, recursive=False)
observer.start()
player.play() # Start playback |
Partager