Skip to content

v1.5.4 — pairing speed + seek-probe diagnostic

Choose a tag to compare

@Kepners Kepners released this 11 May 15:13

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 (fastSeek or currentTime), and currentTime 100 ms later. The result is reported back to the desktop over the Cast custom namespace as pcm-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 regular currentTime writes 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 reductions
  • pcnestspeaker-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 ms cluster_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

Sources used