4.4 KiB
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 的运行证据来自本批专项与实际安装浏览器测试。
最终命令、版本、输入指纹、失败与通过结果见 验证记录。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 限制。回退需同时撤销错误监听/解绑、测试/文档并正常重建产物;这样会 重新引入已证明的过期识别问题。未推送、部署或发布。