v1.15.4 - Video-Export: 2D-Mirror-Workaround und Reihenfolge-Bug behoben
Tatsächlicher Fix: 5-Byte-Download endlich behoben
Aus den Safari-Konsolen-Logs zweier Iterationen sind jetzt beide Root-Causes klar:
Bug A: Safari encodet keine Frames aus WebGL-Canvas
Selbst mit preserveDrawingBuffer: true produziert WebKits MediaRecorder beim canvas.captureStream() auf einem WebGL-Canvas null Frames. Bekannter, langjähriger WebKit-Bug.
Workaround: ein unsichtbarer 2D-Canvas-Mirror wird pro Frame mit drawImage(webglCanvas, ...) aktualisiert. Der MediaRecorder bekommt seinen Stream vom 2D-Canvas, nicht direkt vom WebGL-Canvas. 2D-captureStream funktioniert in allen Browsern zuverlässig.
CPU-Mehraufwand: ein drawImage pro Frame, im Verhältnis zum Chase-Cam-Rendering vernachlässigbar.
Bug B: Aufnahme beendet sich selbst nach 5 Bytes
Im _startRecording-Ablauf war die Reihenfolge falsch:
this._isRecording = true;
...
this._stopAnim(); // checks _isRecording -> calls _stopRecording -> KILLT den gerade gestarteten RecorderDer Recorder lief Mikrosekunden, lieferte den EBML-Header (5 Byte), wurde stillgelegt. Die Tour-Wiedergabe lief danach zwar, aber ohne aktive Aufnahme.
Fix: Reihenfolge in _startRecording neu sortiert:
_stopAnim()ZUERST aufrufen (noch bevor_isRecordinggesetzt ist, damit es nicht in den Recorder reingreift)- Slider zurück auf 0
_applyIndex(0)für ersten Frame_isRecording = truemediaRecorder.start()- Per-Frame-Copy-RAF starten
_startAnim()für die Wiedergabe
Am Tour-Ende triggert _stopAnim dann wieder _stopRecording, was den Recorder sauber finalisiert.
Erwartet jetzt
Nach HACS-Update auf 1.15.4 und Aufnahme-Klick:
[Bosch eBike 3D] recording mime selected: video/webm;codecs=vp9 (safari = true)
[Bosch eBike 3D] recording finalised: { chunks: 28, totalBytes: 25390000, ... }
Der grüne Download-Chip zeigt eine realistische Dateigröße (20-40 MB pro Minute Tour-Wiedergabe), nicht mehr 5 Byte. Klick → .webm-Datei landet im Download-Ordner und spielt in Safari, VLC, Chrome etc.
Browser-Kompatibilität bleibt
| Browser | Format | Mirror-Workaround |
|---|---|---|
| Safari (Desktop und iOS) | WebM | nötig (WebGL-captureStream-Bug) |
| Chrome / Edge / Brave | MP4 | nötig (für Konsistenz und Safety) |
| Firefox | WebM | nötig (gleiche Architektur) |
Der Mirror-Workaround läuft jetzt für alle Browser, weil er überall sauber funktioniert und in Chrome/Firefox keinen messbaren Performance-Unterschied macht.
Nach dem Update
HACS-Update auf 1.15.4, HA-Neustart, Browser-Hard-Reload. Tour öffnen, Aufnahme-Knopf drücken, Wiedergabe komplett ablaufen lassen, grüner Download-Chip klicken. Sollte jetzt eine echte Video-Datei mit realer Größe ergeben.
Sorry für die Iterations-Runden, war ein doppeltes Problem.