diff --git a/fluxer_app/src/features/voice/utils/ScreenShareOptions.test.ts b/fluxer_app/src/features/voice/utils/ScreenShareOptions.test.ts index 2afbd793a..1762959b2 100644 --- a/fluxer_app/src/features/voice/utils/ScreenShareOptions.test.ts +++ b/fluxer_app/src/features/voice/utils/ScreenShareOptions.test.ts @@ -156,6 +156,32 @@ describe('buildScreenShareOptions', () => { frameRate: 30, }); }); + it('offers the browser picker system audio for every surface when audio is requested', () => { + const {captureOptions} = buildScreenShareOptions({ + resolution: 'medium', + frameRate: 30, + includeAudio: true, + useBrowserAudioPicker: true, + }); + expect(captureOptions).toMatchObject({ + audio: true, + systemAudio: 'include', + windowAudio: 'system', + }); + }); + it('keeps the browser picker audio hints excluded when audio is not requested', () => { + const {captureOptions} = buildScreenShareOptions({ + resolution: 'medium', + frameRate: 30, + includeAudio: false, + useBrowserAudioPicker: true, + }); + expect(captureOptions).toMatchObject({ + audio: false, + systemAudio: 'exclude', + windowAudio: 'exclude', + }); + }); }); describe('forced screen share bitrate', () => { diff --git a/fluxer_app/src/features/voice/utils/ScreenShareOptions.ts b/fluxer_app/src/features/voice/utils/ScreenShareOptions.ts index 6f8a83b4c..44ba02110 100644 --- a/fluxer_app/src/features/voice/utils/ScreenShareOptions.ts +++ b/fluxer_app/src/features/voice/utils/ScreenShareOptions.ts @@ -92,6 +92,7 @@ export interface ScreenShareBuildConfig { height: number; }; preferredDisplaySurface?: 'window' | 'monitor'; + useBrowserAudioPicker?: boolean; } type ScreenShareVideoOptions = NonNullable> & { @@ -150,8 +151,8 @@ export function buildScreenShareOptions( ...(config.includeAudio ? {restrictOwnAudio: true} : {}), selfBrowserSurface: 'include', monitorTypeSurfaces: config.preferredDisplaySurface === 'window' ? 'exclude' : 'include', - systemAudio: 'exclude', - windowAudio: config.includeAudio ? 'window' : 'exclude', + systemAudio: config.includeAudio && config.useBrowserAudioPicker ? 'include' : 'exclude', + windowAudio: config.includeAudio ? (config.useBrowserAudioPicker ? 'system' : 'window') : 'exclude', resolution: {width, height, frameRate: resolvedFrameRate}, video, }, diff --git a/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts b/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts index 06120531f..d3b42113d 100644 --- a/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts +++ b/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts @@ -202,6 +202,9 @@ function shouldIncludeAudioForShare( if (shareContext === 'device') { return VoiceSettings.getShareDeviceAudio(); } + if (displayShareEnvironment === 'web') { + return supportsDesktopScreenShareAudioCapture(); + } if (sourceId?.startsWith('window:')) { return supportsDesktopScreenShareAudioCapture() && VoiceSettings.getShareAppAudio(); } @@ -307,6 +310,7 @@ function getConfiguredScreenShareOptions( contentHint, sourceDimensions, preferredDisplaySurface, + useBrowserAudioPicker: displayShareEnvironment === 'web', }); publishOptions.videoCodec = preferredVideoCodec; return {