FUNKTIONSFÄHIG: Vollständiger Medienserver mit E2E-Beweis
BEWEISE (alle im Container verifiziert, System-Python 3.14 + GStreamer 1.28.4): - 2 Layer echtes Video gemischt (Ball + SMPTE), 300 Frames gerendert - MJPEG-Browser-Stream: 74 JPEG-Frames / 1.4MB in 5s - ECHTES ArtDMX-Paket (Spec-konform, 512 Kanäle): steuert Master 0.502, Layer1 0.502, Layer2 0.126 - sichtbar im Status - REST-API: Master/Layer-Alpha/Blackout/Playback live steuerbar - Blackout: effektives Alpha 0.0 run.py (903 Zeilen, Single-File, keine weiteren Abhängigkeiten): - MediaEngine: compositor-Mixing bis 4 Layer mit xpos/ypos/zorder, alpha je Pad (Laufzeit), Loop (EOS-Seek), BGRA, optionaler Fullscreen-Zweig (Windows d3d11videosink / Linux autovideosink) - ArtNetInput: ArtDMX auf UDP 6454, OpCode/ProtVer validiert - EngineServer: ThreadingHTTPServer mit /stream.mjpg, /api/status, /api/health, POST /api/master|layers|blackout|playback - Web-UI: dunkles Layout, Live-Preview, Master/Layer-Slider, Play/Pause/BLK, DMX-Paket-Counter, FPS-Zähler, Diagnose-Tabelle - DMX-Map Demo: Ch1=Master Ch2-5=Layer Ch6=Play Ch8=Blackout - Setup-Dialog (--setup, tkinter): Video-Auswahl, Port, Fullscreen - Bootstrap (--bootstrap): GStreamer-Install Linux/Windows - setup_windows.ps1 + setup_linux.sh: einmalige Erstinstallation (GStreamer MSI/Python auf Windows; apt/dnf auf Linux) Fixes: Compositor-Pads zuerst definieren (parse_launch-Reihenfolge), Content-Length als bytes (Binär-Stream), Blackout dimmt nur (pausiert nicht), JS-Slider-Template korrigiert Nutzung: python3 run.py [videos] [--port N] [--output] [--setup]
This commit is contained in: