github Xunil99/ha-bosch-ebike v1.15.4
v1.15.4 - Video-Export: 2D-Mirror-Workaround und Reihenfolge-Bug behoben

latest releases: v1.19.23b1, v1.19.22b1, v1.19.21...
one month ago

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 Recorder

Der 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:

  1. _stopAnim() ZUERST aufrufen (noch bevor _isRecording gesetzt ist, damit es nicht in den Recorder reingreift)
  2. Slider zurück auf 0
  3. _applyIndex(0) für ersten Frame
  4. _isRecording = true
  5. mediaRecorder.start()
  6. Per-Frame-Copy-RAF starten
  7. _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.

Don't miss a new ha-bosch-ebike release

NewReleases is sending notifications on new releases.