From 9747e5e0d5cf9df61b2e021bc3aaa47b7e62968e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sat, 18 Sep 2021 11:47:15 +0200 Subject: [PATCH] Fix getUserMediaStream() not being able to handle streams of different track combinations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/webrtc/mediaHandler.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/webrtc/mediaHandler.ts b/src/webrtc/mediaHandler.ts index 97edf1774..4b38e8f75 100644 --- a/src/webrtc/mediaHandler.ts +++ b/src/webrtc/mediaHandler.ts @@ -49,12 +49,18 @@ export class MediaHandler { public async getUserMediaStream(audio: boolean, video: boolean): Promise { let stream: MediaStream; - if (this.userMediaStreams.length === 0) { + // Find a stream with matching tracks + const matchingStream = this.userMediaStreams.find((stream) => { + if (audio !== (stream.getAudioTracks().length > 0)) return false; + if (video !== (stream.getVideoTracks().length > 0)) return false; + }); + + if (matchingStream) { + stream = matchingStream.clone(); + } else { const constraints = this.getUserMediaContraints(audio, video); logger.log("Getting user media with constraints", constraints); stream = await navigator.mediaDevices.getUserMedia(constraints); - } else { - stream = this.userMediaStreams[this.userMediaStreams.length - 1].clone(); } this.userMediaStreams.push(stream);