diff --git a/src/webrtc/call.ts b/src/webrtc/call.ts index 2d29a6c8d..a25063177 100644 --- a/src/webrtc/call.ts +++ b/src/webrtc/call.ts @@ -784,12 +784,11 @@ export class MatrixCall extends EventEmitter { /** * Starts/stops screensharing * @param enabled the desired screensharing state - * @param selectDesktopCapturerSource callBack to select a screensharing stream on desktop + * @param desktopCapturerSource optional desktop capturer source to use * @returns {boolean} new screensharing state */ public async setScreensharingEnabled( - enabled: boolean, - selectDesktopCapturerSource?: () => Promise, + enabled: boolean, desktopCapturerSource?: DesktopCapturerSource, ): Promise { // Skip if there is nothing to do if (enabled && this.isScreensharing()) { @@ -802,13 +801,13 @@ export class MatrixCall extends EventEmitter { // Fallback to replaceTrack() if (!this.opponentSupportsSDPStreamMetadata()) { - return await this.setScreensharingEnabledWithoutMetadataSupport(enabled, selectDesktopCapturerSource); + return await this.setScreensharingEnabledWithoutMetadataSupport(enabled, desktopCapturerSource); } logger.debug(`Set screensharing enabled? ${enabled}`); if (enabled) { try { - const stream = await getScreensharingStream(selectDesktopCapturerSource); + const stream = await getScreensharingStream(desktopCapturerSource); if (!stream) return false; this.pushLocalFeed(stream, SDPStreamMetadataPurpose.Screenshare); return true; @@ -834,17 +833,16 @@ export class MatrixCall extends EventEmitter { * Starts/stops screensharing * Should be used ONLY if the opponent doesn't support SDPStreamMetadata * @param enabled the desired screensharing state - * @param selectDesktopCapturerSource callBack to select a screensharing stream on desktop + * @param desktopCapturerSource optional desktop capturer source to use * @returns {boolean} new screensharing state */ private async setScreensharingEnabledWithoutMetadataSupport( - enabled: boolean, - selectDesktopCapturerSource?: () => Promise, + enabled: boolean, desktopCapturerSource?: DesktopCapturerSource, ): Promise { logger.debug(`Set screensharing enabled? ${enabled} using replaceTrack()`); if (enabled) { try { - const stream = await getScreensharingStream(selectDesktopCapturerSource); + const stream = await getScreensharingStream(desktopCapturerSource); if (!stream) return false; const track = stream.getTracks().find((track) => { @@ -1926,13 +1924,11 @@ export class MatrixCall extends EventEmitter { } } -async function getScreensharingStream( - selectDesktopCapturerSource?: () => Promise, -): Promise { - const screenshareConstraints = await getScreenshareContraints(selectDesktopCapturerSource); +async function getScreensharingStream(desktopCapturerSource: DesktopCapturerSource): Promise { + const screenshareConstraints = getScreenshareContraints(desktopCapturerSource); if (!screenshareConstraints) return null; - if (window.electron?.getDesktopCapturerSources) { + if (desktopCapturerSource) { // We are using Electron logger.debug("Getting screen stream using getUserMedia()..."); return await navigator.mediaDevices.getUserMedia(screenshareConstraints); @@ -1980,27 +1976,20 @@ function getUserMediaContraints(type: ConstraintsType): MediaStreamConstraints { } } -async function getScreenshareContraints( - selectDesktopCapturerSource?: () => Promise, -): Promise { - if (window.electron?.getDesktopCapturerSources && selectDesktopCapturerSource) { - // We have access to getDesktopCapturerSources() - logger.debug("Electron getDesktopCapturerSources() is available..."); - const selectedSource = await selectDesktopCapturerSource(); - if (!selectedSource) return null; +function getScreenshareContraints(desktopCapturerSource?: DesktopCapturerSource): DesktopCapturerConstraints { + if (desktopCapturerSource) { + logger.debug("Using desktop capturer source", desktopCapturerSource); return { audio: false, video: { mandatory: { chromeMediaSource: "desktop", - chromeMediaSourceId: selectedSource.id, + chromeMediaSourceId: desktopCapturerSource.id, }, }, }; } else { - // We do not have access to the Electron desktop capturer, - // therefore we can assume we are on the web - logger.debug("Electron desktopCapturer is not available..."); + logger.debug("Not using desktop capturer source"); return { audio: false, video: true,