From 7bb0175648c2e48503a8d5c2ee7d9438a217f2e0 Mon Sep 17 00:00:00 2001 From: Kharhamel Date: Sat, 2 Oct 2021 23:58:33 +0200 Subject: [PATCH] FIX: we now make sure to completly disable the old stream before attempting to create a new one (#1493) * FIX: we now make sure to completly disable the old stream before attempting to create a new one * FIX: disable audio optimization on chrome * always reemit the stream on chrome * Try fix on stop current stream Signed-off-by: Gregoire Parant * Try fix on stop current stream Signed-off-by: Gregoire Parant * Push fix microphone Signed-off-by: Gregoire Parant Co-authored-by: Gregoire Parant --- front/src/Stores/MediaStore.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/front/src/Stores/MediaStore.ts b/front/src/Stores/MediaStore.ts index bd32266c..c5bfdc83 100644 --- a/front/src/Stores/MediaStore.ts +++ b/front/src/Stores/MediaStore.ts @@ -289,7 +289,9 @@ export const mediaStreamConstraintsStore = derived( // Disable webcam for energy reasons (the user is not moving and we are talking to no one) if ($cameraEnergySavingStore === true) { currentVideoConstraint = false; - currentAudioConstraint = false; + //this optimization is desactivated because of sound issues on chrome + //todo: fix this conflicts and reactivate this optimization + //currentAudioConstraint = false; } // Let's make the changes only if the new value is different from the old one. @@ -376,7 +378,8 @@ function toggleConstraints(track: MediaStreamTrack, constraints: MediaTrackConst } else if (constraints === false) { track.stop(); } - if (constraints && constraints !== true) { + // @ts-ignore + if (typeof constraints !== "boolean" && constraints !== true) { track.applyConstraints(constraints); } } @@ -391,12 +394,11 @@ export const localStreamStore = derived, LocalS async function initStream(constraints: MediaStreamConstraints) { try { - const newStream = await navigator.mediaDevices.getUserMedia(constraints); if (currentStream) { //we need stop all tracks to make sure the old stream will be garbage collected - currentStream.getTracks().forEach((t) => t.stop()); + //currentStream.getTracks().forEach((t) => t.stop()); } - currentStream = newStream; + currentStream = await navigator.mediaDevices.getUserMedia(constraints); set({ type: "success", stream: currentStream, @@ -480,7 +482,8 @@ export const localStreamStore = derived, LocalS type: "success", stream: null, }); - } else if ((constraints.audio && !oldConstraints.audio) || (!oldConstraints.video && constraints.video)) { + } //we reemit the stream if it was muted just to be sure + else if (constraints.audio /* && !oldConstraints.audio*/ || (!oldConstraints.video && constraints.video)) { initStream(constraints); } oldConstraints = {