diff --git a/src/views/home/index.vue b/src/views/home/index.vue index d1215a8..21e9527 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -382,11 +382,24 @@ function connectDetectStream() { detectWsClient.connect() } -function switchStream() { +async function switchStream() { if (!streamAddress.value) { ElMessage.warning('请输入视频流地址') return } + // 切换到视频流时,确保算法启用状态为 true + try { + await setAlgorithmStatusApi({ enabled: true }) + algorithmEnabled.value = true + } catch { + algorithmEnabled.value = false + } + // 清空离线视频状态,避免 hasOfflineVideo 阻止操作 + if (offlineVideoUrl.value) { + URL.revokeObjectURL(offlineVideoUrl.value) + offlineVideoUrl.value = '' + detectionFile.value = null + } stopRawStream() videoMode.value = 'live' webrtcUrl.value = '' @@ -396,7 +409,7 @@ function switchStream() { stopDetectStream(() => connectRawStream()) } -function toggleStream() { +async function toggleStream() { if (streamRunning.value) { // 关闭视频流 stopRawStream() @@ -410,7 +423,6 @@ function toggleStream() { ending.value = false ElMessage.info('视频流已关闭') addLog('视频检测完成,已切换到结果视频', 'info') - disableAlgorithm() }) } else { stopDetectStream() @@ -422,10 +434,16 @@ function toggleStream() { ending.value = false ElMessage.info('视频流已关闭') addLog('视频流已关闭', 'info') - disableAlgorithm() } } else { - // 启动视频流 + // 启动视频流 — 确保算法启用状态为 true + try { + await setAlgorithmStatusApi({ enabled: true }) + algorithmEnabled.value = true + } catch { + algorithmEnabled.value = false + } + if (offlineVideoUrl.value) { URL.revokeObjectURL(offlineVideoUrl.value) offlineVideoUrl.value = '' @@ -824,16 +842,6 @@ onMounted(async () => { } }) -async function disableAlgorithm() { - try { - await setAlgorithmStatusApi({ enabled: false }) - const enabled = await getAlgorithmStatusApi() - algorithmEnabled.value = !!enabled - } catch { - addLog('更新算法状态失败', 'error') - } -} - function connectProcessWs() { if (processWsClient) return