You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-12-01 04:43:29 +03:00
Don't use a callback in setScreensharingEnabled()
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
@@ -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<DesktopCapturerSource>,
|
||||
enabled: boolean, desktopCapturerSource?: DesktopCapturerSource,
|
||||
): Promise<boolean> {
|
||||
// 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<DesktopCapturerSource>,
|
||||
enabled: boolean, desktopCapturerSource?: DesktopCapturerSource,
|
||||
): Promise<boolean> {
|
||||
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<DesktopCapturerSource>,
|
||||
): Promise<MediaStream> {
|
||||
const screenshareConstraints = await getScreenshareContraints(selectDesktopCapturerSource);
|
||||
async function getScreensharingStream(desktopCapturerSource: DesktopCapturerSource): Promise<MediaStream> {
|
||||
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<DesktopCapturerSource>,
|
||||
): Promise<DesktopCapturerConstraints> {
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user