|
|
@@ -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()
|