Skip to content

v1.3.3

Choose a tag to compare

@mormegil6 mormegil6 released this 02 Sep 06:53
· 18 commits to main since this release
v1.3.3
62d1a22

The two live-playback failures on iPhone that v1.3.2 left open are closed, and they turned out to share one root. The player's media session was being torn down by its ManagedMediaSource getting detached: WebKit's load algorithm closes a detached managed source permanently, the dying source emits its streaming events after it is already closed, and dash.js latches its scheduler on one of them with no way back, so a session died with zero requests and no error anywhere. The player now notices the detach on the element's own emptied event and recovers in place, re-attaching the source and resuming within about three seconds instead of reloading the page, with the old reload kept as a fallback. The WASM audio feed learns about the recovery explicitly, since the re-attach rebases the media clock before any event the feed can see, and re-anchors itself on the new timeline.

The silence that outlived those teardowns was the second failure, and it was not the player's at all. The same silent GPU-process relaunch that detaches the source also strands the tab's audio-session category: WebKit's web process caches the category and never re-sends it to the relaunched GPU process, so the tab collapses into the Ambient category, which the iPhone's Ring/Silent switch mutes in hardware while every API keeps reporting success, the analyser included. The player now cycles navigator.audioSession.type away and back on every pageshow and after every recovery, which forces the category past the stale cache and lets a wedged tab heal itself. The full mechanism, the on-device confirmation and the workaround are filed as WebKit bug 323104; the dash.js half is reported as issue 5127 with the recovery offered upstream as PR 5128.

The player also ships the field forensics that found all of this: per-session resync and audio-context state trails in its beacons, plus a backgrounded-tab check so the teardown detector runs even when the tab is not visible. The full account, with device screenshots, is in docs/IOS-SAFARI.md.

Separately, the player's nginx base image is bumped to 1.31.4-alpine, taking the base OS's security updates with it.