Commit graph

306 commits

Author SHA1 Message Date
d91e908eb3
zebra-report: stream toggle uses its own top-row grid column
Moves the ◉/○ DJ-stream button out of the bottom mod-actions stack
into the dedicated `strm` grid column on the top row (next to the
mic icon). No more extra sub-row per speaker for the self-monitor or
host-controlled stream toggle — fixes the vertical scroll regression
when many members were in the room.
2026-06-03 19:39:11 -04:00
29beeb71d7
zebra-report: mod-action buttons horizontal via inline-block
Mirror of zebra-report 55d5e52.
2026-06-03 19:36:17 -04:00
5163613d1e
zebra-report: defer WebRTC mute until DJ stream actually plays
Mirror of zebra-report ebcd257.
2026-06-03 19:30:58 -04:00
ed93bb8fca
zebra-report: lock listeners into DJ mode — no per-speaker opt-out
Mirror of zebra-report 9fd6b06.
2026-06-03 19:28:30 -04:00
6d827b29d2
zebra-report: default-on DJ mode for listeners + 4s RTC playout buffer
Mirror of zebra-report 0cbbc37.
2026-06-03 19:19:45 -04:00
5f9a67b8e7
zebra-report: stream-gating + layout + 2s playout + bfcache-safe bye
Mirror of zebra-report de5b530.
2026-06-03 19:11:36 -04:00
486243cda6
zebra-report: kick + ban onto a dedicated row in mod-actions
Mirror of zebra-report 148116a.
2026-06-03 18:58:18 -04:00
ab82577cdc
zebra-report: mod-actions wraps so stream toggle doesn't cause scroll
Swap grid-auto-flow:column to grid-template-columns:repeat(auto-fit,max-content)
so the now-5-button row wraps to a second line on narrow panels instead
of overflowing horizontally.
2026-06-03 18:48:11 -04:00
e14c92e037
zebra-report: stream toggle on own row — DJ self-monitor
DJ can preview the ~2s delayed Ogg/Opus stream of their own mic to
confirm what listeners hear. Closed headphones recommended; open
speakers + music mode = feedback (title attr warns).
2026-06-03 18:44:14 -04:00
9b55fd96ce
zebra-report: per-speaker "stream" toggle (DJ mode, Ogg/Opus over HTTP)
Each speaker row carries a stream toggle that swaps their audio from
WebRTC subscribe (~700ms latency, glitchy under loss) to a plain
HTTP <audio> pulling Ogg/Opus from the SFU's new /stream endpoint
(~2s latency, browser-managed jitter buffer, bulletproof for DJ
playback). Requires matching proxy.unturf.com SFU build.
2026-06-03 18:35:52 -04:00
147dbc0f9e
zebra-report: revert remaining new Chrome-path codec params
Choppy persisted after every other dial-back. The only remaining new
Chrome-publisher params were the fullband pin and the 320k bump. Drop
both. Chrome publisher's SDP now back to the pre-feature shape
(stereo + FEC + 256k, no maxplaybackrate / sprop-maxcapturerate / cbr).

Kept: Firefox SDP regex fix, UA-gated NACK, speaker picker.
2026-06-03 18:12:49 -04:00
fcbac50caf
zebra-report: 320k Opus + drop maxptime + fix Firefox SDP no-op
Choppy persisted after NACK rollback. Dial back to 320k (transparent
threshold, much less stress on uploads alongside screen+camera). Drop
a=maxptime:120 — receivers + 700ms playout buffer don't handle larger
frames well. Fix the SDP regex that silently no-op'd on Firefox
publishers (Firefox's Opus fmtp lacks minptime=10 — the matcher
required it). Firefox publishers will now actually carry the music
codec params.
2026-06-03 18:07:54 -04:00
959d2dc65c
zebra-report: UA-gated audio NACK — Chrome↔Chrome reactive, Firefox honest
RTCRtpSender.getCapabilities probe decides whether to advertise NACK
in our Opus offers. Chromium publishes it (responds to retransmits),
Firefox/Safari omit (can't respond). Receivers honor only what the
sender promised — mixed-browser rooms stay clean, same-browser rooms
get the full reactive recovery.
2026-06-03 18:02:31 -04:00
01bdd802f2
zebra-report: drop audio NACK — Firefox→Chrome listener choppy/skipping
Chrome listeners requested NACK retransmits that Firefox publishers
never replied to (Firefox never implemented the audio NACK responder).
Chrome's jitter buffer waited for recovery that never arrived, then
skipped. useinbandfec + 700ms playout buffer remain.
2026-06-03 17:58:19 -04:00
c2c2183012
zebra-report: music-mode polish — 510k Opus, fullband pins, NACK, speaker picker
Codec headroom + loss resilience without DSP filters:
  - Opus 256k → 510k (spec ceiling) on mic SFU + mesh + screen + game audio
  - Fullband pin: maxplaybackrate / sprop-maxcapturerate = 48000, cbr=0
  - Audio NACK feedback on Opus rtpmap (reactive packet recovery)
  - a=maxptime:120 advertises tolerance for larger peer frames

Playback chain:
  - New speaker-output selector (setSinkId) routes peer audio to a
    chosen sink (studio monitors / external DAC). Hidden on Safari.

Hard refresh required for the new speaker-picker row to appear.
2026-06-03 17:51:34 -04:00
bbe6b14438
zebra-report: JS-bound heartbeat — 15s alive ping while joined
Mirror of zebra-report 1dde43f + proxy.unturf.com edb1009. Closes
the 'backgrounded tab squats in room' gap that WS-level pings
can't catch (browsers auto-pong below JS).
2026-06-03 17:37:41 -04:00
a11826b072
zebra-report: kick + ban buttons; pagehide sends 'bye'
Mirror of zebra-report 740ed2b + proxy.unturf.com 0733d61.

 - moderation: split single 'boot' into 'kick' (rejoinable) and 'ban'
   (blocks pubkey). Server adds matching kick wire-type alongside
   renamed boot→ban.
 - tab-close lifecycle: pagehide handler fires a 'bye' so closing a
   tab triggers a strong-leave (peer-left + SFU evict immediately)
   instead of waiting 8s for the hiccup grace. Fix for the case
   where Will's phone-tab close left audio leaking until the host
   manually kicked him.
2026-06-03 16:57:03 -04:00
60e4548665
zebra-report: rebuild <video> on MSID supplant — autoplay grant resets
Mirror of zebra-report fb7228b. Will refreshed; the supplant ontrack
hit autoplay block on srcObject swap. Fresh <video> dodges the
mid-life play() rejection.
2026-06-03 16:08:08 -04:00
e09a1793b9
zebra-report: surface boot errors + watchFirstFrame keyframe diagnostic
Mirror of zebra-report 3ca9042 + proxy.unturf.com bc04362.

 - moderation: boot failures now log to the moderator's page instead
   of looking like the button did nothing (stale uuid case).
 - diagnostic: watchFirstFrame fires 'still black after 2500ms — no
   keyframe?' if a fresh SFU video tile never decodes a first frame.
 - proxy-side companion: longer keyframe-burst on subscriber attach
   so a dropped PLI no longer leaves the tile permanently black.
2026-06-03 15:51:39 -04:00
19922ee9fa
zebra-report: deploy — mesh PC exponential backoff + give-up cap 2026-06-03 15:15:49 -04:00
c8715dcc71
zebra-report: deploy — latency + link move to full-width footer band 2026-06-03 14:56:39 -04:00
3541827e28
zebra-report: deploy — notice banner moves below 'your hand' 2026-06-03 14:47:19 -04:00
da3f097b64
zebra-report: deploy — preserve mute across leave+rejoin 2026-06-03 14:43:52 -04:00
5b8cce81dd
zebra-report: deploy — leave + step-down chimes 2026-06-03 14:42:59 -04:00
051213e273
zebra-report: deploy — chimes play in background tabs 2026-06-03 13:21:18 -04:00
a044099de5
zebra-report: deploy — 700ms jitter buffer for cross-Wi-Fi voice 2026-06-03 13:19:39 -04:00
12432a2ce5
zebra-report: deploy — classic chimes for join + hand-raise 2026-06-03 13:18:21 -04:00
edb6c6de14
zebra-report: deploy — log mesh-vs-SFU mic decision 2026-06-03 12:57:29 -04:00
a830bf5670
zebra-report: deploy — SFU mic fallback when mesh isn't connected 2026-06-03 12:50:51 -04:00
119c406b8d
zebra-report: deploy — screen PC failure asks user to re-share 2026-06-03 12:45:40 -04:00
1cddcda111
zebra-report: deploy — drop tiles on peer-booted 2026-06-03 12:44:23 -04:00
130e54cad8
zebra-report: deploy — drop tiles of demoted peers immediately 2026-06-03 12:38:57 -04:00
57b92a2c83
zebra-report: deploy — signed mic-state with anti-replay 2026-06-03 12:36:15 -04:00
cd9fd47359
zebra-report: deploy — mic-state re-announce on rejoin 2026-06-03 12:33:37 -04:00
408bcaaf8a
zebra-report: deploy — drop resume banner; richer picker hints 2026-06-03 12:29:51 -04:00
d5e7349321
zebra-report: deploy — screen-share one-click resume banner 2026-06-03 12:24:51 -04:00
e77322ac53
zebra-report: deploy — join-muted explainer 2026-06-03 12:15:58 -04:00
49b7966178
zebra-report: deploy — new promotions start muted 2026-06-03 12:14:47 -04:00
33f0fbec55
zebra-report: deploy — handleRemoteSfuTrack refactor (no behavior change) 2026-06-03 11:24:40 -04:00
b3192df9fe
zebra-report: deploy — share/stop click telemetry 2026-06-03 11:19:07 -04:00
0fecaaa236
zebra-report: deploy — client-log telemetry forward 2026-06-03 11:02:44 -04:00
aeb61c5ce0
zebra-report: deploy — fresh MediaStream per remote video track 2026-06-03 11:01:05 -04:00
8a055ea9fe
zebra-report: deploy — 60s camera window 2026-06-03 10:57:06 -04:00
95e6253698
zebra-report: deploy — send bye on explicit leave 2026-06-03 10:43:17 -04:00
80a38e14c1
zebra-report: deploy — 120s window for screen/game, 15s stays for camera 2026-06-03 10:33:30 -04:00
27a5319d81
zebra-report: deploy — 15s mute-removal window 2026-06-03 10:11:24 -04:00
17a62cfee6
zebra-report: deploy — full pubkey row in identity panel 2026-06-03 09:59:08 -04:00
7adea859e7
zebra-report: deploy — mobile hide-panel keeps single-column stack 2026-06-03 08:16:11 -04:00
646b17e872
zebra-report: deploy — lighter viewing-thumb overlay 2026-06-03 07:20:04 -04:00
6f701dd060
zebra-report: deploy — mobile thumbs full-width 2026-06-02 19:28:17 -04:00