Changed script and files to Display Tumbnail instead of Viedo Loop

This commit is contained in:
Tim Schilling
2024-09-15 17:24:56 +02:00
parent f3f37a9166
commit 4cd449d7ba
7 changed files with 109 additions and 43 deletions
+3 -10
View File
@@ -101,12 +101,6 @@ cd ..
# Create the systemd service for autologin and video control # Create the systemd service for autologin and video control
echo -e "${GREEN}======== Creating systemd service ========${NOCOLOR}" echo -e "${GREEN}======== Creating systemd service ========${NOCOLOR}"
# Autologin service content
AUTOLOGIN_SERVICE_CONTENT="[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin $CURRENT_USER --noclear tty1 linux
"
# Video control service content # Video control service content
SERVICE_CONTENT="[Unit] SERVICE_CONTENT="[Unit]
Description=Video Control Script Description=Video Control Script
@@ -126,11 +120,10 @@ WantedBy=multi-user.target
# If the user opted for autostart, create the service files # If the user opted for autostart, create the service files
if [ $SYSD -eq 0 ]; then if [ $SYSD -eq 0 ]; then
# Creating Service file for Autologin of the Current User # Disableing Login Promt for TTY1
echo "$AUTOLOGIN_SERVICE_CONTENT" | sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf > /dev/null sudo systemctl disable getty@tty1.service
check_error "Failed to create autologin service."
# Craating Service file for Video Playback # Creating Service file for Video Playback
echo "$SERVICE_CONTENT" | sudo tee /etc/systemd/system/$SERVICE_NAME > /dev/null echo "$SERVICE_CONTENT" | sudo tee /etc/systemd/system/$SERVICE_NAME > /dev/null
check_error "Failed to create PiVideo service." check_error "Failed to create PiVideo service."
Executable
+42
View File
@@ -0,0 +1,42 @@
#! /usr/bin/python3
import RPi.GPIO as GPIO
import subprocess
import time
# GPIO-Setup
BUTTON_PIN = 17 # Ersetze dies durch den tatsächlichen GPIO-Pin, den du verwendest
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
loop_video = 'videos/loop.mp4'
trigger_video = 'videos/trigger.mp4'
# Funktion zum Abspielen eines Videos
def play_video(video_file):
subprocess.run(['cvlc', '--play-and-exit', '--fullscreen', '--no-video-title-show', video_file])
# Endlosschleife Video 1 starten
loop_video = subprocess.Popen(['cvlc', '--loop', '--fullscreen', '--no-video-title-show', loop_video])
try:
while True:
# Überprüfen, ob der Button gedrückt wurde
button_state = GPIO.input(BUTTON_PIN)
if button_state == GPIO.LOW: # Button gedrückt
# Stoppe das loop_video
loop_video.terminate()
# Video 2 abspielen
play_video(trigger_video)
# Nach dem Abspielen von Video 2 wieder Video 1 in Schleife starten
loop_video = subprocess.Popen(['cvlc', '--loop', '--fullscreen', '--no-video-title-show', loop_video])
time.sleep(0.1) # Entprellen des Buttons
except KeyboardInterrupt:
# Bei einem Tastaturabbruch das laufende Video stoppen und GPIO reinigen
loop_video.terminate()
GPIO.cleanup()
Executable → Regular
+59 -25
View File
@@ -1,42 +1,76 @@
#! /usr/bin/python3 import os
import RPi.GPIO as GPIO
import subprocess
import time import time
import RPi.GPIO as GPIO
from subprocess import Popen, call
import sys
# GPIO-Setup os.system('sudo chvt 1')
BUTTON_PIN = 17 # Ersetze dies durch den tatsächlichen GPIO-Pin, den du verwendest
# Pfade zu den Dateien
THUMBNAIL_IMAGE = "/home/tim/PiVideo/videos/thumb.jpeg"
TRIGGER_VIDEO = "/home/tim/PiVideo/videos/trigger.mp4"
LOG_FILE = "/home/tim/PiVideo/log.txt"
# GPIO-Einstellungen
BUTTON_PIN = 17
GPIO.setmode(GPIO.BCM) GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
loop_video = 'videos/loop.mp4' # Umleitung der Ausgaben in eine Log-Datei
trigger_video = 'videos/trigger.mp4' sys.stdout = open(LOG_FILE, "a")
sys.stderr = open(LOG_FILE, "a")
# Funktion zum Abspielen eines Videos def log_message(message):
def play_video(video_file): """Schreibt eine Nachricht in die Log-Datei."""
subprocess.run(['cvlc', '--play-and-exit', '--fullscreen', '--no-video-title-show', video_file]) timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(f"{timestamp} - {message}")
sys.stdout.flush()
# Endlosschleife Video 1 starten def show_thumbnail(image_path):
loop_video = subprocess.Popen(['cvlc', '--loop', '--fullscreen', '--no-video-title-show', loop_video]) """Zeigt das Thumbnail an."""
log_message(f"Displaying thumbnail: {image_path}")
call(['sudo', 'fbi', '-T', '1', '-d', '/dev/fb0', '-a','-noverbose', image_path])
def close_thumbnail():
"""Beendet fbi, um das Thumbnail zu schließen."""
log_message("Closing thumbnail.")
call(['sudo', 'killall', 'fbi'])
def play_video(video_path):
"""Spielt das Trigger-Video ab."""
log_message(f"Playing video: {video_path}")
p = Popen(['cvlc', '--play-and-exit', '--fullscreen', '--no-video-title-show', video_path])
p.wait()
def main():
log_message("Starting main loop.")
try: try:
while True: while True:
# Überprüfen, ob der Button gedrückt wurde # Thumbnail anzeigen
button_state = GPIO.input(BUTTON_PIN) show_thumbnail(THUMBNAIL_IMAGE)
if button_state == GPIO.LOW: # Button gedrückt
# Stoppe das loop_video
loop_video.terminate()
# Video 2 abspielen # Warten, bis der Button gedrückt wird
play_video(trigger_video) while GPIO.input(BUTTON_PIN) == GPIO.HIGH:
time.sleep(0.1)
# Nach dem Abspielen von Video 2 wieder Video 1 in Schleife starten
loop_video = subprocess.Popen(['cvlc', '--loop', '--fullscreen', '--no-video-title-show', loop_video])
time.sleep(0.1) # Entprellen des Buttons # Video abspielen, wenn Button gedrückt wurde
log_message("Button pressed, playing trigger video.")
play_video(TRIGGER_VIDEO)
# fbi schließen, bevor das Video abgespielt wird
close_thumbnail()
# Nach dem Video wieder Thumbnail anzeigen
log_message("Trigger video finished, displaying thumbnail again.")
except KeyboardInterrupt: except KeyboardInterrupt:
# Bei einem Tastaturabbruch das laufende Video stoppen und GPIO reinigen log_message("Script interrupted by user.")
loop_video.terminate() finally:
GPIO.cleanup() GPIO.cleanup()
log_message("GPIO cleanup completed. Exiting script.")
if __name__ == "__main__":
log_message("Script started.")
main()
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.