yanghao hace 1 semana
padre
commit
c475d0825f
Se han modificado 1 ficheros con 47 adiciones y 0 borrados
  1. 47 0
      src/views/pms/video_center/sip/splitview.vue

+ 47 - 0
src/views/pms/video_center/sip/splitview.vue

@@ -288,9 +288,56 @@ const loadAdditionalChannelsForSplit = async (newSplit, oldSplit) => {
   }
 }
 
+// 方法2:并行销毁,提高效率
+const destroyAllPlayersAsync = async () => {
+  if (!playerRefs.value || playerRefs.value.length === 0) {
+    console.log('没有播放器需要销毁')
+    return true
+  }
+
+  console.log(`开始并行销毁 ${playerRefs.value.length} 个播放器`)
+
+  try {
+    // 收集所有销毁 Promise
+    const destroyPromises = playerRefs.value
+      .filter((player) => player && typeof player.destroy === 'function')
+      .map((player, index) => {
+        return Promise.resolve().then(async () => {
+          try {
+            await player.destroy()
+            console.log(`播放器 ${index} 销毁完成`)
+            return { success: true, index }
+          } catch (error) {
+            console.error(`播放器 ${index} 销毁失败:`, error)
+            return { success: false, index, error }
+          }
+        })
+      })
+
+    // 并行执行所有销毁
+    const results = await Promise.allSettled(destroyPromises)
+
+    // 统计结果
+    const successCount = results.filter((r) => r.status === 'fulfilled' && r.value.success).length
+    const failedCount = results.length - successCount
+
+    console.log(`销毁完成: 成功 ${successCount} 个, 失败 ${failedCount} 个`)
+
+    // 清空引用数组
+    playerRefs.value = []
+
+    return failedCount === 0
+  } catch (error) {
+    console.error('并行销毁过程中出错:', error)
+    return false
+  }
+}
+
 watch(
   () => spilt.value,
   async (newSplit, oldSplit) => {
+    // 先销毁所有现有播放器,确保资源释放
+    await destroyAllPlayersAsync()
     // 如果当前有选中的设备
     if (currentDevice.value && availableChannels.value.length > 0) {
       await nextTick()