Files
ArtPlayer/refactor/changes/2026-09-12-PKG-HLS-SDK-01-integration.md
T

101 lines
8.1 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-HLS-SDK-01:真实 worker 与分组轨道验证(进行中)
本子任务来自 PKG-HLS-05,负责可独立取证的桌面 SDK worker、分组轨道与重绑定。
父任务增加对子任务的依赖,仍要求真实设备/SDK 证据,不因拆分而降低完成条件。
当前子任务保持 doing,尚无完成提交;HLS-CRASH-01 未解释,不能继承为正常通过。
## 已实现
- 固定 Hls.js 1.5.17 和核实时 npm latest 为 1.7.2 的两个归档。SHA-512、SHA-256、
选定源/运行/许可文件均核验;历史冻结对象保持相同。版本元数据 URL 及获取时间见
baselines/hls-sdk-matrix.json。新版本来源为 https://registry.npmjs.org/hls.js/1.7.2,
上游变更核对 https://github.com/video-dev/hls.js/releases,不执行浮动 latest 测试。
- test/browser/hls-sdk.spec.js 使用原生 Worker 子类观察 init/transmuxComplete/error/
terminate,所有操作委托实际 Worker。视频帧、媒体时钟和 enableWorker 保持启用共同验证,
防止只设置开关或发生 SDK main-thread fallback 后仍冒充 worker 通过。
- 新旧核心与插件四组合覆盖两个固定 SDK、真实播放/seek、换成无音轨来源和 worker 清理。
候选插件另覆盖实际 detach/reattach、两档位不同音轨组、重编号/偏好保持和 UI 选择。
Commentary 复用 English 正弦样本,只验证轨道拓扑,不声称真实语音或音频语言识别。
- 新增 baseline runner 用例核验 SDK 归档、Apache-2.0 许可和未引入运行时依赖;现有
ci:check 纳入它。生产代码/构建产物保持 HLS-04 提交 2f9bee4e,未因 SDK 测试升级生产依赖。
## 已执行与未解释失败
完整本地 CI 537 项通过(496 单元、11 工程、30 基线),254 个生产 TS 文件严格检查通过。
首轮 Chromium 18 项通过。随后 main/legacy 完整矩阵各 38 passed、16 skipped。
强化新实例 worker 启用/错误断言后,一次 main 运行出现 37 passed、16 skipped、1 failed:
Firefox、Hls 1.5.17、候选核心在高低音轨组切换后的 destroy 附近出现 Target crashed。
错误发生在实际 destroy 返回后读取 worker 终止状态,无法从已关闭页面获取诊断状态。
目前没有证据将其归因于插件、核心、Hls、浏览器或内存压力,不称为“环境偶发已解决”。
随后同样源码的 legacy 完整矩阵和 main 完整复核各 38 passed、16 skipped;
Firefox 两个 SDK × 新旧核心分组场景各重复三次,共 12 passed。这些结果不关闭首次失败。
另进行 DEBUG=pw:browser + trace=on 的五次重复诊断,保留独立报告/trace 目录。
该轮 20 项中 19 通过、1 失败,未复现首次崩溃,但出现另一种失败:Firefox、Hls 1.7.2、
旧核心的组切换后音轨组已更新、视频仍为 90P,7 秒未达到 180P。SDK 有非致命 aborted
记录,未收到对应 LEVEL_SWITCHED=1。此问题另记 HLS-PLAYBACK-01,不混称崩溃已在旧核心复现。
有实际 SDK/浏览器状态及完整 trace,后续需直接 Hls 对照与时序取证;不扩大等待来掩盖。
首次失败报告/错误栈保留;首次 trace 所在共享结果目录被后续套件覆盖,不能声称 trace 仍在。
后续诊断复制完整 results 至专用 cache 路径,避免再丢失。
冻结的当前进度见 baselines/hls-sdk-validation.json,状态 partial-unresolved-crash。
其中记录首次失败、后续重复、完整矩阵、输入指纹及原生 worker 消息计数,不能只引用绿灯摘要。
浏览器报告中的 skipped 仅为 Windows WebKit 无 MSE;每个 SDK 的能力/失败清理实际执行。
## 剩余与接续
HLS-CRASH-01/HLS-PLAYBACK-01:继续保留失败并追查 Firefox 销毁崩溃和独立切组卡住;
定位前不完成本子任务。
适当的下一步是浏览器诊断日志/崩溃证据与直接 Hls+原生 video 对照,避免靠反复重跑宣布修复。
父 HLS-05 还包括 Safari/native、真机和完整 SDK/网络范围;HLS-06 包含例子/隔离安装分发。
本轮 1.7.2 只提供运行时验证,公开 SDK 类型消费仍以 HLS-04 的实际 1.5.17 为已验证范围。
没有将两个 SDK 点版本称为整个区间或新的最低版本。SDK-01/HLS-ENV-01 继续 open。
当前任务可提交明确标注 checkpoint 的诊断进度,但状态仍为 doing,不计入完成数。
满足原验收后仍须独立完成提交;checkpoint 不代表任一风险已关闭。
没有 push/tag/publish/merge。全项目目标继续。
## 后续诊断入口与当前判断
新增 refactor/scripts/hls-sdk-diagnostic.mjs:固定 SDK、确定性媒体和本地随机端口服务器,
可选择普通 HTTP/Playwright route、直接原生 video/发布核心/候选核心、是否安装候选插件、
SDK 调试日志、worker 开关/观察器以及直接 video 的销毁顺序。日志包含 SDK/媒体事件、
暂停/缓冲区/时钟与最终状态;每次运行使用专用目录保存每轮 trace 和报告。
直接模式不加载 ArtPlayer/插件,报告检查其 global 为 undefined;三种宿主的输入字节均记录。
此工具用于对照取证,不以诊断重复通过替代原场景或发布验收。
```sh
node refactor/scripts/hls-sdk-diagnostic.mjs --version 1.7.2 --iterations 10 --transport route
node refactor/scripts/hls-sdk-diagnostic.mjs --version 1.7.2 --iterations 10 --transport route --host published --plugin --observe-workers
node refactor/scripts/hls-sdk-diagnostic.mjs --version 1.5.17 --iterations 5 --transport route --host candidate --plugin --observe-workers
```
共享 test/helpers/worker-observer.js 保留原生 Worker 操作;grouped playlist 移到
test/browser/fixtures/hls-grouped.m3u8,内容与先前内嵌字符串相同,避免两套样本漂移。
原集成测试补充 paused、readyState、buffered 和 SDK 事件当时的媒体状态,保持原断言及超时。
移动 helper 后的一次完整 main 矩阵仍为 38 passed、16 skipped,trace 独立保存。
初始直接 HTTP/route 及更接近真实切轨完成顺序的 direct 对照各十次通过;
旧核心初始化在异步 customType 前暴露 video 尚未赋值,一轮新诊断脚本因此自身失败,
已改为动态 getter 与就绪条件,这不是播放器缺陷,不能计入 SDK 通过/失败归因。
其后带 SDK 日志的三宿主并行各 15 次通过,关闭 SDK 日志/采用相同条件轮询各十次通过,
加入相同 Worker 观察器后各十次通过。没有证明任一宿主/日志/路由/观察器是原因。
1.5.17 同样安排直接、旧核心、候选核心观察器对照各五次,结果与版本/指纹另存
baselines/hls-sdk-diagnostics.json;旧失败文件 hls-sdk-validation.json 不覆盖。
1.5.17 对照确实再次捕获崩溃:直接原生 video 与候选核心均出现 page crashed;
直接模式没有加载 ArtPlayer/插件(输入文件和 runner 分支可核对)。候选核心关闭 Worker
观察器后也出现两次崩溃,所以既不能只归因于核心,也不能只归因于 Worker 观察器。
直接模式关闭观察器、以及先销毁 SDK 再清理 video 的有限对照通过;尚不足以确定修复策略。
这些诊断还暴露早期 runner 的计数问题:操作断言完成后,最后状态读取失败或稍后 crash
没有改写 passed。现在状态/trace/关闭错误及 pageerror/crash 都参与最终结果,结束前再次核对。
冻结汇总保留原 recordedStatus,并按原始 errors/state.error 重算 effective status,
不是通过删除失败来刷新统计。全部有效诊断共 184 passed、6 failed;另有前述十条脚本自身
初始化失败单列排除。此处通过数不是发布矩阵通过数,未解释失败仍阻止本子任务完成。
目前不能从这些有限对照推出“已修复”或具体的“上游缺陷”。两风险保留 open,本子任务保持 doing。
下一轮优先比较非插桩/非路由的 1.5.17 worker 销毁与禁用 worker 控制,并保留最后销毁前
状态或原生崩溃证据。没有依据提前更改核心公开 destroy 顺序或消费者拥有的 SDK 配置。
继续其他无依赖的包迁移时,HLS 的原生/设备/压力与复盘门槛仍必须回来完成。