- POST /system/shutdown and /system/reboot Flask endpoints (sudo shutdown)
- index.html: new System card with Neustart + Ausschalten buttons (confirm dialog)
- live.html: red ⏻ button in bottom bar, replaces page with message on shutdown
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- audioCtx.resume() explizit aufrufen (Android suspendiert AudioContext)
- ws:// vs wss:// dynamisch je nach Seitenprotokoll
- Button zeigt "Verbinde…" bis WebSocket offen ist
- onclose Handler setzt Button zurück auf "Ton an"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
HTTP Ogg-Streaming hat zu viel Latenz durch Browser-Buffering.
Neuer Ansatz: Raw PCM S16_LE über WebSocket, Web Audio API spielt
direkt ab. Latenz ~100-200ms statt mehrere Sekunden.
- /audio-ws: WebSocket-Endpunkt, streamt arecord PCM-Chunks (512 Bytes = ~32ms)
- live.html: startAudio() öffnet WebSocket, dekodiert PCM zu Float32,
plant Playback mit AudioContext.createBufferSource() in 40ms-Queue
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Neuer Endpunkt GET /audio: ffmpeg liest von plughw:2,0 (USB-Soundkarte CM108)
und streamt Ogg/Opus mit 16kHz Mono 24kbps
- live.html: Ton-Button (🔇/🔊) startet/stoppt Audio-Stream on demand
- setup.sh: ffmpeg installieren, pi zur audio-Gruppe hinzufügen
- pi zur audio-Gruppe hinzugefügt (war nötig für /dev/snd Zugriff)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Schwarzer Hintergrund, Stream füllt den ganzen Bildschirm (object-fit: cover)
- Overlay mit Uhrzeit und Einstellungs-Link erscheint bei Tap/Klick, blendet sich nach 3s aus
- Vollbild-Button nutzt Fullscreen API
- Auf Handys wird automatisch Landscape angefragt
- Stream-Box auf Hauptseite ist jetzt klickbar und verlinkt auf /live
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>