@@ -7,12 +7,11 @@ import {
77} from '@livekit/protocol' ;
88import type { SignalClient } from '../../api/SignalClient' ;
99import type { StructuredLogger } from '../../logger' ;
10- import { getBrowser } from '../../utils/browserParser' ;
1110import { ScalabilityMode } from '../participant/publishUtils' ;
1211import type { VideoSenderStats } from '../stats' ;
1312import { computeBitrate , monitorFrequency } from '../stats' ;
1413import type { LoggerOptions } from '../types' ;
15- import { compareVersions , isFireFox , isMobile , isSVCCodec , isWeb } from '../utils' ;
14+ import { isFireFox , isMobile , isSVCCodec , isWeb } from '../utils' ;
1615import LocalTrack from './LocalTrack' ;
1716import { Track , VideoQuality } from './Track' ;
1817import type { VideoCaptureOptions , VideoCodec } from './options' ;
@@ -459,15 +458,18 @@ async function setPublishingLayersForSender(
459458 }
460459
461460 let hasChanged = false ;
462- const browser = getBrowser ( ) ;
463- const closableSpatial =
464- browser ?. name === 'Chrome' && compareVersions ( browser ?. version , '133' ) > 0 ;
461+
462+ /* disable closable spatial layer as it has video blur / frozen issue with current server / client
463+ 1. chrome 113: when switching to up layer with scalability Mode change, it will generate a
464+ low resolution frame and recover very quickly, but noticable
465+ 2. livekit sfu: additional pli request cause video frozen for a few frames, also noticable */
466+ const closableSpatial = false ;
465467 /* @ts -ignore */
466468 if ( closableSpatial && encodings [ 0 ] . scalabilityMode ) {
467469 // svc dynacast encodings
468470 const encoding = encodings [ 0 ] ;
469471 /* @ts -ignore */
470- const mode = new ScalabilityMode ( encoding . scalabilityMode ) ;
472+ // const mode = new ScalabilityMode(encoding.scalabilityMode);
471473 let maxQuality = ProtoVideoQuality . OFF ;
472474 qualities . forEach ( ( q ) => {
473475 if ( q . enabled && ( maxQuality === ProtoVideoQuality . OFF || q . quality > maxQuality ) ) {
@@ -480,25 +482,22 @@ async function setPublishingLayersForSender(
480482 encoding . active = false ;
481483 hasChanged = true ;
482484 }
483- } else if ( ! encoding . active || mode . spatial !== maxQuality + 1 ) {
485+ } else if ( ! encoding . active /* || mode.spatial !== maxQuality + 1*/ ) {
484486 hasChanged = true ;
485487 encoding . active = true ;
486- /* @ts -ignore */
487- const originalMode = new ScalabilityMode ( senderEncodings [ 0 ] . scalabilityMode ) ;
488+ /*
489+ @ts -ignore
490+ const originalMode = new ScalabilityMode(senderEncodings[0].scalabilityMode)
488491 mode.spatial = maxQuality + 1;
489492 mode.suffix = originalMode.suffix;
490493 if (mode.spatial === 1) {
491494 // no suffix for L1Tx
492495 mode.suffix = undefined;
493496 }
494- /* @ts -ignore */
497+ @ts -ignore
495498 encoding.scalabilityMode = mode.toString();
496499 encoding.scaleResolutionDownBy = 2 ** (2 - maxQuality);
497- if ( senderEncodings [ 0 ] . maxBitrate ) {
498- encoding . maxBitrate =
499- senderEncodings [ 0 ] . maxBitrate /
500- ( encoding . scaleResolutionDownBy * encoding . scaleResolutionDownBy ) ;
501- }
500+ */
502501 }
503502 } else {
504503 if ( isSVC ) {
0 commit comments