Files
ArtPlayer/refactor/dash-validation.md
T

8.8 KiB
Raw Blame History

DASH Control 验证与维护入口

测试保护真实 npm 1.1.0 的既有调用契约,以及重构前工作区的 SDK 5.x 稳定 ID 修正。 版本来源见 发布契约。02 建立基线,03 改造运行行为, 04 已把五个自有模块迁移为严格 TS 并补齐公开类型与编辑器生成;05 新增第六个 SDK 事件模块。 实际模块地图与生命周期规则见 包内架构。

可重跑的测试

  • yarn test:dash-control:原有 118 项与两代 SDK 各 13 项事件/清理/重入回归,共 144 项。 该脚本和 test:unit 都保留旧测试,完整 CI 自动执行。
  • yarn test:browser test/browser/dash-control.spec.js --trace on:84 项,两个核心、发布插件 SDK 4/ 候选插件 SDK 4/5、两类菜单、两种选择及候选清理、Chromium/Firefox/WebKit。 浏览器套件串行运行,避免共享端口和报告覆盖。
  • yarn ci:check:工具链、计划、lint、声明漂移、严格类型和 Node/基线测试。
  • yarn test:browser test/browser/dash-editor-types.spec.js --trace on:三引擎 Monaco 实际 worker 编译全局声明、验证回调/旧类型提取及错误诊断,并执行发出的 JS 工厂。
  • yarn build:ts:重新生成编辑器声明;refactor/scripts/dash-types.test.mjs 校验可复现、 TS 4.3.5/5.9.3、五种模块模式、八条非法用法及实际 npm 旧声明的消费者对照。
  • yarn test:dash-types-package:Yarn 打包核心/DASH、工作区外离线安装与冻结锁重装, 检查五种模式、CommonJS callable/命名空间、每模式八条非法调用,并拒绝解析回工作区。
  • yarn test:browser test/browser/dash-sdk.spec.js --trace on:真实 npm dash.js 4.5.2/5.2.1, 本地多画质/多音轨 MPD,新旧核心/插件、外部同步 update、自动事件刷新、同 SDK 换源、 formatter 错误恢复、实际设置点击和 SDK 原生对照。目前完整定义 114 项。 ARTPLAYER_DASH_ARTIFACT 可选择正式 main/legacy;未指定则测试源码构建。 无 MSE 的引擎只通过能力探针,播放用例明确跳过,不计为该引擎 DASH 验收。
  • node --test refactor/scripts/dash-sdk.test.mjs:SDK 归档/成员/许可证来源、媒体指纹与拓扑。 如需重新合成诊断媒体,用 node scripts/generate-dash-fixture.mjs refactor/.cache/new-dash-media, 输出目录必须不存在;可通过 ARTPLAYER_FFMPEG 指定 FFmpeg,不覆盖已冻结输入。
  • node --test refactor/scripts/dash-sdk-types.test.mjs:实际 SDK 和固定类型依赖,十组编译器/ 模块配置;插件正例不得增加 SDK-only 诊断,两条非法用法均拒绝。旧解析/DOM 库的上游 边界详见 类型矩阵。CLI node refactor/scripts/dash-sdk-types.mjs 只生成诊断报告,验收应运行上述 test 命令。

Node helper 分别加载当前源码、固定 Git 提交的旧工作区 UMD、实际 npm main/legacy/module。 Git 内容以 LF 指纹核对,发布归档与成员以原始字节指纹核对。ARTPLAYER_TEST_DASH 可指定 待测产物,以系统路径分隔符连接;同时指定 main/legacy/module 时共 378 项,包含两代 SDK 的 行为、生命周期和事件。未设置时不会把源码测试冒充三种候选产物验证。

test/helpers/dash-control.js 只提供可控 SDK 方法和组件注册表,检查 this、类型参数、 原始轨道身份、调用顺序、错误身份、ABR 配置保留、换 SDK、多实例和关闭后的引用。 真实旧实现的缺陷观察保持冻结;候选生命周期新增正确行为断言,不把历史缺陷当作兼容要求。

dash-control.spec.js 使用真实发布/候选 ArtPlayer DOM、真实发布/候选插件和本地原生 MP4。SDK 方法可控, 断言真实点击触发的参数及控制栏/设置同步,再通过真实播放按钮验证视频时钟推进、无媒体错误。 没有加载 dash.js,没有验证 MPD、ABR 自动切换或自适应流解码。 这些仍是 05 必须完成的 固定 dash.js 4.5.2 / 5.2.1 集成验证。独立 dash-sdk.spec.js 已开始真实验证,状态以 05 检查点 为准;不覆盖早期停滞失败。 ARTPLAYER_DASH_ARTIFACT 可替换插件脚本;02 未设置, 03 分别使用正式 main 与 legacy 文件。核心仍按服务端 manifest 加载发布/候选源码构建。

02 首次失败与证据

首次浏览器运行 24 通过、24 失败;全部失败位于设置选项文字定位。trace 中选项确实已渲染, 整行文本包含图标 SVG 的换行,^fr$/^720p$ 不能匹配。改为当前面板内专用 .art-setting-item-left-text 的精确文本定位;保持原有调用、同步和播放断言,没有增大超时或跳过。 补充清理前行文本诊断,最终 48 项通过;候选设置选择的截图已人工查看,文字与控制栏一致。

首轮与最终报告、全部结果/trace 目录都保留在本地缓存;输入和证据指纹见 本步执行记录。缓存不入 Git,永久保存的是测试、来源和结果摘要; 换机器应按上述命令重新取得执行证据,不能声称本地 trace 已上传。

03 修正与后续边界

  • DASH-SDK-01:通过能力适配恢复两代方法表,实际 SDK/媒体仍由 05 验证。
  • DASH-LIFE-01:空列表/禁用后 UI、旧回调、销毁后 update/订阅已修正,补充重入和错误回归。
  • DASH-STATE-01:唯一克隆当前轨道、重复标签、数字零 ID 已修正;实际 SDK 轨道身份仍由 05 核验。

状态以 risks.json 为准;受控修复不替代真实 SDK 验收。严格 TS/公开类型已有独立验证,05 完成 真实 SDK/媒体/组合验证,06 完成包分发验收。物理设备和 npm 发布准入仍待完成。

05 SDK 事件刷新维护

test/dash-events.test.js 覆盖批量事件合并、同步选择顺序、无变化 tick 不渲染、SDK 替换、 teardown/恢复、调用方监听所有权、部分安装/清理失败、formatter 异常、销毁和重入。 UMD 测试 VM 显式注入宿主 console,以检查原始错误身份;没有修改产物的错误处理。 实际浏览器错误身份通过 ConsoleMessage 参数验证,不依赖 Firefox 对 Error 的显示文本。

纯配置修改但没有 SDK 事件时,保留同步 update 为即时刷新入口;播放 tick 仅检查 Auto 布尔值变化,没有新定时器。真实 SDK/媒体验证与剩余 seek/设备边界见 事件改造记录。历史失败证据保留,后续通过不抹去它们。

05 暂停 seek 诊断

实际 SDK 4.5.2 在不创建 ArtPlayer 的稳定暂停用例中也会停滞,SDK 5.2.1 的对应用例通过。 根因与空裁剪分支漏更新缓冲指标有关,DASH-SEEK-01 仍 open。PKG-DASH-SEEK-01 已完成仅针对4.5.2的插件兼容处理;原始SDK本体及旧插件对照仍保留失败。 dash-buffer-observer.js 记录原生 SourceBuffer/SDK 指标,原有显式诊断环境变量只用于 失败后的合成事件和内存 SDK 补丁对照,不能用于正式验收。命令、证据、限制和回退见 seek 根因记录。

新增GETTER/METRICS诊断由 dash-seek-diagnostics.js 承担,原断言失败后才执行, 退出码仍失败。缓冲控制器getter替换未恢复调度;记录实际空缓冲指标后两引擎 恢复。这些诊断不能混用或与修改后的SDK组合。正式实现 src/seek-buffer.ts 不替换getter,在已有SDK事件订阅的生命周期内同步零指标,并检查旧SDK版本、 真实目标范围、stream/media/metrics身份、清理与重入;生产及产物回归单独验收。

见修复及验证:旧候选严格 跳转4失败,新源码8通过,最终main/legacy各8个严格跳转通过。main完整定向76通过; legacy同范围75通过、1个SDK5.2.1设置点击不可见失败,归PKG-DASH-MENU-01继续调查。 不将局部跳转修复等同于DASH组合/分发验收全部完成。

自动刷新设置导航修复

PKG-DASH-MENU-01已确认SDK自动刷新调用setting.update重置根面板,导致打开的 子菜单失去art-current;在真实SDK四组组合复现。插件现在只为自动刷新捕获并 恢复仍由自己拥有、仍打开的子菜单,且在质量和音轨两项更新后恢复。显式update 保持原行为;revision/SDK/销毁/菜单所有权防止陈旧恢复。源码92、main设置32、 legacy候选92均通过;Node446和五组安装类型通过,原始75/1报告保留。 见实施记录及 证据。DASH-MENU-01关闭,其他SDK/设备/分发门槛不变。