mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 03:27:43 -08:00
150 lines
11 KiB
Markdown
150 lines
11 KiB
Markdown
# Audio Track 行为与媒体测试
|
||
|
||
## PKG-AUDIO-BUFFER-01:断流测试的等待顺序
|
||
|
||
`audio-buffering.spec.js`不再先等待switchUrl完成才检查/放行网络,改为记录其
|
||
pending/fulfilled/rejected状态,放行后明确要求成功。新增完整MP4元数据但扣住
|
||
全部编码帧的回归:旧等待方式20秒超时,修正后的新旧核心/插件三浏览器12项通过。
|
||
仅1字节的初版夹具曾触发Firefox媒体错误,失败保留;最终按ftyp/moov结构发出
|
||
1605字节。此回归验证测试可继续放行网络,不代替真实缓冲断言。
|
||
原断流矩阵仍16通过、Windows WebKit8失败,全部到达native-starvation阶段,
|
||
没有放宽trusted waiting、双时钟恢复或同步检查。详见[记录](changes/2026-09-16-PKG-AUDIO-BUFFER-01-order.md)
|
||
与[证据](baselines/audio-buffer-order-validation.json)。Audio-05和AUDIO-BUFFER-01继续开放。
|
||
|
||
## PKG-AUDIO-03 候选修复
|
||
|
||
音频状态已从核心事件接入拆出,源码 44 项、加入三种产物共 89 项 Node 通过。
|
||
正式 main/legacy 各三引擎 42 项通过(均含原有 9 缺陷观察/3 原生诊断);CI 583 项通过。
|
||
原生暂停/结束/直接 seek、无错误媒体清理和销毁后 update 已有候选回归。
|
||
source 标签可由 ARTPLAYER_AUDIO_ARTIFACT 显式选择实际 main/legacy 文件;未设置时仍编译源码。
|
||
ARTPLAYER_TEST_AUDIO 接受平台分隔的三个 Node 产物路径,候选生命周期用例也逐格式执行。
|
||
具体输入、初轮六个错误 currentSrc 断言及最终证据见
|
||
[生命周期记录](baselines/audio-lifecycle-validation.json)。AUDIO-LIFE-01 按守卫/空 src 范围关闭,
|
||
AUDIO-SYNC-01 的边界/完整缓冲及设备验证继续 open。下面保留 02 当时的基线结果与问题描述。
|
||
|
||
PKG-AUDIO-02;公开来源见 [1.1.0 契约](baselines/audio-track-contract.md),
|
||
固定执行结果及失败保留见 [验证记录](baselines/audio-validation.json)。
|
||
|
||
## 已实现命令
|
||
|
||
```sh
|
||
node --test test/audio-track.test.js
|
||
yarn ci:check
|
||
yarn test:browser test/browser/audio-track.spec.js --trace on
|
||
```
|
||
|
||
Node 专项 38 项:源码和真实发布 main/legacy/module,初始化/延迟安装、暴露 audio、
|
||
严格阈值、正负偏移、seek/播放前同步、playing 条件、waiting/pause、音量/静音/倍率、
|
||
同/空/新 URL、三处 play 拒绝、销毁和多实例隔离。Audio 是记录调用的受控对象,不模拟解码。
|
||
工厂输入跨 realm 检查使用冻结归档,源码使用既有 JS/TS loader,可随迁移继续回归。
|
||
|
||
真实浏览器最终 36 项通过,无重试、跳过:每引擎 8 项新旧核心/插件播放及失败恢复,
|
||
1 项原生 WAV 诊断、1 项旧插件空 src 销毁问题、2 项不同核心的原生暂停/结束缺陷观察。
|
||
因此 36 通过不代表 36 项无缺陷的候选功能验收:9 项复现历史问题,3 项是原生能力诊断。
|
||
旧核心固定 5.4.0、旧插件固定 1.1.0;候选来自源码构建,非隔离安装包。
|
||
|
||
播放证据包括主视频实际解码颜色、媒体时钟、AAC 音频加载/时钟、偏移 seek、倍率/音量、
|
||
音频切源后的同一元素及同步、503 加载失败后换源恢复。公开 audio 的事件、状态、
|
||
原始 warning、代码/媒体/核心产物指纹随测试附件保存。不声称已经测得扬声器输出或音画主观同步。
|
||
Node 控制 waiting/playing 与 play 拒绝;实际浏览器网络缓冲/自动播放策略和移动环境由 05 补充。
|
||
|
||
## 样本与失败归因
|
||
|
||
test/browser/media/audio-tone.m4a 是本地生成的 16 秒 440 Hz 单声道 AAC。
|
||
生成命令、FFmpeg 版本、ffprobe 及哈希见旁边 audio-tone.json,测试重验哈希。
|
||
服务器沿用已有 GET/HEAD/Range,增加 audio/mp4 MIME;无外网音频依赖。
|
||
WAV 诊断使用整数方波,完整参数/哈希冻结。直接原生 Audio(未创建 ArtPlayer)在
|
||
Windows WebKit 也给出错误 4;AAC 矩阵通过不能覆盖该 WAV 或真实 Safari 的能力。
|
||
|
||
初轮 24 失败及后续诊断均保存,没有覆盖成绿灯:
|
||
|
||
1. 测试先用了 currentTime setter;它不发 seek 事件。修正为已有公开 art.seek,未修改核心。
|
||
2. 旧插件 src='' 后 readyState=0、paused=true,但 currentSrc 可能保留且 error=4。
|
||
正常基线清理检查属性/暂停/就绪状态,另立发布版缺陷断言,不把旧错误当作已修复。
|
||
3. WAV 在 Windows WebKit 失败;用无播放器原生 Audio 对照隔离,并增加独立 AAC 测试输入。
|
||
4. 最初 AAC route 固定返回 200 全文件,seek 返回 0;改用现有 Range 服务器,验证 seekable
|
||
覆盖目标再 seek。没有增加超时或移除实际 seek 断言。
|
||
5. Windows WebKit 视频尺寸可能反映布局,既有 browser/README.md 已说明;播放证据改为
|
||
固定样本的真实解码像素,保留已知尺寸限制,未改媒体实现。
|
||
|
||
最终源码/夹具都无生产行为变动。一次完整 CI 577 项(534+11+32)、254 个生产 TS 通过,
|
||
最终新增的浏览器观察经定向 lint 和三引擎验证。所有失败报告/trace 均复制到独立 cache 目录,
|
||
冻结 JSON 保存摘要、输入和关键状态;cache 丢失时应重跑,不能称旧 trace 仍存在。
|
||
|
||
## 后续修复与交接
|
||
|
||
- AUDIO-LIFE-01 已由旧版受控/实际媒体复现:保留的 update 可复活 src;src='' 触发新媒体错误。
|
||
03 应使用关闭守卫、插件自身订阅清理和无错误的媒体释放;保留同一公开 audio 及同步 update。
|
||
- AUDIO-SYNC-01 部分已复现:主视频直接 pause 或播放结束,外部音频仍播放;03 修复原生事件同步。
|
||
负偏移起点/时长边界、真实缓冲和快速切源仍须在 03/05 接续,不能以本次通过关闭全部条目。
|
||
- AUDIO-TYPE-01/DEMO-01 继续由 04/06 处理。归档分发、Monaco/8082 与设备验收尚未完成。
|
||
|
||
浏览器测试均共用端口 8084 和输出目录;不要同时执行多个 suite。开始下一次前复制报告
|
||
和结果目录(包含 trace),并记录对应测试输入。Node CI 可独立并行执行。
|
||
|
||
## PKG-AUDIO-04 类型与结束事件用例补强
|
||
|
||
源文件已迁移为严格 TS。默认/legacy 保留旧 update 的必填 URL 推断;/runtime 与编辑器
|
||
RuntimeFactory 提供准确的部分更新契约,实际运行函数不变。五组编译消费和 Monaco
|
||
三引擎验证见 [类型交付](changes/2026-09-12-PKG-AUDIO-04-types.md) 及
|
||
[冻结证据](baselines/audio-types-validation.json),不要用早期 JS 状态覆盖当前状态。
|
||
|
||
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 仍未验收。
|
||
|
||
### PKG-AUDIO-05 同文件字节前缀对照
|
||
|
||
后续[前缀诊断](changes/2026-09-15-PKG-AUDIO-05-prefix.md)保留相同 MP4/AAC、
|
||
媒体哈希和原有集成断言。原生 Windows WebKit 在更大的前缀下可以于尾部仍被扣住时
|
||
推进时钟,说明之前的“不推进”不是这两个格式一概不能渐进起播。四个完整模式
|
||
诊断仍未见可信 waiting;起播不能作为缓冲成功。保持 AUDIO-BUFFER-01 和任务05开放。
|
||
|
||
`media-gate-native.spec.js` 新增可选字节参数和放行前独立请求快照,并在恢复失败时
|
||
仍保存阶段证据。默认参数、观察时限和 `audio-buffering.spec.js` 均未改变。
|
||
明确比较原生时钟、readyState、buffered 与实际已发送字节,不只看最终请求的
|
||
sent(放行后该数值已变成完整正文)。复跑参数和原始失败限制见检查点。
|