Commit graph

400 commits

Author SHA1 Message Date
e4493f292d
zebra-report: deploy bare-constraints camera retry 2026-06-07 21:14:54 -04:00
3b817799ad
zebra-report: deploy user-facing notice on camera NotAllowedError 2026-06-07 20:39:25 -04:00
1f27b89378
zebra-report: deploy chromium decoder anchor
Pulls in zebra-report dad697d: hidden muted <audio> element attached
alongside the MediaStreamAudioSourceNode forces chromium's WebRTC
decoder to actually run. Without it the worklet sees silence on
chrome remote audio tracks. Fixes fedora chrome silent-room from
ticket 0001.
2026-06-07 20:06:16 -04:00
9818f0860f
zebra-report: deploy always-SFU receive audio + 0.7s worklet cushion
Pulls in zebra-report 1984bb1: SFU is the only receive-audio path
for every role, mesh inbound audio ignored. SPEAKER_PLAYOUT_DELAY_SEC
0.5s → 0.7s.
2026-06-07 19:34:06 -04:00
faa52b4871
zebra-report: deploy sink-reapply on attach + per-tick ctx.sink telemetry
Continues ticket 0001 fix. Fox 2026-06-07 second telemetry pass showed
blanka-chrome's audioCtx sink reverted to 'default' after a leave/rejoin
even though the user had a picked device, because applySinkToAudioCtx
only ran inside the `if (!audioCtx)` branch and a persistent ctx with a
drifted sinkId stayed default forever.

Attach now re-applies sink when audioCtx exists + speakerDeviceId is set
+ ctx.sinkId differs. Per-tick telemetry exposes ctx.sink= (and want= on
mismatch) so the next session can verify sink stays on the picked device
across leave/rejoin.

Source commit: 4cedd85 in zebra-report.git
2026-06-07 17:43:00 -04:00
c40240167b
zebra-report: deploy mesh.recv telemetry
Pulls in zebra-report b9e2541: telemetry tick now emits per-peer
mesh.recv lines with the mesh PC's inbound audio receiver stats
(pkt/lost/bytes/jitter/level/jbuf/lp + short uuid prefix). Closes
the visibility gap on ticket 0001 — we can now see whether mesh's
audio decoder is alive or also silent when SFU's receiver is
orphaned by the worklet swap. fox 2026-06-07.
2026-06-07 12:24:32 -04:00
a8b06b5907
zebra-report: deploy fresh-stream wrap on mic ontrack + mute-gate mesh swap
Fixes ticket 0001 (fedora chrome cannot hear speakers) — fox 2026-06-07
telemetry ruled out the sink hypothesis from 0f36e02 and pinned two
coupled defects:

  (A) tracks=0 race in handleRemoteSfuTrack mic branch — ev.streams[0]
      can be empty at handler-time even when ev.track is live; the
      silent <audio> fallback ate the listener.
  (B) Mesh ontrack swapped the worklet to the mesh stream even when
      the mesh track was still muted, orphaning the SFU receiver and
      trapping the listener on a silent mesh source.

Mic now mirrors screen/camera/game (new MediaStream([ev.track])) and
the mesh swap waits for 'unmute' / restores SFU after a mute window.

Source commit: caa0548 in zebra-report.git
2026-06-07 11:34:29 -04:00
8e762fb100
zebra-report: deploy telemetry fingerprint + camera-error breadcrumbs
Pulls in zebra-report 1ed5263: every entry now emits a one-shot
'session: ua=... ctx={...} devs={...} picked={...}' line so the
signal-server log carries browser + audioCtx + device-count + saved-
deviceId-shortprefix context for diagnosing the open tickets
(0001 fedora chrome silence, 0002 fedora firefox cannot share camera).
Camera-open errors now include e.name + the constraints we tried
plus auto-recovery from OverconstrainedError + saved deviceId.
2026-06-07 11:27:39 -04:00
0f36e02e42
zebra-report: deploy audioCtx sinkId routing (fixes fedora chrome silence)
Pulls in zebra-report 467146a: every audioCtx now routes to the
user-picked output sink via applySinkToAudioCtx(). Fixes the
fedora chrome silent-speaker telemetry where RTP arrived, worklet
started, ctxState=running, but no audio reached the user — because
audioCtx.destination was always emitting to system default while
the speaker dropdown set <audio> sinks only. fox 2026-06-06.

Audio path now respects the picker on Chrome ≥110 and Firefox ≥116.
Older browsers continue to fall through to default.
2026-06-06 19:27:46 -04:00
e45db971aa
zebra-report: deploy shrink-retarget audio + lip-sync coupling
Pulls in zebra-report 9215eaa: JitterBufferProcessor now drops the
queue down to targetSamples (not 1.5×target) on a shrinking retarget,
eliminating the residual 6%-cap speed-up phase fox heard as "janky
slow" during listener-to-speaker promotion. The processor reports
the dropped sample count back to JS so installJitterBuffer's port
handler zeros every paired video receiver's jitterBufferTarget +
playoutDelayHint — video frames drop in lockstep with the audio
skip so lip-sync survives the jump.

Fox 2026-06-06: "if we skip ahead from whatever listener is at to
speaker speed, we need to make sure the video skips ahead the same
amount or rate to keep the lips synced".

Behavior change is isolated to the role-change moment (4s→0.5s on
promote). Steady-state audio and listener-only sessions unchanged.
2026-06-06 15:21:29 -04:00
3a0a30807e
zebra-report: deploy silent-listener fix + listener-bye-on-bfcache fix
Pulls in two upstream zebra-report commits:

  0ce1339 prefix-match in flushSfuStreams (kills the silent
          fedora-chrome listener: ontrack races peer-joined, cache
          keyed by 16-char streamID prefix, flush's strict-equality
          matcher never resolved short→full, listener heard nothing
          from anyone already in the room).

  5e8cdad send 'bye' on pagehide for listeners even when
          persisted=true (kills the closed-firefox-phone roster
          zombies sitting through the 120s readTimeout window).

Server-side backstop (60s listenerAliveTTL) ships separately in
proxy.unturf.com main; the client fix above stands on its own for
the common bye-arrives case.

Fox 2026-06-06: "rebooting fedora chrome blanka because it never
could hear any speakers for days now".
2026-06-06 14:48:09 -04:00
0444bd1297
zebra-spaces: one transcript line per sentence 2026-06-05 19:54:09 -04:00
32497859b0
zebra-spaces: tear down stale <audio> fallback when worklet path takes over 2026-06-05 19:52:43 -04:00
43780b2d6f
zebra-spaces: in-place source swap on re-attach 2026-06-05 19:46:12 -04:00
59c407f1c7
zebra-spaces: idempotent attach + drop stale stream cache 2026-06-05 19:41:22 -04:00
269ba777ca
zebra-spaces: stop re-attaching every speaker on peer-joined (kill fxhp double-audio) 2026-06-05 19:15:48 -04:00
c2d6016c8b
zebra-spaces: prime audioCtx on first interaction (fix desktop auto-rejoin) 2026-06-05 16:05:54 -04:00
d7fd405150
zebra-spaces: deploy attach diagnostic 2026-06-05 14:22:10 -04:00
d263740557
zebra-spaces: deploy duplicate-publisher audio dedup 2026-06-05 14:14:24 -04:00
4533e4e4b6
zebra-spaces: deploy lip-sync flap fix + transcript autoscroll 2026-06-05 14:04:26 -04:00
6d24cf2d8f
zebra-spaces: deploy anti-alias + compressor self-transcribe 2026-06-05 13:42:15 -04:00
eb1718225e
zebra-spaces: deploy transcribe-restore TDZ fix 2026-06-05 13:35:37 -04:00
129b4436af
zebra-spaces: deploy worklet load race fix 2026-06-05 13:34:06 -04:00
5a68c56963
zebra-spaces: deploy TDZ fix + self-capture diagnostics 2026-06-05 13:30:53 -04:00
f57733ebd3
zebra-spaces: deploy transcribe persist + self-capture fix 2026-06-05 13:25:46 -04:00
61f23e2b4d
zebra-spaces: deploy self-transcribe + whisper telemetry 2026-06-05 13:21:50 -04:00
a59f27a042
zebra-spaces: deploy whisper worker + inflight gate 2026-06-05 13:11:09 -04:00
224f2e9f31
zebra-spaces: deploy whisper hallucination filter 2026-06-05 13:06:55 -04:00
b7b910e4c4
zebra-spaces: deploy DOM-move spotlight 2026-06-05 13:00:43 -04:00
1280be650c
zebra-spaces: deploy listener instant tile switch 2026-06-05 12:52:11 -04:00
ab3b48e293
zebra-spaces: deploy client-side Whisper STT 2026-06-05 12:38:00 -04:00
f23b35af2f
zebra-spaces: deploy stream-toggle UI removal 2026-06-05 09:38:34 -04:00
8bf25aaa64
zebra-spaces: deploy predictive grow + self-calibrating floor 2026-06-05 09:23:43 -04:00
d9a233b8d7
zebra-spaces: deploy ±6% stretch cap 2026-06-05 09:17:54 -04:00
c208776c12
zebra-spaces: deploy listener adaptive shrink 2026-06-05 08:26:26 -04:00
fa0666f7cc
zebra-spaces: deploy Phase 3 adaptive time-stretching 2026-06-04 19:46:24 -04:00
4885cab72e
zebra-spaces: deploy Double Dragon controller 2026-06-04 18:26:18 -04:00
52866ed779
zebra-spaces: deploy 4s speaker buffer + HTTP lip-sync override 2026-06-04 18:21:51 -04:00
01abc88446
zebra-spaces: deploy mesh-through-worklet + lip-sync receiver rebind 2026-06-04 18:09:28 -04:00
5dea6156ba
zebra-spaces: deploy smooth audio source pivot 2026-06-04 18:01:00 -04:00
eaf5e37650
zebra-spaces: deploy SFU worklet detach on mesh ontrack 2026-06-04 17:51:56 -04:00
a9433589a0
zebra-spaces: deploy lip-sync algorithm 2026-06-04 17:13:48 -04:00
41283ec074
zebra-spaces: deploy listener buffer-ready status gating 2026-06-04 16:45:07 -04:00
f077c01c5e
zebra-spaces: deploy role-aware playout delays + worklet for all roles 2026-06-04 15:59:01 -04:00
6e42fc180c
zebra-spaces: deploy worklet sticky-started re-arm fix 2026-06-04 15:34:58 -04:00
7e17f9a5d2
zebra-spaces: deploy AudioWorklet listener jitter buffer 2026-06-04 15:26:09 -04:00
64ac008440
zebra-spaces: deploy jitterBufferTarget + jbuf telemetry 2026-06-04 15:10:40 -04:00
9f9dc91f7f
zebra-spaces: deploy split outbound telemetry per kind 2026-06-04 14:53:41 -04:00
50452361ae
zebra-spaces: deploy audio priority='high' (wiggle-storm fix mirror) 2026-06-04 14:38:14 -04:00
80a936fe7b
zebra-spaces: deploy publisher-side telemetry 2026-06-04 14:37:04 -04:00