mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-16 17:46:17 -08:00
refactor(mediabunny): [PKG-MB-03] type inputs and cancel owned loads
This commit is contained in:
1 parent
03451c029b
commit
adba8a3d12
35 files changed
+11260
-3327
No files matched your search
@@ -0,0 +1,62 @@
|
||||
# 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三格式逐字节一致。
|
||||
Reference in new issue
Block a user