mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-13 07:46:17 -08:00
fix(dash): [PKG-DASH-05] synchronize SDK events and own refresh lifecycle
This commit is contained in:
1 parent
2ad00730ee
commit
a9cf50bc4e
24 files changed
+3913
-40
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,58 @@
|
||||
# PKG-DASH-05:SDK 事件刷新与资源清理
|
||||
|
||||
起点 `2ad00730`。本批修复外部 SDK 选择后菜单不更新,新增独立 `sdk-events.ts`,
|
||||
DASH 现在有六个严格 TS 模块。DASH-05 仍 doing;不改变公开工厂、同步 update、
|
||||
配置类型、DOM/CSS、入口或调用方 SDK 所有权,没有新增依赖或修改版本。
|
||||
|
||||
## 行为与兼容边界
|
||||
|
||||
原实现只在 ready/restart/显式 update 时重建菜单。固定真实 dash.js 4.5.2/5.2.1、
|
||||
新旧核心的外部画质/音轨选择复现 8 项失败、4 项无 MSE 跳过,证明 UI 陈旧。
|
||||
新增观察器在媒体身份校验后订阅质量、音轨、流初始化/更新、时间和 teardown 七类事件。
|
||||
同轮事件合并到一个微任务,保留选择过程内 setCurrentTrack、notice、controls.check、
|
||||
setting.check 的同步顺序和返回标签。formatter 中发出的事件不递归排队。
|
||||
|
||||
普通 playbackTimeUpdated 只比较 Auto 布尔值,未变化时不重绘、不调用 formatter。
|
||||
暂停时纯配置写入且 SDK 没发事件,仍通过原有同步 update 即时刷新;没有引入轮询计时器
|
||||
或拦截 SDK 方法。没有 on/off 的旧宿主继续支持原有显式更新。
|
||||
|
||||
teardown 清理菜单并使排队工作失效,同一 SDK 后续 streamInitialized/Updated 可以恢复。
|
||||
切换 art.dash 后由 ready/restart/update 绑定新实例。解绑先关闭记录再移除自己的监听,
|
||||
不删除调用方监听,不销毁 SDK;安装部分失败、off 抛错和同步重入都有回归。
|
||||
异步 getter/formatter 失败释放监听、清理菜单并报告原始 Error;修复后显式 update 恢复。
|
||||
显式 update 及同步菜单错误仍以原始身份同步抛出,不把公开 API 改为 Promise。
|
||||
|
||||
标准构建重新生成 main/legacy/module 与平铺 docs/compiled。体积约从 5.36/5.80/9.58 KiB
|
||||
增至 7.24/7.70/13.74 KiB,增加来自监听所有权、调度和失败清理;未引入运行时依赖。
|
||||
内部职责与维护规则见 [包内架构](../../packages/artplayer-plugin-dash-control/ARCHITECTURE.md)。
|
||||
|
||||
## 验证与测试修正
|
||||
|
||||
- 源码 Node 144 项、三格式 Node 378 项通过,覆盖两代 SDK、历史契约、清理和事件重入。
|
||||
- 正式 main/legacy 实际 SDK 各 90 项:62 通过、28 无 MSE 跳过;覆盖实际解码、外部选择、
|
||||
Auto、同 SDK attachSource、拓扑清理以及 formatter 错误/恢复。
|
||||
- 随后新增真实设置按钮点击:main 连同修正后的原生 SDK 对照 20 通过/10 跳过;
|
||||
legacy 设置点击 16 通过/8 跳过。已查看 main 设置选择截图,180p 菜单、控制栏和画面一致。
|
||||
- 正式 main/legacy 的受控 SDK、真实 DOM 与原生 MP4 回归各 84 项通过,没有跳过或重试。
|
||||
- 完整 `yarn ci:check` 746 项通过(689 单元、14 工程、43 基线),262 个生产 TS 文件严格
|
||||
检查通过,核心声明 37 个文件无漂移。lint 零错误,保留既有生成声明的 unused-disable 警告。
|
||||
|
||||
DASH-STATE-01 已按当前 representation/track 与 UI 一致的证据关闭;它不涵盖下述 seek、
|
||||
设备或完整分发验收。任务仍为 217 项:74 done、4 doing、139 todo。
|
||||
|
||||
完整 spec 现在定义 114 项;上面的 90 项运行发生在新增设置用例和修正原生对照参数之前,
|
||||
不能表述为最终 114 项完整运行。报告及全部 traces 已分别归档,未并行覆盖共享输出。
|
||||
|
||||
第一次 async error 浏览器验证有 4 项 Firefox 失败:ConsoleMessage.text 没展开 Error.message。
|
||||
改为读取消息参数并验证 message 和页面内 Error 对象身份,保留一次 warning 断言。
|
||||
第一次三格式 Node 有 8 项失败:UMD 的 VM console 未转发给外部监听。测试 helper 显式
|
||||
注入宿主 console 后通过;这两项修正都没有修改生产错误处理或放宽原始错误身份断言。
|
||||
|
||||
原生 SDK 对照此前额外传 forceReplace=true,与插件的两参数调用不同。本批将对照改为
|
||||
相同参数后再验证(包括 main 最新 30 项运行),没有修改公开 seek 目标、放宽等待或重试。
|
||||
此前 DASH-SEEK-01 的 6 秒边界停滞仍未定位;这些后续通过不足以关闭它。
|
||||
|
||||
执行指纹与本地归档索引见 [本批证据](../baselines/dash-sdk-events-validation.json)。
|
||||
缓存不提交,指纹只用于本机证据追踪;换机器按测试入口重新执行。
|
||||
Windows WebKit 无 MSE、有效设备、demo 与完整安装分发,以及全项目发布复盘继续保留。
|
||||
回退应一起恢复事件模块、入口、测试脚本和构建产物,保留历史失败证据。
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
测试保护真实 npm 1.1.0 的既有调用契约,以及重构前工作区的 SDK 5.x 稳定 ID 修正。
|
||||
版本来源见 [发布契约](baselines/dash-control-contract.md)。02 建立基线,03 改造运行行为,
|
||||
04 已把五个自有模块迁移为严格 TS 并补齐公开类型与编辑器生成;
|
||||
04 已把五个自有模块迁移为严格 TS 并补齐公开类型与编辑器生成;05 新增第六个 SDK 事件模块。
|
||||
实际模块地图与生命周期规则见 [包内架构](../packages/artplayer-plugin-dash-control/ARCHITECTURE.md)。
|
||||
|
||||
## 可重跑的测试
|
||||
|
||||
- `yarn test:dash-control`:原有 5 项过滤/稳定 ID 回归、80 项行为/历史观察、33 项候选生命周期,共 118 项。
|
||||
- `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。
|
||||
@@ -20,7 +20,8 @@
|
||||
- `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 原生对照。
|
||||
本地多画质/多音轨 MPD,新旧核心/插件、外部同步 update、自动事件刷新、同 SDK 换源、
|
||||
formatter 错误恢复、实际设置点击和 SDK 原生对照。目前完整定义 114 项。
|
||||
`ARTPLAYER_DASH_ARTIFACT` 可选择正式 main/legacy;未指定则测试源码构建。
|
||||
无 MSE 的引擎只通过能力探针,播放用例明确跳过,不计为该引擎 DASH 验收。
|
||||
- `node --test refactor/scripts/dash-sdk.test.mjs`:SDK 归档/成员/许可证来源、媒体指纹与拓扑。
|
||||
@@ -33,8 +34,8 @@
|
||||
|
||||
Node helper 分别加载当前源码、固定 Git 提交的旧工作区 UMD、实际 npm main/legacy/module。
|
||||
Git 内容以 LF 指纹核对,发布归档与成员以原始字节指纹核对。`ARTPLAYER_TEST_DASH` 可指定
|
||||
待测产物,以系统路径分隔符连接;同时指定 main/legacy/module 时共 274 项,包含两代 SDK 的
|
||||
行为与生命周期。未设置时不会把源码测试冒充三种候选产物验证。
|
||||
待测产物,以系统路径分隔符连接;同时指定 main/legacy/module 时共 378 项,包含两代 SDK 的
|
||||
行为、生命周期和事件。未设置时不会把源码测试冒充三种候选产物验证。
|
||||
|
||||
`test/helpers/dash-control.js` 只提供可控 SDK 方法和组件注册表,检查 this、类型参数、
|
||||
原始轨道身份、调用顺序、错误身份、ABR 配置保留、换 SDK、多实例和关闭后的引用。
|
||||
@@ -67,3 +68,14 @@ Git 内容以 LF 指纹核对,发布归档与成员以原始字节指纹核对
|
||||
|
||||
状态以 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/设备边界见
|
||||
[事件改造记录](changes/2026-09-12-PKG-DASH-05-sdk-events.md)。历史失败证据保留,后续通过不抹去它们。
|
||||
+1
-1
@@ -483,4 +483,4 @@
|
||||
- PKG-DASH-02: [记录](changes/2026-09-12-PKG-DASH-02-tests.md) [记录](dash-validation.md) [记录](baselines/dash-validation.json)
|
||||
- PKG-DASH-03: [记录](changes/2026-09-12-PKG-DASH-03-runtime.md) [记录](baselines/dash-runtime.json) [记录](dash-validation.md)
|
||||
- PKG-DASH-04: [记录](changes/2026-09-12-PKG-DASH-04-types.md) [记录](baselines/dash-types-validation.json) [记录](dash-validation.md)
|
||||
- PKG-DASH-05: [记录](changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md) [记录](baselines/dash-sdk.json) [记录](baselines/dash-sdk-checkpoint.json) [记录](dash-validation.md) [记录](changes/2026-09-12-PKG-DASH-05-sdk-types.md) [记录](baselines/dash-sdk-types-validation.json)
|
||||
- PKG-DASH-05: [记录](changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md) [记录](baselines/dash-sdk.json) [记录](baselines/dash-sdk-checkpoint.json) [记录](dash-validation.md) [记录](changes/2026-09-12-PKG-DASH-05-sdk-types.md) [记录](baselines/dash-sdk-types-validation.json) [记录](changes/2026-09-12-PKG-DASH-05-sdk-events.md) [记录](baselines/dash-sdk-events-validation.json)
|
||||
@@ -1,5 +1,23 @@
|
||||
# 进度与证据
|
||||
|
||||
## 当前实施:DASH-05 SDK 事件刷新源码改造
|
||||
|
||||
新增第六个严格 TS 模块 sdk-events:按 SDK 质量/音轨/流事件合并刷新菜单,保留同步
|
||||
选择与 update,清理仅释放自有监听;覆盖 teardown/恢复、SDK 替换、异常和重入。
|
||||
播放 tick 只检查 Auto 变化;暂停时纯配置修改且无 SDK 事件仍由显式 update 即时刷新。
|
||||
|
||||
源码 Node 144、三格式 378 项通过;正式 main/legacy 实际 SDK 各 62 通过/28 无 MSE
|
||||
跳过(当时完整 90 项);新增实际设置及修正参数的原生对照 main 20 通过/10 跳过,
|
||||
legacy 设置 16 通过/8 跳过。main/legacy 受控 SDK 与真实 DOM 各 84 项全部通过。
|
||||
实际 SDK spec 目前定义 114 项,90 项报告与后续过滤运行的范围分别保留,未冒充整套重跑。
|
||||
完整本地 CI 746 项通过(689 单元、14 工程、43 基线),262 个生产 TS 严格检查通过。
|
||||
|
||||
当前项同步风险 DASH-STATE-01 已关闭;DASH-SEEK-01 仍 open,后续通过不能证明历史
|
||||
边界停滞已解决。设备、Windows WebKit MSE、demo/完整分发继续推进。217 项仍为
|
||||
74 done、4 doing、139 todo;本批是待完成 DASH-05 的本地检查点,不推送发布。
|
||||
见 [本批说明](changes/2026-09-12-PKG-DASH-05-sdk-events.md) 和
|
||||
[执行指纹](baselines/dash-sdk-events-validation.json)。以下为历史检查点当时状态。
|
||||
|
||||
## 当前实施:DASH-05 实际 SDK 类型与 nullable 元数据
|
||||
|
||||
实际 dash.js 4.5.2/5.2.1 类型消费者已接入,固定五个 @svta 类型依赖及原始 exports。
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
| CHAPTER-TIMING-01 | open / 已复现 | Windows WebKit 清晰度切换曾在等待窗口内未见 restart,稍后状态恢复 | PKG-CHAPTER-05 |
|
||||
| DASH-SDK-01 | open / 已复现 | npm 发布版 4.x 与工作区仅 5.x 的 SDK 接口不兼容 | PKG-DASH-02, PKG-DASH-03, PKG-DASH-05 |
|
||||
| DASH-LIFE-01 | resolved / 已复现 | DASH 空拓扑残留 UI,监听和旧选择回调缺乏关闭守卫 | PKG-DASH-02, PKG-DASH-03 |
|
||||
| DASH-STATE-01 | open / 已复现 | DASH 当前项高亮使用真值 ID、音轨身份和标签去重,边界待核实 | PKG-DASH-02, PKG-DASH-03, PKG-DASH-05 |
|
||||
| DASH-STATE-01 | resolved / 已复现 | DASH 当前项高亮使用真值 ID、音轨身份和标签去重,边界待核实 | PKG-DASH-02, PKG-DASH-03, PKG-DASH-05 |
|
||||
| DASH-TYPE-01 | resolved / 源码/产物事实 | DASH 类型未表达默认工厂参数、SDK 回调对象和现代模块入口 | PKG-DASH-04 |
|
||||
| DASH-DEMO-01 | open / 源码/产物事实 | DASH 示例仅新 SDK 且重复安装会累积销毁回调 | PKG-DASH-06 |
|
||||
| DASH-SEEK-01 | open / 已复现 | 真实 dash.js 4.5.2 暂停 seek 到缓冲片段边界后可能持续 waiting | PKG-DASH-05, REVIEW-02 |
|
||||
+9
-2
@@ -2889,7 +2889,7 @@
|
||||
"id": "DASH-STATE-01",
|
||||
"title": "DASH 当前项高亮使用真值 ID、音轨身份和标签去重,边界待核实",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-DASH-02",
|
||||
"PKG-DASH-03",
|
||||
@@ -2908,7 +2908,14 @@
|
||||
"refactor/baselines/dash-sdk-checkpoint.json"
|
||||
],
|
||||
"compatibleResolution": "验证零 ID、重复标签和克隆音轨当前项,在保持原展示语义时按实际可选项定位高亮。",
|
||||
"closureCriteria": "有受控和真实 SDK 证据说明选中的 representation/track 与 UI 一致。"
|
||||
"closureCriteria": "有受控和真实 SDK 证据说明选中的 representation/track 与 UI 一致。",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-12-PKG-DASH-05-sdk-events.md",
|
||||
"refactor/baselines/dash-sdk-events-validation.json",
|
||||
"test/dash-events.test.js",
|
||||
"test/browser/dash-sdk.spec.js"
|
||||
],
|
||||
"resolutionRationale": "受控两代 SDK 保留零 ID、重复标签和唯一克隆轨道匹配;实际固定 SDK 4.5.2/5.2.1、新旧核心、main/legacy 的控制栏/设置、外部选择和 Auto 刷新与实际 representation/track 一致。仅关闭当前项与菜单同步缺陷;暂停无事件的纯配置修改仍用显式 update,seek 停滞、无 MSE、设备与完整分发不在此关闭范围。"
|
||||
},
|
||||
{
|
||||
"id": "DASH-TYPE-01",
|
||||
|
||||
+3
-1
@@ -2068,7 +2068,9 @@
|
||||
"baselines/dash-sdk-checkpoint.json",
|
||||
"dash-validation.md",
|
||||
"changes/2026-09-12-PKG-DASH-05-sdk-types.md",
|
||||
"baselines/dash-sdk-types-validation.json"
|
||||
"baselines/dash-sdk-types-validation.json",
|
||||
"changes/2026-09-12-PKG-DASH-05-sdk-events.md",
|
||||
"baselines/dash-sdk-events-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1054,7 +1054,7 @@
|
||||
"refactor/scripts/dash-sdk-types.test.mjs"
|
||||
],
|
||||
"contract": "Caller owns art.dash. Candidate adapts the released 4.x quality method surface and workspace 5.x stable representation ID surface. Controlled contracts and DOM validation pass; actual pinned 4.5.2/5.2.1 SDK media remains PKG-DASH-05.",
|
||||
"validationStatus": "Pinned real npm SDK 4.5.2/5.2.1 media exercised; DASH-SEEK-01 and Windows WebKit MSE gap remain. Actual SDK declarations and exact peer closure now tested across ten compiler/module configurations, with no added plugin errors and upstream-only Node10/old DOM limitations. Automatic state refresh, full formats/devices/distribution remain incomplete.",
|
||||
"validationStatus": "Pinned npm SDK 4.5.2/5.2.1 main/legacy media, automatic state refresh, same-SDK source replacement, settings selection and formatter recovery exercised. DASH-SEEK-01 and Windows WebKit MSE gap remain. Actual SDK declarations and exact peer closure tested across ten compiler/module configurations, with no added plugin errors and upstream-only Node10/old DOM limitations. Devices and full distribution remain incomplete; see refactor/baselines/dash-sdk-events-validation.json.",
|
||||
"demoPathsSource": "refactor/baselines/demo-inventory.json"
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user