From de6db687c4c21e2e851699e7051b3094f703a1ba Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Wed, 25 Mar 2026 04:07:15 +0100 Subject: [PATCH] feat: enforce allowCustomBitrate flag in stream option builders --- packages/web/src/utils/screenShare.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/web/src/utils/screenShare.ts b/packages/web/src/utils/screenShare.ts index 79fbf5cf..78934ee6 100644 --- a/packages/web/src/utils/screenShare.ts +++ b/packages/web/src/utils/screenShare.ts @@ -113,9 +113,9 @@ export function buildScreenShareOptions(config: ScreenShareConfig): ScreenShareB const captureWidth = isNative ? 0 : WIDTH_MAP[height as StandardResolution] ?? 1920; const captureHeight = isNative ? 0 : (height as number); - // Resolve bitrate in kbps: custom > override > default > native estimate + // Resolve bitrate in kbps: custom (if allowed) > override > default > native estimate let rawKbps: number; - if (customBitrateKbps != null) { + if (customBitrateKbps != null && limits.allowCustomBitrate) { rawKbps = customBitrateKbps; } else if (isNative) { const nearestFps = STANDARD_FRAMERATES.reduce((a, b) => @@ -174,11 +174,12 @@ export function resolveNativeOverdrive( config: ScreenShareConfig, opts: ScreenShareBuildResult, ): void { - if (config.height !== 'native' || config.customBitrateKbps != null || !mediaTrack) return; + const limits = getStreamingLimits(); + const effectiveCustom = limits.allowCustomBitrate ? config.customBitrateKbps : null; + if (config.height !== 'native' || effectiveCustom != null || !mediaTrack) return; const settings = mediaTrack.getSettings(); if (!settings.width || !settings.height) return; - const limits = getStreamingLimits(); const nativeKbps = computeNativeBitrate(settings.width, settings.height, config.fps, limits.bitrateMatrixOverrides); const clampedKbps = Math.min(Math.max(nativeKbps, limits.minBitrateKbps), limits.maxBitrateKbps);