mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
119 lines
8.8 KiB
Markdown
119 lines
8.8 KiB
Markdown
# HLS control 测试与环境边界
|
||
|
||
PKG-HLS-03 已在入口、映射、菜单和 SDK 订阅四个模块实施修复,实际地图见
|
||
[包内架构](../packages/artplayer-plugin-hls-control/ARCHITECTURE.md),本轮证据见
|
||
[模块验证](baselines/hls-modules-validation.json)。下方 02 的数量与缺陷观察属于冻结的迁移前基线。
|
||
新版用例增加事件同步、菜单节点复用和候选生命周期断言,公开 TS 迁移仍是 04。
|
||
|
||
新增构建文件入口:ARTPLAYER_TEST_HLS 以平台路径分隔符接受 main/legacy/ESM,用于同一 Node
|
||
契约;ARTPLAYER_HLS_ARTIFACT 选择实际 main/legacy 浏览器文件。测试记录实际 hash,错误路径
|
||
明确失败。这是工作区构建验证;隔离安装以及整套 ARTPLAYER_BROWSER_ARTIFACTS 映射仍由 06 完成。
|
||
|
||
PKG-HLS-02 建立迁移前基线。源码目前仍为 src/index.js,不能把测试任务当作 TS 迁移已完成。
|
||
来源见 [发布契约](baselines/hls-control-contract.md)、[SDK 固定记录](baselines/hls-sdk.json)、
|
||
[本轮证据](baselines/hls-validation.json)。
|
||
|
||
## 可重跑入口
|
||
|
||
- `node --test test/hls-control.test.js`:45 项,源码与发布 main/legacy/ESM 共用正常契约,
|
||
发布包单独复现旧缺陷;已接入 `yarn test:unit`。
|
||
- `yarn test:browser hls-control.spec.js`:当前源码与发布插件在旧核心 5.4.0/当前核心上的四组合,
|
||
加上 SDK 能力检查。通过现有 Playwright 工程入口执行;源码候选构建不写 dist。
|
||
- `node refactor/scripts/hls-contract.mjs`:HLS 插件发布来源核验。
|
||
- `node scripts/generate-hls-fixture.mjs <新的输出目录>`:只在需要改变样本时执行;
|
||
测试使用已提交媒体和 manifest,不要求安装 FFmpeg。详见 test/browser/media/hls/README.md。
|
||
|
||
SDK 使用示例原有的 Hls.js 1.5.17,首次从固定 npm URL 下载并验证 SHA-512/SHA-256,
|
||
代码取归档中的 dist/hls.min.js。SDK 仅在测试浏览器执行,不加生产依赖,不改 Yarn 锁文件。
|
||
归档读取工具允许合法的点分包名 hls.js,同时测试拒绝路径穿越等非法标识。
|
||
生成器记录 FFmpeg 版本和参数;媒体源为 testsrc2/sine,不依赖远程影片版权或服务可用性。
|
||
|
||
## 已验证的内容
|
||
|
||
Node 契约覆盖同步注册/update、媒体身份校验、quality/audio 显示开关、名称/顺序/去重、
|
||
getName 输入引用与一参/两参调用、SDK 写入→notice→check 顺序、回调/SDK 异常传播、替换实例。
|
||
这些受控测试不提供 DOM、实际 ABR 或媒体解码证明。
|
||
|
||
Chromium 与 Firefox 各 14 项播放/失败组合通过,另各 1 项 SDK 能力检查通过:
|
||
本地两档位和双音轨、可见画面像素与解码帧、实际播放推进、90P→180P、返回 Auto、French
|
||
音轨切换完成事件、暂停/seek/继续、503 manifest 失败后恢复、切到无音轨 master、SDK 与核心销毁。
|
||
选择通过真实鼠标操作控件;属性、画面和 SDK 事件联合断言,不只验证菜单文字。
|
||
|
||
旧版真实 Auto 状态下 update 将标签改成当前播放档位;旧版切到无音轨 master 后仍保留音轨控件。
|
||
旧菜单回调写旧实例、destroy 后公开 update 继续工作在受控测试复现;后者不是浏览器泄漏定量证明。
|
||
SDK 在当前双音轨样本中将 id 与选择索引对齐,没有把静态 id/index 差异误报为已复现错误。
|
||
|
||
## Windows WebKit 缺口必须保留
|
||
|
||
首轮完整三引擎 28 通过、14 失败。定向诊断确认 Windows Playwright WebKit 26.6 的
|
||
MediaSource 和 ManagedMediaSource 均为 undefined,Hls.isSupported() 为 false,实际 SDK
|
||
报告 manifestIncompatibleCodecsError。新旧核心与插件共同受影响,不是 TS 候选特有回归。
|
||
|
||
最终报告为 **31 passed、14 skipped、0 failed**:WebKit 只通过显式能力/失败清理断言;
|
||
14 个播放场景按这个已经验证的宿主限制跳过。能力测试会在环境变化时失败提醒重新核对,
|
||
不能把跳过转换为播放通过。最初失败和定向诊断报告的摘要/完整性保留在冻结证据中。
|
||
Safari/macOS/iOS 的真实 MSE/ManagedMediaSource 与原生 HLS fallback 仍由 PKG-HLS-05、
|
||
EX-03、REL-09/REVIEW-02 接续,SDK-01/HLS-ENV-01 保持 open。
|
||
|
||
本轮 enableWorker=false,流通过 Playwright 本地路由提供。远端网络、SDK worker、分组音轨变更、
|
||
Safari/native fallback、更多 SDK 版本、安装包及示例页面全部组合不是本轮完成内容。
|
||
显式安装产物映射暂不接受 HLS 源码回退;HLS-06 必须加入 HLS 包对应映射和隔离 tarball 消费。
|
||
|
||
## PKG-HLS-03/04 后续验证
|
||
|
||
PKG-HLS-03 已拆出映射、UI 提交/删除、Hls 订阅与生命周期;旧缺陷成为候选修复断言,
|
||
保留发布版观察。该步最终 Node 专项 56 通过,三格式共享契约累计 83 通过,modern/legacy
|
||
浏览器各 35 通过、16 跳过;以上早期 02 结果保持其原始范围,不冒充当前源码结果。
|
||
|
||
PKG-HLS-04 把五个模块迁移为严格 TS,公开类型保留旧调用和类型提取习惯,补齐默认字段、
|
||
SDK 泛型、可选 index 和 CJS/ESM/legacy 声明路径。在线编辑器声明从公开源生成,构建时用
|
||
TS 4.3/5.9 严格校验;真实 Monaco 验证推断、错误提示及编译后的工厂执行。
|
||
这些编辑器用例不声称执行 HLS 播放,实际播放仍由 hls-control.spec.js 负责。
|
||
本步结果见 [类型迁移记录](changes/2026-09-12-PKG-HLS-04-types.md) 和
|
||
[冻结证据](baselines/hls-types-validation.json)。
|
||
|
||
实际 Hls.js 1.5.17 声明在 TS 4.3 缺少 MediaDecodingConfiguration 和
|
||
MediaCapabilitiesDecodingInfo;仅 SDK 的消费者也出现相同两个诊断。插件无新增诊断,
|
||
不注入虚假 DOM 定义或打开 skipLibCheck。独立插件五组类型模式均要求零诊断。
|
||
PKG-HLS-05/06 继续完整 SDK、浏览器、示例及安装包验收,SDK-01/HLS-ENV-01 仍开放。
|
||
|
||
## PKG-HLS-SDK-01 桌面 SDK 扩展
|
||
|
||
本子任务作为 PKG-HLS-05 前置单独交付,不降低父任务的设备/SDK 验收条件。
|
||
test/browser/hls-sdk.spec.js 使用冻结的 Hls.js 1.5.17/1.7.2 和真实 native Worker:
|
||
监听 init/transmuxComplete 消息、错误与 terminate,并且同时验证视频帧、时间推进和销毁。
|
||
只有 enableWorker=true 或仅创建 Worker 不算通过;实际转封装结果和清理是断言的一部分。
|
||
这些探针委托原生操作,不注入模拟转封装输出。SDK 仍为测试归档,不进入生产依赖。
|
||
|
||
worker 切源/清理覆盖两个 SDK 与新旧核心/插件四组合;候选插件另测 detach/reattach、
|
||
两档位不同音轨组、组内重新编号和实际 SDK 切轨完成事件、鼠标选择与 UI 清理。
|
||
高档组有 French/English/Commentary 三项、低档组有 English/French 两项,顺序有意不同。
|
||
音频是确定性正弦样本,Commentary 复用 English 样本,不冒充真实语音或音频语言识别。
|
||
|
||
版本来源、Apache-2.0 许可及成员哈希见 baselines/hls-sdk-matrix.json;新增版本来自
|
||
[npm 固定 1.7.2 元数据](https://registry.npmjs.org/hls.js/1.7.2),
|
||
[上游发布记录](https://github.com/video-dev/hls.js/releases) 仅用于核对版本变化。
|
||
这里不测试所有中间版本或外部服务器,也没有将 1.7.2 的声明改动等同于类型矩阵全部通过。
|
||
实际 TypeScript SDK 声明消费仍只有 PKG-HLS-04 明确记录的 1.5.17 范围。
|
||
|
||
本子任务暂未完成:一次 Firefox 分组切换后的销毁出现 Target crashed,HLS-CRASH-01
|
||
仍待定位。后续完整矩阵和重复通过不能抹去首次失败;详见
|
||
[进行中记录](changes/2026-09-12-PKG-HLS-SDK-01-integration.md)。
|
||
|
||
后续的分组停滞与原生崩溃保持独立风险。固定 SDK 诊断现在可加
|
||
`--controller-state` 同时记录控制器、音视频 SourceBuffer 和片段追踪;该观察器
|
||
位于 test/helpers/hls-controller-state.js,不进入生产插件。默认不开启,避免把
|
||
额外观察导致的时序变化当修复。2026-09-15 的20次原测试通过仍不关闭风险;
|
||
成功对照也能短暂出现 ENDED+空媒体缓冲,必须看独立缓冲和后续恢复。
|
||
本机 Firefox 编译参数禁用了 crash reporter,不能承诺环境变量能生成 minidump。
|
||
随后直接1.5.17两次切组崩溃均在destroy之前;可选观察器向Node复制事件后,
|
||
其中一次页面失联仍保留97条事件。此处有最后收到的音视频flush状态,尚无原生堆栈。
|
||
详情及后续取证方向见[控制器检查点](changes/2026-09-15-PKG-HLS-SDK-01-controller-state.md)。
|
||
|
||
## 可选 Windows 原生异常诊断
|
||
|
||
PKG-HLS-SDK-01 已捕获直接 Hls 1.5.17 的 Firefox DOM Worker 原生异常,
|
||
xul.dll+0x3bc4be0、C0000005 读取0x8;尚缺符号堆栈与根因,风险继续 open。
|
||
范围隔离、工具版本、重跑命令、监控权限缺口与后续绿色对照的限制见
|
||
[原生取证记录](changes/2026-09-15-PKG-HLS-SDK-01-native-exception.md)。
|