6.1 KiB
Info-Board Neu - Player-Konzept
Ziel
Der Player ist eine moeglichst schlanke Display-Appliance fuer Raspberry Pi OS Lite.
Er soll:
- Bilder, Videos, PDFs und Webseiten anzeigen
- globale Kampagnen, tenantbezogene Playlists und Fallback sauber priorisieren
- bei Serverausfall autonom weiterlaufen
- per MQTT steuerbar sein
- per Ansible einfach ausrollbar sein
- moeglichst wenige Laufzeitabhaengigkeiten haben
Leitprinzip
Chromium ist nur Renderer, nicht Steuerzentrale.
Das bedeutet:
- Chromium zeigt nur die lokale
player-ui - die
player-uientscheidet, was angezeigt wird - der
player-agentverwaltet Sync, Cache, Kommandos und Status - externe URLs werden nie unkontrolliert direkt als Hauptbrowserziel verwendet
Komponenten
player-agent
Implementierung:
- bevorzugt in
Go - als einzelnes Binary auslieferbar
Aufgaben:
- Registrierung beim Server
- Abruf von Konfiguration, Playlist, Kampagne und Medienmanifest
- lokaler Mediencache
- MQTT-Kommunikation
- Heartbeat und Statusmeldungen
- Screenshot-Erzeugung
- Ausfuehrung von Admin-Kommandos
- Ueberwachung von Chromium und
player-ui
player-ui
Implementierung:
- lokale Web-Anwendung
- von Chromium im Kiosk dargestellt
Aufgaben:
- Playlist-Logik lokal darstellen
- Prioritaet
campaign > tenant_playlist > fallbackumsetzen - Bilder, Videos, PDFs und Webseiten anzeigen
- Lade-Timeouts und Fehlerpfade umsetzen
- Offline-/Degraded-Overlay anzeigen
- Renderer-seitige Healthchecks liefern
Chromium
Aufgabe:
- reine Darstellung der lokalen
player-ui
Vorgaben:
- Kiosk-Modus
- Vollbild
- moeglichst ohne weitere Browser-Interaktion
- Neustart durch systemd/Watchdog erlaubt
Laufzeitmodell
Startreihenfolge
- Basis-System bootet
- X11-Minimalstack startet
player-agentstartetplayer-uiist lokal erreichbar- Chromium startet auf lokaler URL
- Agent fuehrt ersten Sync und Registrierungsablauf aus
Lokaler Zustand
Der Player haelt lokal vor:
- aktuelle Konfiguration
- letzte gueltige Playlist
- letzte gueltige Kampagne
- lokales Medienmanifest
- heruntergeladene Medien
- Status-/Snapshot-Metadaten
Empfohlene Pfade:
/etc/signage/config.yml/var/lib/signage/cache//var/lib/signage/media//var/lib/signage/state//var/log/signage/
Inhaltsprioritaet
Die Anzeigeentscheidung erfolgt immer in dieser Reihenfolge:
- aktive globale Kampagne fuer diesen Screen
- normale tenantbezogene Playlist
- lokaler Fallback aus dem konfigurierten Verzeichnis
Kampagnenmodus
Wenn eine gueltige Kampagne fuer den Screen aktiv ist:
- zeigt der Player nur den Kampagneninhalt
- der Firmencontent wird temporär uebersteuert
- nach Ablauf oder Deaktivierung springt der Player automatisch zurueck
Tenant-Playlist-Modus
Wenn keine Kampagne aktiv ist:
- wird die tenantbezogene Playlist ausgewertet
- nur aktive und zeitlich gueltige Elemente werden angezeigt
Fallback-Modus
Wenn weder Kampagne noch gueltige Playlist-Inhalte verfuegbar sind:
- werden alle Dateien aus dem Fallback-Verzeichnis nacheinander angezeigt
Medientypen
Bild
- lokal oder aus Cache
- Anzeige fuer definierte Dauer
Video
- lokal oder aus Cache
- entweder feste Dauer oder bis Medienende
- lokal oder aus Cache
- Anzeige ueber Browser/PDF-Renderer
Webseite
- live geladen oder kontrolliert zwischengespeichert
- immer mit
load_timeout - nie rohe Browser-Fehlerseite dauerhaft stehen lassen
Fehlerverhalten
Grundregeln
- Fehler eines einzelnen Items duerfen den Player nicht blockieren
- jeder Fehler fuehrt zu
retry,skipoderfallback - haengende Browserfehlerseiten muessen aktiv verhindert werden
Typische Fehlerfaelle
- Medium fehlt lokal
- externe URL nicht erreichbar
- PDF fehlerhaft
- Video unlesbar
- Webseite liefert 404/500 oder timeout
Reaktion
- Fehler loggen
- Status aktualisieren
- ggf. Overlay auf
degraded - zum naechsten Element wechseln oder definierte Retry-Logik ausfuehren
Offline-Verhalten
Offline-Betrieb ist Standardfall, nicht Sonderfall.
Wenn der Server nicht erreichbar ist:
- laeuft die Wiedergabe lokal weiter
- letzte gueltige Daten bleiben aktiv
- Overlay zeigt den Verbindungszustand an
- Heartbeats und Status koennen lokal zwischengespeichert oder spaeter aktualisiert werden
Overlay-Konzept
Das Overlay soll klein und unaufdringlich sein.
Zustaende:
onlinedegradedoffline
Moegliche Anzeige:
- kleines Symbol in Ecke
- optional Text wie
offline - letzter Sync vor 2h
Orientierung und Display-Konfiguration
Jeder Screen hat:
- fachliche Orientierung:
portraitoderlandscape - technische Rotation:
0,90,180,270
Diese Werte beeinflussen:
- Chromium-Startkonfiguration
- X11-/Display-Setup
- Asset-Auswahl bei Kampagnen
- Darstellung in der
player-ui
Watchdogs
Agent-Watchdog
- systemd Restart-Strategie
- eigener Healthcheck fuer Sync und Broker-Verbindung
Renderer-Watchdog
- Ueberwachung von Chromium
- Erkennung haengender Darstellungen
- geordneter Neustart bei Freeze oder Crash
Screenshots und Status
Der Player erzeugt Screenshots:
- bei Item-Wechsel
- zyklisch
- auf Admin-Anforderung
Der Player meldet Status:
- aktuelles Item
- Quelle (
campaign,tenant_playlist,fallback) - Fehlerstatus
- letzter Sync
- Heartbeat
MQTT-Kommandos auf dem Player
Mindestens zu unterstuetzen:
reloadrestart_playerrebootdisplay_ondisplay_offrefresh_snapshotclear_cache
Minimaler Paketbedarf
Auf dem Player anzustreben:
- Raspberry Pi OS Lite
- Xorg-Minimalstack
- Chromium
- eigenes Go-Binary
- systemd
Vermeiden:
- LXDE/LXQt
- LightDM, wenn nicht zwingend noetig
- mehrere externe Viewer
- schwergewichtige Laufzeitstapel auf dem Geraet
Zielstruktur im Repo
Empfohlene Unterstruktur fuer den Player:
player/agent/player/ui/player/systemd/player/config/player/scripts/
Testfaelle fuer den Player
- lokaler Start ohne Server
- späterer Verbindungsaufbau zum Server
- Wechsel zwischen Kampagne, Playlist und Fallback
- kurzer Netzverlust
- kaputte Web-URL
- defektes PDF
- Neustart von Chromium
- Screenshot-Erzeugung
- Rotation/Portrait/Landscape