Files
ArtPlayer/refactor/changes/2026-09-15-PKG-ASR-10-media-error.md
T

65 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PKG-ASR-10 原生媒体错误取消与恢复
来源 HEAD:`3c89b48514e9fe02b4cac64a1630c50380c4c947`。从 PKG-ASR-05 的
不支持媒体验收中拆出本项独立缺陷修复,任务05新增对此项的依赖。
## 问题与修复
真实 PCM 进入调用方识别 Promise 后,通过公开 `art.video.src` 切换到 HTTP
JSON 内容,Chromium 发出 `video:emptied`、`video:error`(MediaError code 4),
但没有 pause。此前 ASR 只处理 play/pause/restart/destroy,仍运行原采集会话。
延迟识别完成会把失败媒体的过期字幕显示出来,显式捕获图也仍保持 running。
两种模式和新旧核心的四项原生复现全部失败于旧字幕断言。
修复在工厂注册处将 `video:error` 连接到既有 `capture.stop()` 路径,并在 destroy
时对称移除该监听。不另建状态机、不改变停止语义:错误会同步清空队列/定时器,
使 pending 识别和迟到 Worklet 消息失效;捕获模式关闭 Context/轨道,默认直接
绑定保留视频所需的原音频连接。已有字幕沿用原 auto-hide 期限,后续合法播放
可以复用或重新创建采集。不会取消调用方自己的识别网络请求。
这不是声称普通 `art.url` 切换必然有同一问题,也不是网络中断/所有解码错误的
完整证明。本轮原生错误来自不可解码 HTTP 内容;受控单测覆盖相同错误事件在
其他异步阶段的取消。正常参数、根及 `/runtime` 类型、返回对象、事件名、分发
入口保持不变;改变的是错误后不应继续显示旧识别结果的行为。
## 测试与构建
新增五项单元回归,旧代码全部失败、修复后全部通过:两种模式的 pending 识别
与迟到 port 消息、两种模式的 Worklet 加载中取消、延迟捕获关闭期间取消重启。
同时检查默认 Context 保留、捕获资源释放、正常再播放、既有字幕期限和销毁解绑。
原生 `asr-media-error.spec.js` 使用真实本地 AAC、AudioContext/Worklet、原生错误;
只有调用方识别 Promise 由测试控制。验证错误后旧结果不显示,随后切回 AAC
恢复至少三块非零 PCM 和正常字幕,销毁关闭所有 Context。安装轮包含真实旧核心
5.3.0、5.4.0 与候选核心,以及两种音频输入模式。
第一轮跨浏览器检查的三个 Firefox 失败发生在触发错误之前:测试挂起了首个
静音块,又等待被该 Promise 阻止的后续非零块。已修正为仅在首个非零 PCM
到达后挂起识别;保留失败报告、原 7 秒等待和非零 PCM 断言,不作为生产回归。
正常 `yarn build artplayer-plugin-asr` 生成 main/legacy/ESM 与 docs/compiled。
三个格式都与隔离安装快照逐字节相同。`run-gTeZ8R` 通过重新构建、Yarn pack、
仓库外安装/冻结复装及文件核验;通用 36 runtime、5 旧类型、8 精确类型仍只
属于 core/chapter,ASR 的运行证据来自本批专项与实际安装浏览器测试。
最终命令、版本、输入指纹、失败与通过结果见
[验证记录](../baselines/asr-media-error-validation.json)。Node 24.21.0、Yarn 1.22.22;
234 项 ASR 专项及 main/legacy 各43项生命周期回归通过,类型/lint/工具链与清单
检查通过。安装回归同时保留正常音量/静音、无音轨和跨域显式捕获用例。
Windows WebKit 无 WebAudio 的项目明确跳过,不以这些跳过关闭设备要求。
最终源码轮为 8 通过/4 能力跳过;加入 5.3.0 错误路径及正常回归的 installed
main/legacy 各 36 通过/18 能力跳过。合计 80 通过、40 跳过、0 失败、0 重试。
这与修复前四项全红及测试等待修正前的 5 通过/3 失败/4 跳过分别保存,不能
合并成一个全部成功的历史结果。Chromium 的媒体取消诊断仍保留在机器证据中。
## 维护与剩余
包内 README/ARCHITECTURE 解释新错误边界、监听所有权、重启和调用方请求职责。
`test:asr`、`test:unit` 与 installed CI 清单均纳入回归;远端 CI 仍待执行。
没有新增依赖或改锁,类型文件未改;最终各包大版本升级由既有发布任务承接。
本项不关闭 PKG-ASR-05 的其他不支持媒体、真实设备或分发门槛,也不改变默认
CORS 限制。回退需同时撤销错误监听/解绑、测试/文档并正常重建产物;这样会
重新引入已证明的过期识别问题。未推送、部署或发布。