From 2d618c833fad2c317ebc4eb8e46e01ab4c054129 Mon Sep 17 00:00:00 2001
From: Anthony Fu <anthonyfu117@hotmail.com>
Date: Sat, 8 May 2021 16:08:36 +0800
Subject: [PATCH] fix(recording): properly shutdown stream

---
 packages/client/logic/recording.ts | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/packages/client/logic/recording.ts b/packages/client/logic/recording.ts
index 323d99acf3..66c5f4bb7c 100644
--- a/packages/client/logic/recording.ts
+++ b/packages/client/logic/recording.ts
@@ -65,7 +65,8 @@ export function useRecording() {
 
     if (showAvatar.value) {
       showAvatar.value = false
-      closeCameraStream()
+      if (!recording.value)
+        closeStream(streamCamera)
     }
     else {
       await startCameraStream()
@@ -96,29 +97,19 @@ export function useRecording() {
 
   watch(currentCamera, async(v) => {
     if (v === 'none') {
-      closeCameraStream()
+      closeStream(streamCamera)
     }
     else {
       if (recording.value)
         return
       // restart camera stream
       if (streamCamera.value) {
-        await closeCameraStream()
+        closeStream(streamCamera)
         await startCameraStream()
       }
     }
   })
 
-  async function closeCameraStream() {
-    if (recording.value)
-      return
-
-    if (streamCamera.value) {
-      closeStream(streamCamera)
-      streamCamera.value = undefined
-    }
-  }
-
   async function startRecording() {
     await startCameraStream()
 
@@ -163,19 +154,18 @@ export function useRecording() {
       const url = URL.createObjectURL(blob)
       download(getFilename('camera'), url)
       window.URL.revokeObjectURL(url)
-      closeStream(streamCamera)
       recorderCamera.value = undefined
+      if (!showAvatar.value)
+        closeStream(streamCamera)
     })
     recorderSlides.value?.stopRecording(() => {
       const blob = recorderSlides.value!.getBlob()
       const url = URL.createObjectURL(blob)
       download(getFilename('screen'), url)
       window.URL.revokeObjectURL(url)
-      closeCameraStream()
+      closeStream(streamSlides)
       recorderSlides.value = undefined
     })
-
-    console.log('stopped')
   }
 
   function closeStream(stream: Ref<MediaStream | undefined>) {