4.5 KiB
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), 最终报告、结果和源码/产物哈希见验证证据。
测试初稿的空源操作在受控环境触发真实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三格式逐字节一致。