HMS MediaEngine Agent
|
3ec46dda29
|
FUNKTIONIERENDER Renderer: Echtes Video-Playback + MJPEG-Browser-Stream
BEWEIS (im Container getestet, System-Python 3.14 + GStreamer 1.28.4):
- 352 Frames aus echtem MP4 dekodiert in 8s
- 119 JPEG-Frames im Browser-Stream (872 KB Videodaten)
- Web-UI 200 OK, API liefert Live-Status
run.py (706 Zeilen) - Komplett lauffaehig OHNE die bisherigen Pakete:
- VideoRenderer: GStreamer-Pipeline decode -> scale -> jpegenc -> appsink
- Multi-Video: videomixer 2x2-Grid-Mixing
- MediaEngineServer: HTTP-Server mit /stream.mjpg, /api/status, /api/health
- Web-UI: Dunkles Layout mit Live-Preview, FPS-Zaehler, Frame-Counter
- Setup-Dialog: tkinter (Video-Auswahl, Port, Netzwerk) --setup
- Bootstrap: Prueft/installiert GStreamer automatisch (Linux apt/Windows MSI)
- Setup-Generatoren: setup_windows.ps1 (Python+GStreamer+uv+Frontend),
setup_linux.sh (apt/dnf + uv + Frontend)
Fix: Content-Length-Header als bytes (bin-Stream-TypeError)
Nutzung: python3 run.py [videos...] [--port N] [--setup] [--bootstrap]
|
2026-09-11 09:36:04 +02:00 |
|
HMS MediaEngine Agent
|
9788fefcb4
|
Fix: ungenutzten vi-Import aus LayerTable.test entfernt (TS6133)
|
2026-09-11 08:44:59 +02:00 |
|
HMS MediaEngine Agent
|
739a81bcf1
|
Build: Windows Portable-Build (§30.2) + Frontend-Tests (§17.10)
- build_portable.sh: Nuitka Onefolder (ADR-0005), 5 Schritte:
uv sync -> Frontend -> Rust (cargo optional) -> Nuitka ->
GStreamer-Buendelung + portable Struktur + SHA-256 + ZIP
- Portable Struktur (§9): PORTABLE_MODE, runtime/gstreamer, web/,
plugins/, projects/, media/, userdata/, config/, logs/, licenses/
- Frontend-Tests: Vitest + Testing Library, 9 Tests:
LayerTable (10 Spalten, Selektion, 7 Zustaende, Screen-Reader),
StatusBar (FPS 2 Dezimalstellen, Quality Auto, Art-Net-Status)
- Gesamtsuite 595 Python + 9 Vitest gruen
|
2026-09-11 08:41:44 +02:00 |
|
HMS MediaEngine Agent
|
f7f52f909d
|
Launcher: vollständiger Startablauf nach §9.2
- run(): App-Root bestimmen, Schreibbarkeit prüfen (§9.1), freie Ports
wählen (§6.1A), Renderer + Control Core über Supervisor starten
- Healthcheck: wartet bis /api/v1/system/health 200 OK (§9.2 Nr. 7)
- Recovery-Markierung: unsauberer Shutdown wird sichtbar (§26.4)
- Browser: plattformneutral öffnen (Windows/Darwin/Linux, optional)
- Hauptschleife: Supervisor-Überwachung, Crashloop-Erkennung,
SIGINT/SIGTERM mit kontrolliertem Beiden beider Prozesse (§26.4)
- Exit-Code 0 bei kontrolliertem Beenden, 1 bei Healthcheck-Fehler
|
2026-09-11 08:38:05 +02:00 |
|
HMS MediaEngine Agent
|
73da76f44a
|
Renderer-Engine: Sync->Advance->Snapshot-Kette (§12, §11.4, §29.2)
- RenderEngine: orchestriert alle Quellen pro Frame mit fester
Master-Bildrate (§12.2): Sync aus StateMirror, Playback-Advancement,
unveraenderlicher FrameSnapshot, Telemetry (§28.2)
- SourceHandle: verbindet PlaybackController + PreloadSlot +
Parameterpfade; Transport (Play/Pause/Stop/Retrigger) aus Mirror;
Clip-Wechsel atomar ueber Preload/Commit (§12.2, §16.5)
- FrameSnapshot: unveränderlich pro Frame (§11.4): Parameter,
Positionen, Transport-Zustaende, aktive Assets; halbe Zustaende
ausgeschlossen
- RenderTelemetry: Frame-Index, FPS, Framezeit, aktive Layer,
pending Preloads, Events (§25.4, §28.2)
- TransportState-Mapping: int-Werte 0/1/2 aus Mirror auf Enum
- 9 Unit-Tests: Frame-Snapshots, Play-Command, Positions-Advancement,
atomarer Asset-Wechsel, Retrigger, Snapshot-Unveränderlichkeit,
Telemetry, Multi-Source-Speed, Stopped-Verhalten
- Gesamtsuite 595 gruen, Ruff gruen
|
2026-09-11 08:34:13 +02:00 |
|
HMS MediaEngine Agent
|
82c79ec485
|
Phase 5: Projekt-/Media-/Plugin-API im Control Core (§23.1, §13.3)
- Projekte: CRUD + Activate (State-Store-Revision), §23.1/§24.2
- Medien: Import mit Duplikaterkennung (§13.3), Liste mit
Missing-Markierung (§13.2)
- Plugins: Listing nach Lifecycle-Status gruppiert (§14.5),
Enable mit Lifecycle-Advancement, 404 bei unbekanntem Plugin
- Art-Net-Status-Endpunkt (§23.1)
- Diagnostics erweitert um State-/Projekt-Revisionen (§28.2)
- Commands schreiben jetzt auch in den State-Store (§6.4)
- SQLite check_same_thread=False für FastAPI async handlers
- python-multipart für UploadFile hinzugefügt
- Discovery-Fix: Builtin-Plugins nach Kategorie-Unterverzeichnissen
(generators/, filters/) durchsuchen statt nur Direktkinder
- 8 neue Integrationstests: Projekt-CRUD-Roundtrip, Activate,
Media-Import mit Duplikat, Plugin-Listing (10+14 verifiziert),
Enable-404, Diagnostics-Revisionen
- Gesamtsuite 557 grün, Ruff grün
|
2026-09-11 03:13:43 +02:00 |
|
HMS MediaEngine Agent
|
c6a3cf7751
|
Phase 5: Web-Bedienoberfläche nach §17 (React+Vite, ADR-0006)
- ADR-0006: React 18/19 mit Vite im statischen SPA-Modus
- Workspace §17.2: Statusleiste 32px, einklappbare Werkzeugleiste,
Layer-Tabelle, Inspector ~30% mit Divider-Resize, umschaltbare
rechte Seitenleiste, Fußleiste mit Setup/Live-Lock
- Layer-Tabelle §17.3: alle 10 Pflichtspalten, Zeilen 30px,
7 unterscheidbare Zustände (Glyph+Farbe+Text, nie nur Farbe),
Pfeiltasten-Navigation, Opacity-Fader mit echtem parameter.set
- Inspector §17.4: 7 Tabs, Zahlenfelder mit Tippen/Ziehen/Pfeiltasten,
Release-Befehl, Live-Lock sperrt Struktur
- Design-Tokens §17.6: alle als CSS-Variablen (Flächen, Text,
Akzent-Blau, Zustandsfarben, 4px-Raster, 2-4px Radien,
Monospace tabular-nums, 100-180ms)
- WebSocket: Snapshot bei Connect, Deltas danach, Reconnect
1s/2s/4s max 30s; Browser-Neustart stoppt Output nicht (§3.2)
- REST: health/identity/cluster-nodes/parameters/diagnostics,
Commands mit expected_revision + Revert bei 409
- Kein GO-Button, keine Standby-Anzeige, keine Cue-Carts (§17.1)
- Build: tsc strict + vite, 27 Module, 262KB JS gzip 80KB
- Python-Suite 549 grün unberührt
|
2026-09-11 03:02:38 +02:00 |
|
HMS MediaEngine Agent
|
b2610e35e5
|
Phase 2 abgeschlossen: Renderer-State-Sync über echte IPC (§6.2, §6.4)
- RemoteStateMirror (Renderer): Snapshot-Pflicht nach (Re-)Connect,
Deltas mit neu/geaendert/geloescht, Deltas vor erstem Snapshot werden
abgelehnt (Re-Sync), Duplikate/Veraltete idempotent
- RendererStateLink (Control Core): connect_and_sync mit Pflicht-Snapshot,
sync_if_changed versendet Deltas seit letzter gesendeter Revision,
Reconnect loest immer neuen Snapshot aus (kein halber Zustand)
- End-to-End-Integrationstests ueber echtes TCP-Loopback ohne Mocks:
Snapshot->Delta-Kette, Reconnect-Re-Sync, Delta-vor-Snapshot-Ablehnung,
Duplikat-No-Op
- Gesamtsuite 297 gruen, Ruff gruen
|
2026-09-11 01:33:47 +02:00 |
|
HMS MediaEngine Agent
|
e4e76a7ede
|
Phase 1 abgeschlossen: Node-Identitaet in Control Core verkabelt (§3.6, §6.3)
- NodeIdentity/NodeRole in hms_domain: persistente node_id aus
userdata/identity, Rollen RENDER_NODE/COORDINATOR/CONTROL_DESK,
plausible Kombinationen validiert, keine Auto-Leader-Wahl (§6.3)
- Control Core: create_app(identity) injizierbar; Dev-Modus ephemeral;
Registry registriert eigene Node; neue Endpunkte /system/identity
(ohne Secrets, §27.1) und /cluster/nodes (UI-Kategorien §6.3)
- 16 neue/aktualisierte Integrationstests; Gesamtsuite 199 gruen
|
2026-09-11 01:10:49 +02:00 |
|
HMS MediaEngine Agent
|
80dc10de22
|
Phase 1: Supervisor/Launcher mit Prozessüberwachung (§6.1A, §26)
- Supervisor: echte Kindprozesse, portable Umgebung, freie Portwahl
- Kontrolliertes Beenden: terminate -> wait -> kill mit Recovery-Markierung
- Restart-Policy mit Crashloop-Erkennung (Zeitfenster-Schwelle)
- Recovery-Marker: forced-kill wird persistent dokumentiert (§26.4)
- 10 Tests mit echten Prozessen (keine Mocks): Start/Stop, Crash-Restart,
Crashloop, SIGTERM-resistenter Prozess, Environment-Vererbung
|
2026-09-11 00:54:45 +02:00 |
|
HMS MediaEngine Agent
|
0922cc1d68
|
Phase 0: Repository-Initialisierung nach Bauplan v1.2
- Struktur gemäß §8 (Eigentumsgrenzen), PLAN.md als normative Basis
- Pflichtdokumente: STATUS.md, ERRORS.md, TEST_REPORT.md, CHANGELOG.md, ADRs
- ADR-0001 Python 3.13-Pin, ADR-0002 GStreamer 1.28.6-Pin (Windows),
ADR-0003 IPC TCP+MessagePack v1
- Kernpakete: hms_protocol, hms_domain, hms_parameter, hms_artnet,
hms_adaptive, hms_capabilities, hms_plugin_sdk
- Renderer-Spike: D3D11-Primärpfad + Dev-GL-Pfad (§36 Nr. 4-5)
- Control Core: FastAPI REST + WebSocket (§36 Nr. 9)
- Beispielplugins: Passthrough + Gaussian Blur (3 Adaptive-Quality-
Varianten, HLSL/GLSL/GLES)
- Tools: Art-Net-Emulator, Fixture-Generator (Master32/Layer64-CSV),
Capability-Probe
- JSON-Schemas: IPC, Plugin, Projekt, Cluster
- 121 Unit-/Integrationstests grün, Ruff grün
Gate 0 bleibt offen: Hardwaremessungen nur auf echter Windows-Referenz-
hardware gültig (§29.7, §33).
|
2026-09-11 00:36:59 +02:00 |
|