Files
ArtPlayer/refactor/changes/2026-09-12-PKG-MB-03-input.md
T

63 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PKG-MB-03 输入、Range 与加载取消
## 结构与兼容
原input.js拆为input.ts、media.ts、tracks.ts、hls-state.ts;新增preflight.ts和load-session.ts,
共六个strict生产TS模块。原Engine/VideoEngine仅接入新边界,主协调、视频、音频和HLS UI的
其余迁移仍分别归04/05/06/07。实际维护地图见包内ARCHITECTURE.md。
保留String/Blob/ReadableStream、SDK Source/SourceRef转交和SDK对错误输入的验证;
HLS匹配、成对音轨、live/metadata/computed时长、语言别名和默认auto/manual模式保持。
公开factory、Canvas精确Result、types及main/module/legacy路径均未更改。
API-05/10的明确缺陷修正:旧加载在切源/销毁/超时后无需等待底层操作即可settle,
不能再发晚error/Range事件或持有等待定时器;成功加载清除deadline;销毁后load无副作用。
当前活动错误仍code4,超时仍Load timeout/networkState3。合法正常Range行为保留:
缺头/none发RangeNotSupported detail但不设置engine.error,网络失败警告后继续,HLS跳过HEAD。
Input在创建后、异步选轨前就属于LoadSession;engine.input/media只在选轨后暴露,
避免旧实现未绑定Input期间无法取消。Input.dispose由唯一session负责,幂等释放;
SDK声明明确不允许UrlSource.requestInit.signal,媒体请求交给Input.dispose取消。
独立HEAD使用AbortController和代次守卫;无AbortController仍隔离过期结果,不能声称物理中止请求。
## 类型与依赖决策
首次严格检查实际复现SDK依赖dom-webcodecs0.1.13与TS5.9.3 DOM的重复声明和BufferSource冲突,
以及缺失Disposable。未开启skipLibCheck,也未使用自制any类型掩盖SDK。
通过Yarn registry确认并固定@types/dom-webcodecs0.1.19(最低TS5.8),root resolutions覆盖两个
传递路径;yarn.lock记录完整性。SDK运行时仍1.56.1、原始四文件哈希未改。
Yarn会明确提示替换SDK精确0.1.13,这是有记录的仅声明覆盖,不是无意漂移。
包内lib追加ESNext.Disposable以检查SDK声明;target仍ES2020,源代码未引入using/Symbol.dispose。
公共声明不引用SDK,不把内部编译器版本要求传给旧消费者。
## 验证
32项候选专项:12项来源/轨道/时长/HLS与真实SDK解析,20项加载正常及竞态回归。
同一20项加载断言跑冻结旧main:6正常通过、14失败;候选20通过。原24项历史基线继续通过,
yarn test:mediabunny共56项已接入test:unit。main与legacy各20项通过;三格式由仓库build生成。
首轮21项候选源码浏览器检查通过,包含12次实际播放、7次Windows WebKit能力对照、
2次待修复的无轨道就绪行为。构建产物的完整矩阵另加真实浏览器Stream取消(无模拟timer),
最终报告、结果和源码/产物哈希见[验证证据](../baselines/mb-input-validation.json)。
测试初稿的空源操作在受控环境触发真实AudioContext缺失,仅在对应隔离Range用例中明确控制
无音轨处理;跨VM对象原型改为字段比较;MP4 fixture实际8秒修正了测试草稿2秒假设。
这些失败日志与SDK声明冲突日志保留,均未修改冻结基线或扩大媒体成功定义。
## 剩余范围与回退
本步没有宣称解决所有生命周期问题。重复/无轨道就绪、事件重入、pending play/seek、
已经进入解码器的晚帧/音频回调、长期AV sync、HLS UI并发、完整安装与MPL通知仍有责任任务。
旧createTimeout内部方法仍在Engine供后续协调迁移审查,正常load已不通过它创建无人管理的timer。
PKG-MB-09/10及全局发布复盘未完成。保持Canvas/Ambilight类型决策待确认;未推送或发布。
回退以本任务独立提交为单位,同时回退六模块、JS接入、产物、Yarn声明覆盖、测试和文档;
不要覆盖03451c02的历史媒体基线。完成状态以任务表、最终验证证据和独立commit为准。
首轮完整CI的单元/工程通过,基线中第三方来源清单仍指向已拆分input.js。
已同步third-party.json的六模块来源路径与验证范围,专项台账及完整CI随后复跑;未降低台账校验。
最终完整CI1217项通过(1062单元、14工程、141基线),另44重复契约,296生产TS严格检查。
最终72项浏览器无失败/重试/跳过;候选30项为12次播放、9次原生Stream取消、7次能力对照、
2次已登记trackless就绪缺口。源码、产物、测试哈希与报告匹配,docs/compiled与dist三格式逐字节一致。