zebra-spaces: bump camera mute window 15s -> 60s for phone-network jitter
Repro: host shares camera, laptop sees it fine, phone (FF Android on cellular) reaped the tile at 15s even though the publisher was alive and well. The laptop's subscribe path doesn't see the same RTP jitter the phone does — 15s was too tight for mobile networks. 60s sits above the typical NACK/transport-cc recovery window and Pion's ICE timeout: a path that's really broken fires renegotiation + 'ended' within that window anyway, so the only difference is fewer false reaps on jittery mobile paths. Screen + game window stays at 120s — static content needs the longer fuse.
This commit is contained in:
parent
56b7bfb187
commit
d8c8dae4ba
1 changed files with 21 additions and 14 deletions
|
|
@ -1609,23 +1609,30 @@ function flushSfuStreams(){
|
|||
* isn't producing RTP — we cancel the removal.
|
||||
*
|
||||
* Window depends on the kind of content (caller passes via windowMs):
|
||||
* - 15s for cameras: face/motion content keeps RTP flowing
|
||||
* continuously, so a 15s gap is meaningful. Generous enough to
|
||||
* weather Wi-Fi stalls and mobile network handoffs.
|
||||
* - 120s for screen / gameshare: STATIC content (a still desktop, a
|
||||
* - 60s for cameras: face/motion content keeps RTP flowing most of
|
||||
* the time, but Firefox Android + cellular handoffs can stall a
|
||||
* decoded video element on jittery paths well past 15s without
|
||||
* the publisher being gone. 60s is comfortably above the typical
|
||||
* NACK + transport-cc recovery window; matches Pion's ICE
|
||||
* failure timeout, so if the path is genuinely broken the SFU
|
||||
* fires renegotiation + 'ended' before this anyway.
|
||||
* - 120s for screen / gameshare: STATIC content (still desktop, a
|
||||
* paused video, a code editor with no caret motion) doesn't push
|
||||
* new RTP for long stretches. The encoder genuinely stops emitting
|
||||
* packets, the receiver's track goes muted, and the 15s window
|
||||
* would falsely reap a live tile. 120s lets a static screen
|
||||
* survive comfortably; a real unshare still resolves through the
|
||||
* 'ended' path within a frame.
|
||||
* packets; 120s lets a static screen survive comfortably.
|
||||
*
|
||||
* Genuine unshares always resolve through the 'ended' path (within a
|
||||
* frame of the SFU's removePubFromSub), so these windows only matter
|
||||
* for slow-failure scenarios (PC dies silently, SSE renegotiation
|
||||
* dropped, etc.).
|
||||
*
|
||||
* Window history:
|
||||
* - 3s (all kinds): killed live tiles on any transient mute.
|
||||
* - 15s (all kinds): cameras ok, but static screens vanished after
|
||||
* 15s of no motion.
|
||||
* - 15s camera / 120s screen+game (current). */
|
||||
const VIDEO_REMOVE_MUTE_WINDOW_MS = 15000;
|
||||
* - 15s (all kinds): cameras ok on desktop, static screens vanished.
|
||||
* - 15s camera / 120s screen+game: cameras OK on desktop, phone on
|
||||
* cellular still occasionally reaped live faces during jitter.
|
||||
* - 60s camera / 120s screen+game (current). */
|
||||
const VIDEO_REMOVE_MUTE_WINDOW_MS = 60000;
|
||||
const VIDEO_REMOVE_MUTE_WINDOW_SCREEN_MS = 120000;
|
||||
function watchVideoTrackForRemoval(track, removeFn, windowMs){
|
||||
if (!track) return;
|
||||
|
|
@ -3854,8 +3861,8 @@ logLine('', 'ready — pick a handle, type a rendezvous code, enter the space');
|
|||
|
||||
<footer style="margin:2.2rem auto 0;font-size:0.65rem;color:#999;line-height:1.7;word-break:break-all;font-family:monospace">
|
||||
<span id="pi-seal" style="color:#777;cursor:default;user-select:none" title="">page integrity</span> · built <span class="stamp-date">2026-06-03</span><br>
|
||||
md5 <span class="stamp-md5">23233fe6c11383cddc6088f564b9b95c</span><br>
|
||||
sha256 <span class="stamp-sha">ce79d23b6db5bf5c37efa084da4210d7318854198d92806fc7371ad80fd15d6a</span><br>
|
||||
md5 <span class="stamp-md5">5bba3e681d0b4c34ede5d0f0bb4da138</span><br>
|
||||
sha256 <span class="stamp-sha">9445032ab40c1b6bbd69eda3b8a6b33c4b3ff849e1a5c23955e4f0d9619d4540</span><br>
|
||||
<span style="color:#bbb">hashes are of this page with these two fields zeroed — to verify, blank them and re-hash</span><br>
|
||||
<span style="color:#bbb">one self-contained file — <strong>save a copy</strong> and verify against these hashes; point at your own servers with ?signal= and ?turncred=, or <a href="host-your-own.html" style="color:#999">host your own community</a></span>
|
||||
</footer>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue