From 82c4d7e0a2d193a8f4b59e968d4d3f4b493ce38d Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Mon, 25 May 2026 16:31:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(metronome):=20=E8=A7=86=E9=A2=91=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=8E=92=E9=94=99=E4=B8=8E=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 针对开发者工具/老基础库下视频卡加载圈的问题: - 去掉 video 标签上的 :playback-rate 属性绑定 (部分基础库初始化时设非 1.0 速率会导致首帧解码失败/卡死) - 改在 @loadedmetadata 元数据加载完后再调用 videoCtx.playbackRate API 这样视频先以 1.0 原速播放,确认 ready 后再调速,兼容性更好 - 新增 @error 事件监听,失败时 console + toast 提示 便于诊断真机/工具的差异表现 Co-authored-by: Cursor --- TUICallKit-Vue3/pages/training/metronome.vue | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/TUICallKit-Vue3/pages/training/metronome.vue b/TUICallKit-Vue3/pages/training/metronome.vue index 2a63721c..07f10639 100644 --- a/TUICallKit-Vue3/pages/training/metronome.vue +++ b/TUICallKit-Vue3/pages/training/metronome.vue @@ -36,7 +36,6 @@ :muted="true" :loop="true" :autoplay="true" - :playback-rate="playbackRate" :show-controls="false" :show-fullscreen-btn="false" :show-play-btn="false" @@ -44,6 +43,8 @@ :enable-progress-gesture="false" :show-mute-btn="false" object-fit="contain" + @error="onVideoError" + @loadedmetadata="onVideoLoaded" /> @@ -157,6 +158,23 @@ onMounted(() => { setTimeout(() => videoCtx?.pause(), 50) }) +const onVideoError = (e: any) => { + console.error('[runner-video] error:', e?.detail || e) + uni.showToast({ + title: '视频加载失败,请用真机预览', + icon: 'none', + duration: 2500, + }) +} + +const onVideoLoaded = (e: any) => { + console.log('[runner-video] metadata loaded:', e?.detail) + /* 元数据加载完后再设 playbackRate,部分基础库初始化时设非 1.0 会卡 */ + try { + videoCtx?.playbackRate?.(playbackRate.value) + } catch (_) {} +} + /* 节拍器状态变化 → 同步视频播放/暂停 */ watch(isPlaying, (playing) => { if (playing) {