mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-20 04:01:20 -08:00
test(canvas): [PKG-CANVAS-05] checkpoint installed native picture-in-picture
This commit is contained in:
1 parent
c3967bcbf4
commit
37ebb7a034
21 files changed
+2552
-16
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,42 @@
|
||||
# PKG-CANVAS-05 Canvas + 原生 Document PiP 检查点
|
||||
|
||||
进行中。新增 canvas-dpip.spec.js 验证实际 requestWindow、Canvas/底层 video/字幕
|
||||
轨道跨文档归属、持续绘制与时间推进、暂停寻址字幕、插件关闭/原生关闭/销毁。
|
||||
使用真实本地媒体和 VTT,RAF 观察器转发原生调度,不替换 PiP API 或媒体状态。
|
||||
不支持的引擎只记录能力缺口,不计作原生窗口播放通过。
|
||||
|
||||
首轮为源码组合,18 项成功退出包含 Chromium/Firefox 12 项真实窗口播放与
|
||||
WebKit 6 项 API 不可用记录。初版明确拒绝安装 map,避免把源码 Document PiP
|
||||
混称为已安装包;报告保留在 canvas-dpip-source-report。
|
||||
|
||||
## 安装与 CI 范围扩展
|
||||
|
||||
package-check 通过已有 dpip-contract 核对发布文件,将 Document PiP 加入显式
|
||||
可选包注册表。现在五包经过源码快照、三格式构建、pack、仓库外离线安装和冻结
|
||||
重装,再校验全部文件摘要。core/chapter 的36运行时、5旧类型+8精确类型模式
|
||||
仍是原来的两包范围;不把它们当作 Document PiP 的完整消费者验收。
|
||||
|
||||
dpipCandidate 现在优先核验显式安装 map,缺文件/缺包/旧输入报错,不再回退到
|
||||
源码;冻结 workspace 与独立 ARTPLAYER_DPIP_ARTIFACT 覆盖也不能混用。这个
|
||||
错误已有旧红新绿:此前不存在的安装map被静默忽略,Node测试3通过1失败;
|
||||
修正后包/runner/CI检查共46通过,包含缺 Document PiP 安装步骤的工作流反例。
|
||||
|
||||
installed scope 和 CI 准备步骤增加第五包及 canvas-dpip.spec.js,仍保留完整
|
||||
source suite、不吞失败、两份独立报告及原消费者执行顺序。main/legacy 的实际
|
||||
浏览器结果与输入摘要见[证据](../baselines/canvas-dpip-validation.json):每种格式
|
||||
均为51项成功退出,其中12项原生PiP、6项API不可用、33项Canvas字幕/生命周期与
|
||||
Ambilight组合。原生窗口覆盖六种 core/ending 组合各在 Chromium/Firefox 执行,
|
||||
不把 WebKit 的能力分支计为原生播放。这里不代表远端 CI 已运行。
|
||||
严格工具 TS、专项/根 lint(0错误/1既有warning)、actionlint 和固定工具链通过。
|
||||
未新增依赖,也没有更改浏览器重试、超时或媒体断言;新测试初版样式诊断已修复。
|
||||
|
||||
## 维护与限制
|
||||
|
||||
Canvas、Document PiP 的架构说明和测试/CI入口已同步。本次没有生产运行时修改,
|
||||
不修改已有全局源码/安装性能门槛。重跑时先提供含五包的安装map,再运行 README
|
||||
所列命令;source 对照仍独立存在。报告中的 API 不可用分支不是设备支持通过。
|
||||
|
||||
PKG-CANVAS-05 仍 doing:实际Safari/移动设备、后台节流和完整生态组合没有闭环。
|
||||
DPIP-05/06、Canvas-06 及全量远端 CI/发布任务仍开放。作为本任务检查点单独本地
|
||||
提交,提交审计通过后接续;没有推送、部署或npm发布。回退需一并还原五包CI配置、
|
||||
加载器、测试与文档,不能只删除安装准备步骤而保留依赖它的新scope。
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
浏览器CI现在分别执行 `yarn test:browser:source` 和
|
||||
`yarn test:browser:installed`。前者清除继承的安装map并保留全部spec;后者要求已
|
||||
核验的core/chapter/Ambilight/Canvas安装,执行明确列出的installed子集。两步不
|
||||
核验的core/chapter/Ambilight/Canvas/Document PiP安装,执行明确列出的installed子集。两步不
|
||||
吞失败,普通失败后仍保存另一范围的证据,分别上传browser-source/browser-installed。
|
||||
入口与报告规则见[维护说明](../scripts/browser-validation/README.md)。source全量
|
||||
耗时/60分钟预算、其余插件安装矩阵与远端运行仍待CI-01/CI-04,不计为已通过。
|
||||
|
||||
+3
-2
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 259 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 50 / doing 19 / blocked 0 / done 190 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 49 / doing 20 / blocked 0 / done 190 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
| PKG-CANVAS-02 | artplayer-proxy-canvas<br>建立特有行为与错误测试 | PKG-CANVAS-01, ENG-03, ENG-05 | ready/loadeddata/canplay、play/seek、回调、resize 与销毁 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done |
|
||||
| PKG-CANVAS-03 | artplayer-proxy-canvas<br>整理内部职责与资源 | PKG-CANVAS-02, CORE-06, CORE-11, CORE-16 | video adapter/原 canvas 方法/RAF 绘制/事件订阅分离 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | done |
|
||||
| PKG-CANVAS-04 | artplayer-proxy-canvas<br>迁移自有源码和公开类型 | PKG-CANVAS-03, ENG-04, ENG-06, CORE-07 | canvas 与媒体能力的精确组合类型,保持 Result | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | done |
|
||||
| PKG-CANVAS-05 | artplayer-proxy-canvas<br>验证新旧核心和组合 | PKG-CANVAS-04, CORE-22, PKG-DPIP-04, PKG-FACTORY-01, PKG-CANVAS-SUBTITLE-01 | 真实 video/canvas 绘制、字幕和 document PiP 恢复 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo |
|
||||
| PKG-CANVAS-05 | artplayer-proxy-canvas<br>验证新旧核心和组合 | PKG-CANVAS-04, CORE-22, PKG-DPIP-04, PKG-FACTORY-01, PKG-CANVAS-SUBTITLE-01 | 真实 video/canvas 绘制、字幕和 document PiP 恢复 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | doing |
|
||||
| PKG-CANVAS-06 | artplayer-proxy-canvas<br>验证分发并同步文档 | PKG-CANVAS-05, ENG-07 | canvas.js、三种产物、调用兼容与资源证据 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo |
|
||||
| PKG-CANVAS-SUBTITLE-01 | artplayer-proxy-canvas<br>修复 Canvas 代理原生字幕轨道挂载 | PKG-CANVAS-04 | 初始字幕能力、原生轨道挂载与资源生命周期适配及新旧核心回归 | 复现旧字幕 cues 为空;新旧核心加载、寻址、切换、销毁通过;普通 Canvas 节点行为和分发入口保持兼容 | M | done |
|
||||
|
||||
@@ -611,6 +611,7 @@
|
||||
- PKG-CANVAS-02: [记录](changes/2026-09-12-PKG-CANVAS-02-tests.md) [记录](baselines/canvas-behavior-validation.json) [记录](canvas-validation.md)
|
||||
- PKG-CANVAS-03: [记录](changes/2026-09-12-PKG-CANVAS-03-lifecycle.md) [记录](baselines/canvas-lifecycle-validation.json) [记录](canvas-validation.md)
|
||||
- PKG-CANVAS-04: [记录](changes/2026-09-12-PKG-CANVAS-04-types.md) [记录](baselines/canvas-types-validation.json) [记录](canvas-validation.md)
|
||||
- PKG-CANVAS-05: [记录](changes/2026-09-14-PKG-CANVAS-05-native-pip.md) [记录](baselines/canvas-dpip-validation.json) [记录](baselines/canvas-subtitles-validation.json) [记录](baselines/ambilight-installed-validation.json)
|
||||
- PKG-MB-01: [记录](baselines/mb-release.json) [记录](baselines/mb-surface.json) [记录](baselines/mb-contract.md) [记录](baselines/mb-contract-validation.json) [记录](mb-validation.md) [记录](changes/2026-09-12-PKG-MB-01-contract.md)
|
||||
- PKG-MB-02: [记录](changes/2026-09-12-PKG-MB-02-checkpoint.md) [记录](baselines/mb-media-checkpoint.json) [记录](mb-validation.md) [记录](changes/2026-09-12-PKG-MB-02-baseline.md) [记录](baselines/mb-behavior-validation.json)
|
||||
- PKG-MB-03: [记录](changes/2026-09-12-PKG-MB-03-input.md) [记录](baselines/mb-input-validation.json)
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# 进度与证据
|
||||
|
||||
## PKG-CANVAS-05 原生 PiP 与五包安装检查点(仍 doing)
|
||||
|
||||
源码首轮18项:Chromium/Firefox实际原生窗口12通过,WebKit仅6项API不可用记录。
|
||||
Canvas、底层video与track一起移入窗口,播放/绘制继续,暂停seek字幕正确;插件
|
||||
关闭、原生关闭和销毁均恢复/释放节点、窗口、占位与RAF。不是iframe模拟。
|
||||
进一步把Document PiP加入已核验安装包注册与CI:五包离线安装/冻结重装和指纹检查
|
||||
通过,main/legacy各51项成功退出(各12原生PiP+6不可用+33其他组合)。
|
||||
修复dpip加载器忽略安装map回退源码的问题:旧Node测试3通过1失败,修正后工程/
|
||||
工作流46通过;DPIP-INSTALLED-PROVENANCE-01按该证据关闭。缺map/缺包/陈旧输入及
|
||||
冲突覆盖均不允许源码替代。严格工具TS、lint(1既有warning)、actionlint/工具链通过。
|
||||
见[检查点](changes/2026-09-14-PKG-CANVAS-05-native-pip.md)和
|
||||
[证据](baselines/canvas-dpip-validation.json)。259项:190 done、20 doing、49 todo。
|
||||
Canvas真机/后台节流、DPIP完整消费者/设备、完整远端CI和发布仍开放;没有生产
|
||||
运行时修改、依赖新增、push、部署或发布。该检查点独立提交后审计再继续下一步。
|
||||
|
||||
## PKG-CANVAS-SUBTITLE-01 原生字幕轨道修复完成
|
||||
|
||||
新旧核心三引擎复现 Canvas 字幕为空。先前说明需修正:初始失败中的 $track
|
||||
|
||||
@@ -273,3 +273,4 @@
|
||||
| VCONSOLE-LIFECYCLE-01 | resolved / 已复现 | vConsole delayed log, panel and scroller work outlives its owner | SITE-07, SITE-05, SITE-VCONSOLE-01 |
|
||||
| CHAPTER-FULLSCREEN-GEOMETRY-01 | resolved / 已复现 | Chromium 原生全屏后章节 hover 标题曾出现后又隐藏 | PKG-CHAPTER-05, PKG-CHAPTER-HOVER-01 |
|
||||
| CANVAS-SUBTITLE-01 | resolved / 已复现 | Canvas底层video缺初始字幕轨道且普通Canvas挂载不能加载原生字幕 | PKG-CANVAS-SUBTITLE-01, PKG-CANVAS-05 |
|
||||
| DPIP-INSTALLED-PROVENANCE-01 | resolved / 已复现 | Document PiP测试加载器忽略显式安装map并回退到源码 | PKG-CANVAS-05, CI-01 |
|
||||
@@ -6241,6 +6241,30 @@
|
||||
"test/browser/canvas-subtitles.spec.js"
|
||||
],
|
||||
"resolutionRationale": "Initial candidate and routing-only controls each fail all six subtitle cases. Bootstrap + insertion adaptation passes; npm 1.1.0 independently fails all six. Expanded native source tests pass 24; installed main and legacy pass 33 each; final six pass after adding baseline selection. Captions also visibly render in the local demo. This fixes subtitle capability/insertion only; broader Canvas integration remains open."
|
||||
},
|
||||
{
|
||||
"id": "DPIP-INSTALLED-PROVENANCE-01",
|
||||
"title": "Document PiP测试加载器忽略显式安装map并回退到源码",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CANVAS-05",
|
||||
"CI-01"
|
||||
],
|
||||
"evidence": [
|
||||
"test/package-check.test.js",
|
||||
"refactor/baselines/canvas-dpip-validation.json"
|
||||
],
|
||||
"compatibleResolution": "使用已安装文件及source/build指纹,缺输入拒绝执行;保留独立source模式。",
|
||||
"closureCriteria": "缺安装map旧红新绿,实际五包main/legacy原生组合与工作流配置验证。",
|
||||
"workspaceState": "Explicit map takes precedence; DPIP frozen/artifact overrides conflict instead of overriding installed provenance. Current CI prepares five packages before browser scopes.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-14-PKG-CANVAS-05-native-pip.md",
|
||||
"refactor/baselines/canvas-dpip-validation.json",
|
||||
"test/helpers/dpip.js",
|
||||
"refactor/scripts/ci-workflow.test.mjs"
|
||||
],
|
||||
"resolutionRationale": "Old loader test reports missing expected rejection; updated loader rejects missing/stale maps and conflicting modes. Five-package isolated build/pack/install supplies main and legacy native PiP tests with package hashes. Local workflow mutation protects the required DPIP preparation; remote runs remain unverified."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -90,10 +90,10 @@ export function validateCIWorkflow(source) {
|
||||
const vueIndex = browser.steps.findIndex(step => step.run === 'yarn test:vue-consumer 2>&1 | tee refactor/.cache/ci/vue-consumer.log')
|
||||
assert(vueIndex > consumerIndex && !Object.hasOwn(browser.steps[vueIndex], 'if'), 'Run Vue installed consumers after restoring canonical Node')
|
||||
assert(browser.steps.some(step => step.uses?.startsWith('actions/upload-artifact@') && step.if === 'always()' && step.with.path.split('\n').includes('refactor/.cache/vue-consumer-*/')), 'Retain Vue consumer failure evidence')
|
||||
const extraIndex = browser.steps.findIndex(step => step.run?.startsWith('yarn test:package --include=artplayer-plugin-ambilight,artplayer-proxy-canvas '))
|
||||
const extraIndex = browser.steps.findIndex(step => step.run?.startsWith('yarn test:package --include=artplayer-plugin-ambilight,artplayer-proxy-canvas,artplayer-plugin-document-pip '))
|
||||
const sourceEngineIndex = browser.steps.findIndex(step => step.run === 'yarn test:browser:source 2>&1 | tee refactor/.cache/ci/browser-source.log')
|
||||
const engineIndex = browser.steps.findIndex(step => step.run === 'yarn test:browser:installed 2>&1 | tee refactor/.cache/ci/browser-installed.log')
|
||||
assert(extraIndex > Math.max(consumerIndex, reactIndex, vueIndex) && extraIndex < engineIndex, 'Prepare installed Ambilight/Canvas after consumer probes and before browser checks')
|
||||
assert(extraIndex > Math.max(consumerIndex, reactIndex, vueIndex) && extraIndex < engineIndex, 'Prepare installed Ambilight/Canvas/Document PiP after consumer probes and before browser checks')
|
||||
assert(!Object.hasOwn(browser.steps[extraIndex], 'if') && browser.steps[extraIndex].run.includes('GITHUB_ENV') && browser.steps[extraIndex].run.includes('ARTPLAYER_BROWSER_ARTIFACTS='), 'Always select the additional installed browser artifact map')
|
||||
assert(sourceEngineIndex > extraIndex && sourceEngineIndex < engineIndex, 'Retain complete source checks before the additional installed suite')
|
||||
for (const index of [sourceEngineIndex, engineIndex]) {
|
||||
|
||||
@@ -34,6 +34,10 @@ for (const [name, mutate] of [
|
||||
['wrong consumer Node version', w => w.jobs['browser-smoke'].steps.find(s => s.id === 'consumer-node-20').with['node-version'] = '24'],
|
||||
['skipped installed consumer', w => w.jobs['browser-smoke'].steps.find(s => s.run?.includes('--expected-node 22.12.0')).if = 'false'],
|
||||
['missing browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include=')).run = 'echo omitted'],
|
||||
['missing Document PiP browser installation', (w) => {
|
||||
const step = w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include='))
|
||||
step.run = step.run.replace(',artplayer-plugin-document-pip', '')
|
||||
}],
|
||||
['skipped browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include=')).if = 'false'],
|
||||
['missing source browser checks', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:source ')).run = 'echo omitted'],
|
||||
['filtered source browser checks', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:source ')).run += ' --grep subset'],
|
||||
|
||||
+7
-2
@@ -3638,11 +3638,16 @@
|
||||
"PKG-FACTORY-01",
|
||||
"PKG-CANVAS-SUBTITLE-01"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "doing",
|
||||
"risk": "H",
|
||||
"deliverable": "真实 video/canvas 绘制、字幕和 document PiP 恢复",
|
||||
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
|
||||
"evidence": []
|
||||
"evidence": [
|
||||
"changes/2026-09-14-PKG-CANVAS-05-native-pip.md",
|
||||
"baselines/canvas-dpip-validation.json",
|
||||
"baselines/canvas-subtitles-validation.json",
|
||||
"baselines/ambilight-installed-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PKG-CANVAS-06",
|
||||
|
||||
Reference in new issue
Block a user