mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-25 16:11:20 -08:00
fix(audio): [PKG-AUDIO-05] checkpoint zero-time resume and native buffering evidence
This commit is contained in:
1 parent
0218196df9
commit
d18c545675
25 files changed
+14373
-32
No files matched your search
@@ -82,3 +82,45 @@ legacy 首次 WebKit 的“候选核心 + 已发布 audio”结束观察失败
|
||||
两种结束用例现统一先确认视频/音频 seek 完成且就绪,再确认音频实际恢复推进后才
|
||||
观测 video.ended,并记录宿主事件;避免原测试因音频早已暂停而误判。相关 WebKit
|
||||
12 次及最终 main/legacy 各 42 项通过。未证明首次暂停的确切来源,未改生产代码。
|
||||
|
||||
## PKG-AUDIO-05 恢复播放修复与缓冲检查点
|
||||
|
||||
CORE-24 后,旧核心与候选 audio 的 WebKit 快速切源仍可复现音频暂停。补充宿主日志
|
||||
后确认 video:seeked 时 video.currentTime=0、paused=false、readyState=4,而 art.playing=false。
|
||||
原核心 playing 要求时间大于 0,候选的 seeking 暂停后错过恢复。先前猜测 readyState=2
|
||||
并非这次日志的根因。index.ts 现在优先尊重 proxy 的显式 playing 布尔值,原生媒体额外
|
||||
接受未暂停、未结束且 readyState>2 的时间零状态;canplay 为 seeked 早于就绪提供守卫恢复。
|
||||
公开类型、默认值、偏移算法、update 的同步/真值语义和 audio 元素身份均未改变。
|
||||
|
||||
受控用例先红后绿,三种实际 JS 产物共 97 项通过;完整 CI 599 项(550+14+35)通过。
|
||||
快速切源 WebKit 修复前四次 3 通过/1 失败,修复后四次全部通过;完整媒体和组合测试
|
||||
还覆盖两种核心与两种插件。最终报告在本阶段冻结证据中登记,不能把四次专项当成全矩阵。
|
||||
|
||||
偏移边界使用相同 AAC 的独立原生 Audio 对照。首轮 legacy 的唯一失败来自原生对照
|
||||
负 seek 后返回 0.01,而断言严格为 0;已保存报告。起点和时长边界现在都要求原生值
|
||||
接近边界、插件接近同场原生值(差值小于 0.05 秒)、非负起点、无媒体错误,并验证
|
||||
回到区间内 2.5 秒及实际恢复播放。不是只将候选结果与宽泛常量比较。
|
||||
|
||||
### 真实缓冲与原生能力限制
|
||||
|
||||
media-gate.js 用 loopback HTTP 提供固定媒体,先发前缀并扣住尾部,release 后发送原字节。
|
||||
三项真实 HTTP 测试覆盖流式正文、完成的部分 Range、HEAD/416/suffix 与强 ETag。
|
||||
该文件已加入 test:node,无新增依赖。集成测试要求实际推进后原生 isTrusted waiting,
|
||||
同时检查视频缓冲暂停外部音频、音频缓冲不暂停视频,以及恢复后的时钟和同步。
|
||||
|
||||
初轮默认流式 24 项为 Chromium/Firefox 16 通过、Windows WebKit 8 失败;改为完整
|
||||
部分 Range 的 WebKit 8 项仍失败。保留两次失败,未提高超时、重试或跳过。失败时
|
||||
清理后的空 src/error=4 不能用来判断缓冲失败根因;请求附件现在在页面清理前写入。
|
||||
最终同一流式夹具与实际 main/legacy 在 Chromium/Firefox 各 16 项通过;这是限定引擎
|
||||
的补充证据,保留先前 Windows WebKit 失败,不代表三引擎完整缓冲验收。
|
||||
|
||||
独立 media-gate-native.spec.js 确认没有 ArtPlayer 实例,测试两种响应模式。最初使用
|
||||
原生默认 preload,Firefox 也无法在放行前推进;与实际插件对齐为 preload=auto 后,
|
||||
Chromium/Firefox 的八种组合都观测到推进与可信 waiting,Windows WebKit 四种组合
|
||||
仍停在约 0、readyState=3/4、paused=false、无错误且没有可信 waiting。全部在放行后
|
||||
推进。12 个诊断通过只证明观察和放行后恢复,不等于 12 个真实缓冲验收通过。
|
||||
|
||||
此证据限定当前 Windows WebKit、固定 MP4/AAC 和两种 HTTP 响应,不能推断真实 Safari
|
||||
不支持缓冲;更不能为候选忽略 failing 用例。AUDIO-BUFFER-01 保持 open,Audio-05
|
||||
仍 doing;需要其他可实际执行的原生环境/输入路径补齐。当前没有已安装 WSL 发行版或
|
||||
可用 Docker 命令。物理设备、声音输出、自动播放策略和 Audio-06 的安装/demo 仍未验收。
|
||||
File diff suppressed because it is too large.
Load diff
@@ -22,3 +22,47 @@ Audio-04 的模块边界及旧类型入口不变;发现问题先比较已发
|
||||
共用输入/事件/清理辅助移入 audio-fixture.js,通过显式 useAudioFixture() 为每个测试
|
||||
文件注册各自 hooks,避免 import 缓存让后一个 suite 缺输入。原有媒体用例也会重跑。
|
||||
本阶段只提交明确标注 checkpoint 的测试与发现,未提交生产修复,也未完成 Audio-05。
|
||||
|
||||
## CORE-24 后恢复实施
|
||||
|
||||
0218196d 已核实,工作区干净。六项候选核心切源回归已由 CORE-24 修复并重跑原断言。
|
||||
Audio-05 恢复 doing;继续旧核心 WebKit 的音频恢复、边界原生对照和真实网络缓冲。
|
||||
|
||||
## 第二个检查点:已修复时间零恢复,保留缓冲缺口
|
||||
|
||||
本次有生产修复,仍不是 Audio-05 完成提交。index.ts 的 resume 判断优先采用 proxy
|
||||
显式 playing 布尔值;原生媒体在时间零、未暂停/未结束且 readyState>2 时也可恢复。
|
||||
canplay 只对暂停音频且宿主可播放的状态补恢复,监听仍由当前实例统一解绑。模块职责、
|
||||
public 类型、update 同步返回、默认 offset/sync、音频身份和 URL 真值语义不变。
|
||||
|
||||
修复前日志精确显示 video:playing/seeking/seeked 的时间为 0、readyState=4、paused=false,
|
||||
而 art.playing=false。不是先前猜测的 readyState=2。先加受控失败用例,修复后源/历史
|
||||
共 46 项、三格式产物共 97 项通过。主/legacy 实际构建分别 78 项浏览器测试通过,无重试
|
||||
或跳过;每组含 36 新旧组合、原 42 媒体项,其中 9 项历史缺陷观察和 3 项 WAV 原生诊断。
|
||||
完整 CI 599 项通过(550 单元、14 工程、35 基线);声明校验和严格类型通过。
|
||||
保留生成声明的一条既有 ESLint warning,没有新 lint error。
|
||||
|
||||
负偏移和超过时长现在与同文件独立原生 Audio 比较。main 首轮 78 通过;legacy 首轮
|
||||
77 通过/1 失败,失败是原生负 seek 的实际 0.01 与严格 0 不等。记录此证据后,对两端
|
||||
统一使用小于 0.05 秒的原生边界/候选差值断言,同时检查起点非负、无错误及区间内恢复。
|
||||
最终 main/legacy 重新执行各 78 项通过。负/超时长的状态在断言之前保存,方便后续诊断。
|
||||
|
||||
新增 loopback media-gate 及三项真实 HTTP 测试,已纳入 test:node,没有新依赖。
|
||||
真实缓冲测试保留完整四种新旧组合和三个引擎的要求,初轮 Chromium/Firefox 16 通过、
|
||||
Windows WebKit 8 失败。换为有强 ETag 的完整部分 Range 响应后 WebKit 8 项仍失败;
|
||||
没有删掉失败用例。原生 preload=auto 对照两种响应形状,证明 Chromium/Firefox 可以推进
|
||||
后 waiting,Windows WebKit 此输入则没有推进到缓冲;12 项诊断通过仅证明观测与放行后恢复。
|
||||
最初原生默认 preload 导致 Firefox 也不推进,已对齐插件属性,保留前后两个报告。
|
||||
此独立原生观察不证明真实 Safari 不支持,也不替代插件实际缓冲验收。
|
||||
最终流式夹具对实际 main/legacy 在 Chromium/Firefox 分别执行 16 项,均通过;这是明确
|
||||
限定引擎的补充验证,不能覆盖之前保留的 Windows WebKit 失败。
|
||||
|
||||
证据和报告指纹见 [本次冻结记录](../baselines/audio-combinations-checkpoint.json)。所有首轮失败
|
||||
报告/trace 按独立路径保留。原始报告中的附件仍写共用路径,读取时使用记录的复制结果目录;
|
||||
cache 不入 Git,丢失后应按命令重跑,不能声称旧 trace 永久可用。
|
||||
|
||||
AUDIO-RESUME-01 按具体切源恢复范围关闭;AUDIO-SYNC-01 与新增 AUDIO-BUFFER-01
|
||||
保持 open,任务仍为 doing。下一步需要有效原生环境补齐缓冲,并继续策略/设备要求;
|
||||
Audio-06 的 tarball/8082 demo 仍待验收。其他独立包可继续,不能将该缺口升级成全局阻塞。
|
||||
本检查点未更改包版本、推送、打 tag 或发布。回退整个本次提交可恢复 CORE-24 后的
|
||||
候选音频行为;已确认的时间零恢复问题会随生产修复回退而重新出现。
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 217 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 146 / doing 1 / blocked 0 / done 70 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 145 / doing 2 / blocked 0 / done 70 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
| PKG-AUDIO-02 | artplayer-plugin-audio-track<br>建立特有行为与错误测试 | PKG-AUDIO-01, ENG-03, ENG-05 | 偏移、倍率、seek、waiting/playing、加载错误和 autoplay 拒绝 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done |
|
||||
| PKG-AUDIO-03 | artplayer-plugin-audio-track<br>整理内部职责与资源 | PKG-AUDIO-02, CORE-10 | 外部 audio 的同步策略、监听与源更新生命周期 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | done |
|
||||
| PKG-AUDIO-04 | artplayer-plugin-audio-track<br>迁移自有源码和公开类型 | PKG-AUDIO-03, ENG-04, ENG-06, CORE-07 | Option/Result/audio、update 输入和事件类型 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | done |
|
||||
| PKG-AUDIO-05 | artplayer-plugin-audio-track<br>验证新旧核心和组合 | PKG-AUDIO-04, CORE-22, CORE-24 | 主视频切源和缓冲恢复,多实例独立音频、旧核心 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo |
|
||||
| PKG-AUDIO-05 | artplayer-plugin-audio-track<br>验证新旧核心和组合 | PKG-AUDIO-04, CORE-22, CORE-24 | 主视频切源和缓冲恢复,多实例独立音频、旧核心 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | doing |
|
||||
| PKG-AUDIO-06 | artplayer-plugin-audio-track<br>验证分发并同步文档 | PKG-AUDIO-05, ENG-07 | audio.track.js 示例与运行返回值一致的声明 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo |
|
||||
|
||||
## 5 包迁移:artplayer-plugin-auto-thumbnail
|
||||
@@ -472,7 +472,7 @@
|
||||
- PKG-AUDIO-02: [记录](changes/2026-09-12-PKG-AUDIO-02-tests.md) [记录](audio-validation.md) [记录](baselines/audio-validation.json)
|
||||
- PKG-AUDIO-03: [记录](changes/2026-09-12-PKG-AUDIO-03-lifecycle.md) [记录](baselines/audio-lifecycle-validation.json)
|
||||
- PKG-AUDIO-04: [记录](changes/2026-09-12-PKG-AUDIO-04-types.md) [记录](baselines/audio-types-validation.json)
|
||||
- PKG-AUDIO-05: [记录](changes/2026-09-12-PKG-AUDIO-05-combinations.md) [记录](baselines/audio-combinations-first.json)
|
||||
- PKG-AUDIO-05: [记录](changes/2026-09-12-PKG-AUDIO-05-combinations.md) [记录](baselines/audio-combinations-first.json) [记录](baselines/audio-combinations-checkpoint.json) [记录](audio-validation.md)
|
||||
- PKG-HLS-01: [记录](baselines/hls-control-contract.md) [记录](baselines/hls-control-release.json) [记录](changes/2026-09-11-PKG-HLS-01-contract.md)
|
||||
- PKG-HLS-02: [记录](hls-validation.md) [记录](baselines/hls-sdk.json) [记录](baselines/hls-validation.json) [记录](changes/2026-09-11-PKG-HLS-02-tests.md)
|
||||
- PKG-HLS-03: [记录](changes/2026-09-12-PKG-HLS-03-modules.md) [记录](baselines/hls-modules-validation.json) [记录](hls-validation.md)
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# 进度与证据
|
||||
|
||||
## 当前实施:Audio-05 恢复修复与真实缓冲检查点
|
||||
|
||||
已修复旧核心时间零 seek 后候选音频漏恢复,严格 TS 与公开接口不变;三格式 Node 97 项、
|
||||
完整 CI 599 项、main/legacy 三引擎媒体和新旧组合各 78 项通过。首次 legacy 原生负 seek
|
||||
返回 0.01 导致的严格零断言失败已保留,补充边界对照后完整重跑。不是发布或全包验收。
|
||||
|
||||
独立原生媒体 preload=auto 对照已确认 Chromium/Firefox 可推进后真实 waiting,Windows
|
||||
WebKit 在两种受限响应下未推进到缓冲,放行后可播放。AUDIO-RESUME-01 关闭,
|
||||
AUDIO-BUFFER-01 与 AUDIO-SYNC-01 保持 open;没有跳过集成失败或将原生诊断当作通过。
|
||||
|
||||
当前 217 项:70 done、2 doing、145 todo。Audio-05 和 HLS-SDK-01 尚未完成。
|
||||
本批为本地 checkpoint,源码、测试、包内架构与证据一同提交。其余包继续按依赖推进;
|
||||
分发、设备、完整 CI/CD、各包大版本升级和三轮发布复盘仍待完成,未推送或发布。
|
||||
见 [本次变更](changes/2026-09-12-PKG-AUDIO-05-combinations.md) 和
|
||||
[冻结证据](baselines/audio-combinations-checkpoint.json)。以下是各阶段当时的历史状态。
|
||||
|
||||
## 最新完成:CORE-24 连续切源播放意图修复
|
||||
|
||||
Audio-05 检查点已提交 b5e96664,原六项候选核心回归保持原断言重跑全部通过。
|
||||
|
||||
@@ -131,4 +131,5 @@
|
||||
| AUDIO-TYPE-01 | accepted-with-scope / 源码/产物事实 | Audio Track update 部分配置与公开/编辑器声明不一致 | PKG-AUDIO-04 |
|
||||
| AUDIO-DEMO-01 | open / 源码/产物事实 | Audio Track README 示例链接名称不匹配且缺维护说明 | PKG-AUDIO-06 |
|
||||
| CORE-SOURCE-01 | resolved / 已复现 | 候选核心连续切源丢失原播放意图 | CORE-24 |
|
||||
| AUDIO-RESUME-01 | open / 已复现 | WebKit 旧核心切源后候选音频保持暂停 | PKG-AUDIO-05 |
|
||||
| AUDIO-RESUME-01 | resolved / 已复现 | WebKit 旧核心切源后候选音频保持暂停 | PKG-AUDIO-05 |
|
||||
| AUDIO-BUFFER-01 | open / 已复现 | Windows WebKit 原生媒体无法在受限响应下推进至真实缓冲 | PKG-AUDIO-05 |
|
||||
+34
-5
@@ -2686,9 +2686,10 @@
|
||||
"test/audio-track.test.js",
|
||||
"test/browser/audio-track.spec.js",
|
||||
"refactor/baselines/audio-validation.json",
|
||||
"refactor/baselines/audio-lifecycle-validation.json"
|
||||
"refactor/baselines/audio-lifecycle-validation.json",
|
||||
"refactor/baselines/audio-combinations-checkpoint.json"
|
||||
],
|
||||
"compatibleResolution": "PKG-AUDIO-03 已修复原生暂停/结束与直接 seek 同步;严格阈值、偏移正负、倍率/音量不变。PKG-AUDIO-05 继续负目标/超时长、真实缓冲和连续切源的完整验证,条目仍 open。",
|
||||
"compatibleResolution": "03 已修复原生暂停/结束;05 的连续切源和偏移原生对照已验证,真实缓冲 Chromium/Firefox 初轮通过但 Windows WebKit 保留 AUDIO-BUFFER-01;策略/设备缺口继续 open。",
|
||||
"closureCriteria": "正常/边界/失败/缓冲恢复有媒体与受控断言,实际支持环境缺口明确处理。"
|
||||
},
|
||||
{
|
||||
@@ -2753,15 +2754,43 @@
|
||||
"id": "AUDIO-RESUME-01",
|
||||
"title": "WebKit 旧核心切源后候选音频保持暂停",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-AUDIO-05"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/baselines/audio-combinations-first.json",
|
||||
"test/audio-track.test.js",
|
||||
"test/browser/audio-combinations.spec.js",
|
||||
"refactor/baselines/audio-combinations-checkpoint.json"
|
||||
],
|
||||
"compatibleResolution": "原生时间零且未暂停、未结束、readyState>2 时允许恢复;显式 proxy playing 布尔值优先。canplay 仅恢复暂停且宿主可播放的 audio,保持公开接口与同步算法。",
|
||||
"closureCriteria": "保留原始失败,精确事件复现并有旧核心/新核心三引擎回归;不可仅重复到绿灯。",
|
||||
"resolutionEvidence": [
|
||||
"refactor/baselines/audio-combinations-checkpoint.json",
|
||||
"refactor/changes/2026-09-12-PKG-AUDIO-05-combinations.md",
|
||||
"packages/artplayer-plugin-audio-track/ARCHITECTURE.md"
|
||||
],
|
||||
"resolutionRationale": "失败日志确认 seeked 时间零、readyState=4、paused=false 而 art.playing=false。受控用例先红后绿,实际三格式 97 项通过;main/legacy 每组 78 项含三引擎旧/新核心组合通过。仅关闭此具体恢复缺陷,真实缓冲、策略与设备范围保持开放。"
|
||||
},
|
||||
{
|
||||
"id": "AUDIO-BUFFER-01",
|
||||
"title": "Windows WebKit 原生媒体无法在受限响应下推进至真实缓冲",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-AUDIO-05"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/baselines/audio-combinations-first.json"
|
||||
"test/browser/audio-buffering.spec.js",
|
||||
"test/browser/media-gate-native.spec.js",
|
||||
"test/helpers/media-gate.js",
|
||||
"test/media-gate.test.js",
|
||||
"refactor/baselines/audio-combinations-checkpoint.json",
|
||||
"refactor/audio-validation.md"
|
||||
],
|
||||
"compatibleResolution": "先核实 seeked/canplay 和宿主 playing 的事件顺序;修复真实可播放后音频缺少恢复入口,保持旧核心支持。",
|
||||
"closureCriteria": "保留原始失败,精确事件复现并有旧核心/新核心三引擎回归;不可仅重复到绿灯。"
|
||||
"compatibleResolution": "保留真实 waiting 断言;使用独立原生对照和其他实际支持环境/输入继续验证,不将没有播放推进的诊断当成缓冲通过,也不凭此改变插件 API 或否定真实 Safari 支持。",
|
||||
"closureCriteria": "受影响的缓冲/恢复得到真实媒体证据;与原生能力和测试夹具差异分开,发布环境的剩余范围经显式处理。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+4
-2
@@ -1575,13 +1575,15 @@
|
||||
"CORE-22",
|
||||
"CORE-24"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "doing",
|
||||
"risk": "H",
|
||||
"deliverable": "主视频切源和缓冲恢复,多实例独立音频、旧核心",
|
||||
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
|
||||
"evidence": [
|
||||
"changes/2026-09-12-PKG-AUDIO-05-combinations.md",
|
||||
"baselines/audio-combinations-first.json"
|
||||
"baselines/audio-combinations-first.json",
|
||||
"baselines/audio-combinations-checkpoint.json",
|
||||
"audio-validation.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user