mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-16 01:26:16 -08:00
test(dash): [PKG-DASH-05] checkpoint real SDK media and seek diagnostics
This commit is contained in:
1 parent
6840544e0e
commit
c4b5f5f454
47 files changed
+2216
-11
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "PKG-DASH-05",
|
||||
"sdks": [
|
||||
{
|
||||
"metadataUrl": "https://registry.npmjs.org/dashjs/4.5.2",
|
||||
"codeMember": "package/dist/dash.all.min.js",
|
||||
"release": {
|
||||
"name": "dashjs",
|
||||
"version": "4.5.2",
|
||||
"tarball": "https://registry.npmjs.org/dashjs/-/dashjs-4.5.2.tgz",
|
||||
"integrity": "sha512-WXPk0lPDSaHjiSVoVRh2jQPiMmB1alKUH8hV2CVmaI0vPUeT1wIY7madVE38SthfOmwS9IJViv1RrxrxdGjElg==",
|
||||
"sha256": "9a0944c48deb0fd8f92b0eea436c5b0d0aea9237c7da0078c0310f1430d0a31f",
|
||||
"files": {
|
||||
"package/package.json": "62b2295c4a92ec996ff066f7e5739893c46fce44d80c940c61ced9d5710226d1",
|
||||
"package/LICENSE.md": "f7cc4ba24850cc564766c75923d07c3d22fa27f304285f4d25ecffeaec964e28",
|
||||
"package/index.d.ts": "13e6bd0a3c77e2db9378e355915929ed3dda5d8de9c48f446c9d3e9fb7154dbd",
|
||||
"package/dist/dash.all.min.js": "17849c05872997095a63d74bde3fed6f79c14c6a48cdf904833d880b93a476da"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"metadataUrl": "https://registry.npmjs.org/dashjs/5.2.1",
|
||||
"codeMember": "package/dist/modern/umd/dash.all.min.js",
|
||||
"release": {
|
||||
"name": "dashjs",
|
||||
"version": "5.2.1",
|
||||
"tarball": "https://registry.npmjs.org/dashjs/-/dashjs-5.2.1.tgz",
|
||||
"integrity": "sha512-axcJmLeJCTJMLUfQRErUJB1KOiU5iHF+DMLBc3FKeox1HPYtGUQlC6Xm5Mm6vhBUR3CHHLIPOqw0JDIqMtP+Dw==",
|
||||
"sha256": "4eacb0cc3525276666ca3f084611cdabb5a2264d128dfe0750fe106fbddd088f",
|
||||
"files": {
|
||||
"package/package.json": "f89fa389855d2a21b380fa69c84735da25bd93e3b9d7c39bd0d634493425fd8c",
|
||||
"package/LICENSE.md": "f7cc4ba24850cc564766c75923d07c3d22fa27f304285f4d25ecffeaec964e28",
|
||||
"package/index.d.ts": "03b420509a480f893bf8253232cfd28428dc0be5f254fefe99a91e65847c010e",
|
||||
"package/dist/modern/umd/dash.all.min.js": "3a22b1f4576ab294f41e56f156cec7972a5f83edda379416778293ff22d2eb49"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"note": "Pinned SDK archives are test-only. Selected member hashes and whole-archive integrity; no production dependency or blanket SDK-version support claim."
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
# PKG-DASH-05:真实 DASH SDK 与本地媒体验证检查点
|
||||
|
||||
起点 `6840544e`。本批新增真实 SDK/媒体测试与来源证据,没有修改生产实现、公开声明、
|
||||
依赖或版本。05 保持 doing,不把浏览器能力缺口或尚未解释的播放停滞计为完成。
|
||||
|
||||
## 输入与执行
|
||||
|
||||
- 固定实际 npm dash.js 4.5.2 与 5.2.1,归档 SHA512 integrity/SHA256,保存运行脚本、
|
||||
package.json、原始声明和 BSD-3-Clause 许可证成员指纹。SDK 仅供测试,未复制进生产包。
|
||||
- 新增 `scripts/generate-dash-fixture.mjs`:FFmpeg 合成 12 秒、90p/180p、英语 440 Hz/
|
||||
法语 880 Hz AAC 的本地 DASH。三种 MPD 分别为双画质双音轨、纯视频、单画质纯视频。
|
||||
31 个资源逐字节校验,生成器拒绝覆盖已有目录;MPD 强制 LF,m4s 作为二进制。
|
||||
MPD 保留生成时移除音轨/画质节点留下的空白节点,Git 对此类夹具关闭行尾空白提示,
|
||||
不手改已运行的 XML 字节或重新写指纹;此例外不适用于源码与其他文件。
|
||||
- `test/browser/dash-sdk.spec.js` 加载真实 SDK、发布插件或候选插件、新旧核心,在真实
|
||||
Chromium/Firefox/WebKit 执行。测试控制栏选择、Auto、实际解码视频尺寸与时钟、
|
||||
外部 SDK 选择后的同步 update、换源菜单拓扑、旧回调与调用方 SDK 销毁所有权。
|
||||
- 原生对照不创建 ArtPlayer/插件实例,直接用同一 SDK、video、媒体、缓冲配置执行
|
||||
画质/音轨与暂停 seek。页面仍加载核心脚本,另断言 Artplayer.instances 为零。
|
||||
- 每例附 SDK/插件/媒体来源、输入指纹、能力、轨道/画质、媒体缓冲区、事件时间、片段请求
|
||||
和浏览器 trace。报告与整个 results 目录在下一次套件前归档到独立缓存。
|
||||
|
||||
## 失败原因与证据边界
|
||||
|
||||
首轮 24 项:10 通过、8 失败、6 跳过。6 个能力探针的失败来自测试主动 destroy 未 initialize
|
||||
的 SDK:实际 4.5.2 源码 destroy → reset → attachSource(null),后者要求已初始化。
|
||||
探针只读取版本/能力,不创建媒体资源;已移除错误的未初始化销毁,实际播放用例仍验证销毁。
|
||||
|
||||
其余两项分别出现在 Chromium 候选核心/发布插件与 Firefox 发布核心/候选插件的 SDK 4.5.2
|
||||
组合:暂停后 seek 到 6 秒无法推进。trace 证明 AbortError 在测试超时后的销毁才出现,
|
||||
不能把它当成停滞起因。补充诊断后 24 项为 17 通过、1 失败、6 跳过;Chromium 停滞复现:
|
||||
视频缓冲终点 5.999999 秒,time=6、paused=false、seeking=true、readyState=1,未请求
|
||||
下一段视频,SDK 错误列表为空。SDK 音轨 rendered 事件已先于 seeking 到达,不能简单
|
||||
归因为“没有等音轨切完”。DASH-SEEK-01 保持 open。
|
||||
|
||||
原生初始对照、增加缓冲终点接近 6 秒的前提后各 6 项为 4 通过、2 跳过,均没有复现停滞。
|
||||
这些通过不能证明 ArtPlayer 是根因,也不能关闭此前新旧核心组合的失败。后续应继续比较
|
||||
SourceBuffer 与 video.buffered 的范围、SDK 调度和暂停/seek 顺序;不得仅增大超时、偏移
|
||||
seek 目标或吞掉未处理异常来制造通过。
|
||||
|
||||
外部 update 与换源首轮 24 项为 8 通过、8 失败、8 跳过。8 个换源失败源于测试保留了
|
||||
registry 的可变 option 对象;Component.update 会 Object.assign 修改它,调用到的是新
|
||||
回调。改为在换源前保存实际函数和旧 selector item;定向重跑 12 项为 8 通过、4 跳过。
|
||||
验证真实 SDK 连续切到无音轨、单画质、原拓扑,旧回调不改变新 SDK,四次 SDK 生命周期
|
||||
由调用方恰好销毁四次。没有据此修改生产组件更新语义。
|
||||
|
||||
正式 main 整套 54 项为 36 通过、2 失败、16 跳过;两个失败是 Chromium 新旧核心/发布插件
|
||||
的同类 SDK 4.5.2 seek 停滞。候选组合本轮通过不能关闭首轮 Firefox 候选插件失败。
|
||||
完整 `yarn ci:check` 717 项通过(661 单元、14 工程、42 基线),261 个生产 TS 严格检查通过;
|
||||
它不包含该浏览器套件,不能把本地工程检查通过表述为全部浏览器通过。生成器整理参数后
|
||||
在新目录重建,31 个资源与冻结字节全部相同;只证明同一 FFmpeg/主机下本次重建。
|
||||
已查看候选核心/main/SDK 5.2.1 的 Chromium 播放截图,6 秒画面和 Auto/fr 控件显示正常。
|
||||
|
||||
最终 main 执行和 CI 摘要见 [机器证据](../baselines/dash-sdk-checkpoint.json)。所有早期报告、
|
||||
trace 和结果目录均保留;本地缓存未上传,换机器应重新执行。后续通过不覆盖开放失败。
|
||||
|
||||
## 后续范围与回退
|
||||
|
||||
当前 217 项:74 done、4 doing、139 todo。DASH-05 仍需完成停滞排查、实际 SDK 类型消费者、
|
||||
SDK 驱动状态刷新/错误和播放组合、legacy 正式产物与有效 MSE/设备环境验证。
|
||||
原有同步 update 已通过实际 SDK 对照;当前插件不会自动订阅 SDK 状态变化,自动刷新是否
|
||||
增强及其订阅/重入/销毁规则需单独验证,不能从显式 update 的通过推导自动同步已实现。
|
||||
06 继续实际 8082 示例生命周期与完整隔离分发,版本升级和全项目发布复盘按总计划执行。
|
||||
|
||||
本批为独立本地 checkpoint,不推送、不发布。回退只移除这批测试、合成媒体、生成器和记录,
|
||||
保留 01~04 已完成的源码、兼容声明与验证。新增基线测试纳入已有 test:baseline/ci:check。
|
||||
@@ -19,6 +19,13 @@
|
||||
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 原生对照。
|
||||
`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 helper 分别加载当前源码、固定 Git 提交的旧工作区 UMD、实际 npm main/legacy/module。
|
||||
Git 内容以 LF 指纹核对,发布归档与成员以原始字节指纹核对。`ARTPLAYER_TEST_DASH` 可指定
|
||||
@@ -29,10 +36,12 @@ Git 内容以 LF 指纹核对,发布归档与成员以原始字节指纹核对
|
||||
原始轨道身份、调用顺序、错误身份、ABR 配置保留、换 SDK、多实例和关闭后的引用。
|
||||
真实旧实现的缺陷观察保持冻结;候选生命周期新增正确行为断言,不把历史缺陷当作兼容要求。
|
||||
|
||||
浏览器使用真实发布/候选 ArtPlayer DOM、真实发布/候选插件和本地原生 MP4。SDK 方法可控,
|
||||
`dash-control.spec.js` 使用真实发布/候选 ArtPlayer DOM、真实发布/候选插件和本地原生 MP4。SDK 方法可控,
|
||||
断言真实点击触发的参数及控制栏/设置同步,再通过真实播放按钮验证视频时钟推进、无媒体错误。
|
||||
**没有加载 dash.js,没有验证 MPD、ABR 自动切换或自适应流解码。** 这些仍是 05 必须完成的
|
||||
固定 dash.js 4.5.2 / 5.2.1 集成验证。`ARTPLAYER_DASH_ARTIFACT` 可替换插件脚本;02 未设置,
|
||||
固定 dash.js 4.5.2 / 5.2.1 集成验证。独立 `dash-sdk.spec.js` 已开始真实验证,状态以
|
||||
[05 检查点](changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md) 为准;不覆盖早期停滞失败。
|
||||
`ARTPLAYER_DASH_ARTIFACT` 可替换插件脚本;02 未设置,
|
||||
03 分别使用正式 main 与 legacy 文件。核心仍按服务端 manifest 加载发布/候选源码构建。
|
||||
|
||||
## 02 首次失败与证据
|
||||
|
||||
+3
-2
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 217 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 140 / doing 3 / blocked 0 / done 74 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 139 / doing 4 / blocked 0 / done 74 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
| PKG-DASH-02 | artplayer-plugin-dash-control<br>建立特有行为与错误测试 | PKG-DASH-01, ENG-03, ENG-05 | 保留已有 5 项稳定 ID 回归,补发布版 SDK 4.x/当前 5.x、音轨/空列表/过滤/换源与关闭引用 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done |
|
||||
| PKG-DASH-03 | artplayer-plugin-dash-control<br>整理内部职责与资源 | PKG-DASH-02, CORE-11, CORE-14 | 能力适配保留 SDK 4.x 与 5.x,稳定 ID 映射、ABR 状态、UI 清理和生命周期职责分离 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | done |
|
||||
| PKG-DASH-04 | artplayer-plugin-dash-control<br>迁移自有源码和公开类型 | PKG-DASH-03, ENG-04, ENG-06, CORE-07 | dash.js adapter、selector 和回调类型 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | done |
|
||||
| PKG-DASH-05 | artplayer-plugin-dash-control<br>验证新旧核心和组合 | PKG-DASH-04, CORE-22 | 固定 dash.js 4.5.2/5.2.1 与本地 DASH 实际清晰度/音轨、高亮、Auto 和换源组合 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo |
|
||||
| PKG-DASH-05 | artplayer-plugin-dash-control<br>验证新旧核心和组合 | PKG-DASH-04, CORE-22 | 固定 dash.js 4.5.2/5.2.1 与本地 DASH 实际清晰度/音轨、高亮、Auto 和换源组合 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | doing |
|
||||
| PKG-DASH-06 | artplayer-plugin-dash-control<br>验证分发并同步文档 | PKG-DASH-05, ENG-07 | dash.control.js、支持的 dash.js 版本与产物 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo |
|
||||
|
||||
## 5 包迁移:artplayer-plugin-multiple-subtitles
|
||||
@@ -483,3 +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)
|
||||
@@ -1,5 +1,24 @@
|
||||
# 进度与证据
|
||||
|
||||
## 当前实施:DASH-05 真实 SDK 与 MPD 检查点
|
||||
|
||||
已固定 npm dash.js 4.5.2/5.2.1 归档/成员/许可证指纹,新增本地双画质双音轨 DASH、
|
||||
纯视频和单画质拓扑,真实 Chromium/Firefox/WebKit 测试及不创建 ArtPlayer 的 SDK 对照。
|
||||
正式 main 共 54 项:36 通过、2 失败、16 因 Windows WebKit 无 MSE 跳过,不算播放验收。
|
||||
外部 SDK 选择后的同步 update、连续换源/菜单清理、旧回调及调用方 SDK 销毁所有权通过。
|
||||
|
||||
两个 main 失败均为 SDK 4.5.2/发布插件的暂停 seek:新旧核心都可在 5.999999 秒缓冲
|
||||
终点 seek 到 6 秒后停滞。DASH-SEEK-01 保持 open;AbortError 是超时后销毁的结果,
|
||||
不能当作起因。原生对照通过不足以定位或关闭它,首次 Firefox/候选插件失败也仍保留。
|
||||
已修正能力探针错误销毁未初始化 SDK、以及换源测试误保留可变 option 对象两个测试问题。
|
||||
完整本地工程 CI 717 项通过、261 个生产 TS 严格检查通过;该 CI 不含上述失败的 SDK 浏览器套件。
|
||||
生成器在同一 FFmpeg/主机的新目录重建 31 个资源,全部字节一致,已查看实际播放截图。
|
||||
|
||||
当前 217 项:74 done、4 doing、139 todo。DASH-05 尚未完成;实际 SDK 类型、自动状态
|
||||
刷新/错误、legacy SDK 矩阵、设备和完整分发继续推进。此次没有修改生产源码、依赖或版本。
|
||||
详见 [本批记录](changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md)、
|
||||
[执行证据](baselines/dash-sdk-checkpoint.json)。以下各节为对应阶段当时的历史状态。
|
||||
|
||||
## 最新完成:DASH-04 严格 TS、公开类型和编辑器迁移
|
||||
|
||||
DASH 五个自有模块全部 TS 化,源码/公开工厂可互相赋值;默认字段和自定义 SDK 泛型准确,
|
||||
|
||||
@@ -140,3 +140,4 @@
|
||||
| DASH-STATE-01 | open / 已复现 | 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 |
|
||||
+21
-2
@@ -2850,7 +2850,8 @@
|
||||
"test/dash-contract.test.js",
|
||||
"refactor/dash-validation.md",
|
||||
"test/dash-lifecycle.test.js",
|
||||
"refactor/baselines/dash-runtime.json"
|
||||
"refactor/baselines/dash-runtime.json",
|
||||
"refactor/baselines/dash-sdk-checkpoint.json"
|
||||
],
|
||||
"compatibleResolution": "按方法能力适配两代已存在用法,保留 v5 稳定 ID,不能要求旧消费者改用新 SDK。",
|
||||
"closureCriteria": "归档旧用法、v4/v5 受控及实际媒体矩阵通过,清晰度键不混用。"
|
||||
@@ -2903,7 +2904,8 @@
|
||||
"test/dash-contract.test.js",
|
||||
"refactor/dash-validation.md",
|
||||
"test/dash-lifecycle.test.js",
|
||||
"refactor/baselines/dash-runtime.json"
|
||||
"refactor/baselines/dash-runtime.json",
|
||||
"refactor/baselines/dash-sdk-checkpoint.json"
|
||||
],
|
||||
"compatibleResolution": "验证零 ID、重复标签和克隆音轨当前项,在保持原展示语义时按实际可选项定位高亮。",
|
||||
"closureCriteria": "有受控和真实 SDK 证据说明选中的 representation/track 与 UI 一致。"
|
||||
@@ -2950,6 +2952,23 @@
|
||||
],
|
||||
"compatibleResolution": "验证真实 SDK 销毁和示例重载路径,对齐 v4/v5 文档与示例,不让旧监听误操作新实例。",
|
||||
"closureCriteria": "真实 8082 demo、旧/新 SDK 路径与 tarball 产物一致,监听和 SDK 所有权可验证。"
|
||||
},
|
||||
{
|
||||
"id": "DASH-SEEK-01",
|
||||
"title": "真实 dash.js 4.5.2 暂停 seek 到缓冲片段边界后可能持续 waiting",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-DASH-05",
|
||||
"REVIEW-02"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/dash-sdk.spec.js",
|
||||
"refactor/baselines/dash-sdk-checkpoint.json",
|
||||
"refactor/changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md"
|
||||
],
|
||||
"compatibleResolution": "先比较实际 SDK、SourceBuffer/video 缓冲与暂停 seek 调度;不偏移公开 seek 目标,不吞异常或增加超时伪造通过。",
|
||||
"closureCriteria": "原失败的新旧核心/插件组合有确定根因与对应修复/可验证环境边界;原生对照及原顺序、原目标回归成立,后续偶然通过不能关闭。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
// eslint-disable-next-line test/no-import-node-test -- Verify frozen real SDK and media inputs.
|
||||
import test from 'node:test'
|
||||
import { ensureArchive, hash, readMember, refactorDir } from './releases.mjs'
|
||||
|
||||
test('DASH real SDK releases retain exact versions, executable members, declarations and license provenance', async () => {
|
||||
const baseline = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/dash-sdk.json')))
|
||||
assert.equal(baseline.task, 'PKG-DASH-05')
|
||||
assert.deepEqual(baseline.sdks.map(sdk => sdk.release.version), ['4.5.2', '5.2.1'])
|
||||
for (const sdk of baseline.sdks) {
|
||||
const archive = await ensureArchive(sdk.release)
|
||||
assert.equal(sdk.release.name, 'dashjs')
|
||||
assert.equal(sdk.metadataUrl, `https://registry.npmjs.org/dashjs/${sdk.release.version}`)
|
||||
assert(sdk.release.files[sdk.codeMember])
|
||||
assert(sdk.release.files['package/index.d.ts'])
|
||||
assert(sdk.release.files['package/LICENSE.md'])
|
||||
for (const [member, expected] of Object.entries(sdk.release.files))
|
||||
assert.equal(hash(readMember(archive, member)), expected, member)
|
||||
const manifest = JSON.parse(readMember(archive, 'package/package.json'))
|
||||
assert.equal(manifest.version, sdk.release.version)
|
||||
assert.equal(manifest.name, 'dashjs')
|
||||
assert.equal(manifest.license, 'BSD-3-Clause')
|
||||
}
|
||||
})
|
||||
|
||||
test('DASH media bytes and topology remain reproducible inputs rather than remote stream assumptions', () => {
|
||||
const directory = path.join(refactorDir, '../test/browser/media/dash')
|
||||
const manifest = JSON.parse(fs.readFileSync(path.join(directory, 'manifest.json')))
|
||||
assert.equal(manifest.kind, 'generated-dash-media')
|
||||
assert.equal(manifest.duration, 12)
|
||||
assert.deepEqual(manifest.videoHeights, [90, 180])
|
||||
assert.deepEqual(manifest.audio, [{ lang: 'en', frequency: 440 }, { lang: 'fr', frequency: 880 }])
|
||||
assert.deepEqual(fs.readdirSync(directory).filter(name => name !== 'manifest.json').sort(), Object.keys(manifest.files).sort())
|
||||
for (const [name, expected] of Object.entries(manifest.files)) {
|
||||
assert(/^[\w.-]+$/.test(name))
|
||||
const bytes = fs.readFileSync(path.join(directory, name))
|
||||
assert.equal(hash(bytes), expected.sha256, name)
|
||||
assert.equal(bytes.length, expected.bytes, name)
|
||||
}
|
||||
const read = name => fs.readFileSync(path.join(directory, name), 'utf8')
|
||||
assert.equal([...read('master.mpd').matchAll(/contentType="audio"/g)].length, 2)
|
||||
assert.equal([...read('master.mpd').matchAll(/<Representation\b/g)].length, 4)
|
||||
assert.equal([...read('video-only.mpd').matchAll(/<Representation\b/g)].length, 2)
|
||||
assert(!read('video-only.mpd').includes('contentType="audio"'))
|
||||
assert.equal([...read('single.mpd').matchAll(/<Representation\b/g)].length, 1)
|
||||
assert(!read('single.mpd').includes('height="180"'))
|
||||
assert(manifest.commands[0].includes('init-$RepresentationID$.m4s'))
|
||||
assert(manifest.commands[0].includes('chunk-$RepresentationID$-$Number%05d$.m4s'))
|
||||
})
|
||||
+7
-2
@@ -2058,11 +2058,16 @@
|
||||
"PKG-DASH-04",
|
||||
"CORE-22"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "doing",
|
||||
"risk": "H",
|
||||
"deliverable": "固定 dash.js 4.5.2/5.2.1 与本地 DASH 实际清晰度/音轨、高亮、Auto 和换源组合",
|
||||
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
|
||||
"evidence": []
|
||||
"evidence": [
|
||||
"changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md",
|
||||
"baselines/dash-sdk.json",
|
||||
"baselines/dash-sdk-checkpoint.json",
|
||||
"dash-validation.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PKG-DASH-06",
|
||||
|
||||
@@ -1047,10 +1047,12 @@
|
||||
],
|
||||
"sourceFiles": [
|
||||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||||
"docs/assets/example/dash.control.js"
|
||||
"docs/assets/example/dash.control.js",
|
||||
"refactor/baselines/dash-sdk.json",
|
||||
"test/browser/dash-sdk.spec.js"
|
||||
],
|
||||
"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": "Source integration observed; complete real SDK/service/device matrix not yet verified.",
|
||||
"validationStatus": "Pinned real npm 4.5.2/5.2.1, generated MPD decoding, explicit update and source replacement now exercised. DASH-SEEK-01 remains open; Windows WebKit has no MSE. SDK declarations, automatic state refresh, full formats/devices/distribution remain incomplete.",
|
||||
"demoPathsSource": "refactor/baselines/demo-inventory.json"
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user