v1.5.4 — pairing speed + seek-probe diagnostic
PC Nest Speaker 1.5.4
Pairing-speed pass + a receiver-side diagnostic to confirm whether Chromium on Cast Audio actually honors live-stream seeks.
What changed
Desktop — cast-helper.py (pairing speed)
| Knob | 1.5.3 | 1.5.4 | Effect |
|---|---|---|---|
discover_speakers(timeout=) |
5 s | 3 s | mDNS responses arrive in 1–2 s on a healthy LAN; the extra 2 s of "be safe" was a flat tax on every cold cast |
group_cc.wait(timeout=) |
5 s | 3 s | Group control sockets open in well under 1 s; reduces group-resolve stage |
Net: ~2–4 s shaved off pairing in the common case. If a slow device (Shield, distant Mini) misses the window, Refresh is one click.
Receiver — receiver-audio.html (seek-probe + fastSeek)
Why this is here: prior to 1.5.4 the drift management (TARGET_LAG / SOFT_LAG / HARD_LAG, see 1.5.3 notes) writes to audio.currentTime and audio.playbackRate to keep the receiver close to the live edge. Per MDN, Chromium-family browsers may treat live HTTP streams as non-seekable, in which case those writes are silent no-ops and the entire drift envelope is fiction.
1.5.4 adds:
- A one-shot seek-probe the first time lag exceeds 0.5 s. It records
seekable.start/end,buffered.end, the seek target, the seek method (fastSeekorcurrentTime), andcurrentTime100 ms later. The result is reported back to the desktop over the Cast custom namespace aspcm-status: seek-probe { … }so we can read the actual behavior on real Nest hardware, not assume. audio.fastSeek()is now used in the drift hard-correction path when available — it's the documented fast path for non-seekable / live media in WHATWG, where regularcurrentTimewrites can be ignored.
If the probe shows seek_works: false, the latency floor is structural — bury the drift code or replace it with a network-level catch-up. If seek_works: true, current code is correct and the floor is buffer-related (cluster size, decoder lookahead).
Files changed
src/main/cast-helper.py— discovery + group_cc timeout reductionspcnestspeaker-receiver/receiver-audio.html— seek-probe + fastSeek (already live on GitHub Pages)package.json— version bump
Confirmed unchanged from 1.5.3
- 192 kbps VBR Opus with
-application audio - 10 ms
frame_duration, 20 mscluster_time_limit - Volume fan-out to all group members
- WebM init segment captured + prepended for late-joining clients
- Force-relaunch of receiver page on every cast