radieo/stream
Pierre-Olivier Mercier b5f83ef6c8
All checks were successful
continuous-integration/drone/push Build is passing
stream: compute now-playing duration/position off the HTTP thread
The /nowplaying handler called source.duration/source.elapsed on the live
crossfaded source. Since it is polled every second by the web player, those
cross-thread source queries contended with the crossfade's own clock during a
transition and wedged the streaming clock — a few seconds of audio then a
frozen buffer looping on air, only ever with a listener connected.

Capture duration and the track start time in a synchronous on_metadata
callback (which runs in the clock thread, where touching the source is safe)
and have /nowplaying read those refs instead — position is just the wall-clock
time since the track started. No handler touches the source outside its clock
anymore, so the 3 s crossfade is safe again.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:06:55 +08:00
..
apple-touch-icon.png stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
Dockerfile stream: split radio.liq into pipeline, web and ingest-proxy parts 2026-07-04 16:11:56 +08:00
favicon.svg stream: add a synthwave favicon 2026-07-03 18:42:51 +08:00
icon-192.png stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
icon-512.png stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
icon-maskable-512.png stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
icon-maskable.svg stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
index.html stream: name a yt-dlp track's provider from its source domain 2026-07-04 18:39:12 +08:00
ingest_proxy.liq stream: split radio.liq into pipeline, web and ingest-proxy parts 2026-07-04 16:11:56 +08:00
manifest.webmanifest stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
radio.liq stream: compute now-playing duration/position off the HTTP thread 2026-07-05 17:06:55 +08:00
sw.js stream: make the web player installable as a PWA 2026-07-04 16:09:08 +08:00
web.liq stream: compute now-playing duration/position off the HTTP thread 2026-07-05 17:06:55 +08:00