bill 2 лет назад
Родитель
Сommit
a927feb136
1 измененных файлов с 21 добавлено и 10 удалено
  1. 21 10
      src/views/record/shot.vue

+ 21 - 10
src/views/record/shot.vue

@@ -84,8 +84,8 @@ export default defineComponent({
     const videoRecorder = new VideoRecorder(config);
     const showLeftPano = ref(false)
     const showBottomBar = ref(false)
-    const MAX_SIZE = 2048 * 1024 * 1024
-    const MAX_TIME = 30 * 60 * 1000
+    const MAX_SIZE = 10 * 1024 * 1024
+    const MAX_TIME = 10 * 1000
 
     type VideoItem = { origin: Blob | string, cover: string }
 
@@ -93,7 +93,7 @@ export default defineComponent({
     let interval: NodeJS.Timer
     let recordIng = ref(false)
     const start = () => {
-      if (size.value > MAX_SIZE) {
+      if (size.value > MAX_SIZE || pauseTime.value < 2000) {
         return Message.warning('已超出限制大小无法继续录制,可保存后继续录制!')
       }
 
@@ -119,7 +119,7 @@ export default defineComponent({
     }
 
     const pause = () => {
-      if (countdown.value === 0 && recordIng) {
+      if (countdown.value === 0 && recordIng.value) {
         videoRecorder.endRecord()
         recordIng.value = false
       }
@@ -128,24 +128,31 @@ export default defineComponent({
       clearInterval(interval)
     }
 
-    watchEffect((onCleanup) => {
+    watch(recordIng, (_n, _o, onCleanup) => {
       if (recordIng.value) {
-        const timeout = setTimeout(pause, (MAX_TIME * size.value) / MAX_SIZE)
+        const timeout = setTimeout(() => videoRecorder.endRecord(), pauseTime.value)
         onCleanup(() => clearTimeout(timeout))
       }
     })
 
     const blobs: File[] = shallowReactive([])
-    const size = computed(() => blobs.reduce((t, f) => t + f.size, 0))
+    const size = computed(() => {
+      console.log(videoList)
+      return videoList.reduce((t, f) => typeof f.origin === 'string' ? t : t + f.origin.size, 0)
+    })
+    const pauseTime = computed(() => (MAX_TIME / MAX_SIZE) * (MAX_SIZE - size.value))
     videoRecorder.off('*')
     videoRecorder.on('record', blob => {
-      blobs.push(new File([blob], '录屏.mp4', { type: 'video/mp4; codecs=h264' }))
+      if (recordIng.value) {
+        blobs.push(new File([blob], '录屏.mp4', { type: 'video/mp4; codecs=h264' }))
+      }
     })
     videoRecorder.on('cancelRecord', pause)
     videoRecorder.on('endRecord', pause)
 
     const palyUrl = ref<string | Blob | null>(null)
     const videoList: VideoItem[] = shallowReactive([])
+    let initial = false
     watch([blobs, props], async () => {
       const existsVideos = []
 
@@ -169,9 +176,14 @@ export default defineComponent({
       if (!props.record.cover && videoList.length) {
         emit('updateCover', videoList[0].cover)
       }
+      if (!initial) {
+        initial = true
+        start()
+      }
+      
     }, { immediate: true })
 
-    const upHandler = (ev: KeyboardEvent) => ev.code === `Escape` && pause()
+    const upHandler = (ev: KeyboardEvent) => ev.code === `Escape` && videoRecorder.endRecord()
     document.body.addEventListener('keyup', upHandler, { capture: true })
 
     const complete = () => {
@@ -184,7 +196,6 @@ export default defineComponent({
       emit('close')
     }
 
-    start()
     const barHeight = computed(() => videoList.length ? '180px' : '60px')
     
     onUnmounted(() => {