4.9 KiB
CORE-24:连续切源的播放意图
状态:完成验收,独立本地提交;起点 b5e96664。Audio-05 的首轮三引擎证据确认六项候选核心回归。
原切源每次读取 art.playing 并立即 art.pause()。第二次同步切源读取到第一次内部 暂停后的 false;旧操作被正确取消后,原先负责恢复播放的旧监听器不再执行,新 操作也没有恢复意图。修复必须传递最新切源的播放意图,同时保留过期操作无副作用。
将意图归属当前 source operation,在仍待恢复的操作间转移;用户明确 pause 可以 取消恢复。内部 pause 仍走既有公开事件,不能把它误当作用户放弃播放。补真实暂停 状态的受控宿主、重入/取消/失败/销毁和真实浏览器测试。完成后独立提交并恢复 Audio-05。
实现与兼容
source/operation.ts 保存待恢复意图、内部暂停标记及暂停修订号;switch.ts 在取消旧 操作前取得意图,结算时清除,避免完整结束/失败操作的状态泄漏到之后的来源。 playMix/pauseMix 在原生命令之前更新意图。内部暂停标记由进入 pauseMix 的第一次调用 消费,嵌套用户暂停仍然生效,不改变现有 pause 事件、同步返回或 play Promise 值/拒绝。 play 的副作用还核对暂停修订号:晚到的 native play 不能在用户暂停之后更新提示、 发出 play 或执行互斥,switch 的旧恢复也不能清空新暂停提示。
最初尝试监听 play/pause 事件,已有用例虽通过,但无法保证比用户预注册的回调先执行; 审查发现用户 pause 回调同步切源时可能先继承旧意图。因此采用命令入口方案(ADR-024), 没有增加额外监听器、定时器、依赖或公开字段。新用例使用真实 pauseMix/playMix, 不再让受控宿主的 pause 只计数却不改变播放状态。
一项既有晚到恢复测试原来只写 art.playing=false,未表达暂停命令;它现在同时调用 真实 art.pause,保留其旧操作不能覆盖新提示的断言。早期事件方案因此悬挂的运行已 主动终止并保留日志,没有当作通过。新增“恢复未完成时用户暂停”也先复现了错误 play 事件,再以修订号修复,失败日志均保留。
验证结果
- 源切换 34 项单元通过;新增 8 项覆盖连续操作、显式暂停、嵌套暂停、用户监听器重入、 未兑现的公开 play 意图、晚到恢复,以及直接 URL/失败/完成/销毁边界。
- 完整
yarn ci:check594 项通过(548 单元、11 工程、35 基线),严格 TS 与声明检查通过。 后续新增一个浏览器命令顺序用例,最终单独 lint 和下面两套矩阵验证。 - 正常
yarn build artplayer、yarn build:i18n通过;后者恢复核心构建清理的语言产物, i18n 与上次提交无差异。三种核心 JS 与 docs/compiled 一致,公开声明/版本未改变。 - 正式 main/legacy 产物的 source-intent/source/media-events/playback-properties 三引擎最终各 81 项通过,无重试或跳过。早期事件方案的 39 项及新增用例前的 78 项 保留为过程记录,不充当最终实现证据。
- 原先失败的六项“候选核心 + 旧/新 Audio”连续切源用例全部通过,测试断言未改。 该组合重跑使用核心源码构建与明确指定的 Audio main 产物;正式核心产物另由上述矩阵验证。
yarn test:package在仓库外实际安装 tarball 并冻结重装:34 个运行时检查,5 组兼容类型 与 8 组精确类型通过。打包核心 JS 与浏览器所测的正式文件逐字节比对。yarn test:coverage通过,224 个运行时文件进入报告、26 个明确排除,0 项门槛违例。 总体 Node 行覆盖 61.04%、分支 86.70%、函数 66.75%;不能将浏览器数量当作覆盖率。 变动文件的独立计数及产物体积差异见 冻结证据。
main gzip 从 58,555 增至 58,748 字节(+193),legacy +181、ESM +248;这是兼容行为 修复的实际体积成本,不声称有性能/体积优化收益。source/operation.ts 的行/分支/函数 覆盖均 100%,source/switch.ts 行 98.08%、分支 94.20%,其他浏览器路径仍有 Node 覆盖缺口。
后续与回退
CORE-SOURCE-01 按上述公开命令与连续切源范围关闭;AUDIO-RESUME-01(旧核心 + 新音频 在 WebKit 上恢复)、原生偏移边界对照和真实网络缓冲仍由 Audio-05 接续,未一并关闭。 核心完整安装包全量矩阵、性能/体积风险和物理设备/发布复盘门槛仍需后续最终候选验证; 本任务的 81 项矩阵不等于重复了 CORE-22 的所有场景,也不代表 npm 发布放行。
回退此独立提交会恢复上次核心运行实现及三种构建文件,同时重新打开 CORE-SOURCE-01; 不应只回退命令入口或操作状态的一半。无 push/tag/publish/merge。