Files
ArtPlayer/refactor/changes/2026-09-12-PKG-MB-07-hls.md
T

71 lines
5.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-07:HLS配对、选择意图与UI拓扑
任务通过完整CI后标记done,并立即以专用本地提交交付。来源ccee9157a70725e7f6bf77dc43ff2566bfa14540,
冻结源码及main见[来源基线](../baselines/mb-hls-source.json),最终检查、报告和哈希见
[验证记录](../baselines/mb-hls-validation.json)。
## 实际结构
删除m3u8.js,迁移为m3u8.ts,拆出m3u8-model.ts、m3u8-menu.ts、m3u8-types.ts。
协调模块管理refresh版本、选择意图、source与事件;model生成label、排序和selector;
menu拥有controls/setting两个独立入口,types限定所需UI/shim能力,避免接收不受约束的art。
包内30个生产TS模块,剩index.js由MB-08接续。tsconfig引用现有共享assets.d.ts声明SVG导入;
没有新依赖,public Option/Result/factory声明未修改。
hls-selection.ts统一质量/音频请求的意图标识与source/Input检查,并分别保留配对策略。
较新的请求使尚在查询的旧请求失效,包括质量和音频交叉选择。已进入replaceTracks的操作
仍由Playback控制,到下一个replacement开始才被替代,不声称点击即同步终止SDK解码。
当先前replacement在最新查询期间安装另一份media时,最新查询对新的media重新计算,
避免简单的media相等检查丢弃最新意图,或Auto音轨按旧视频配对。当前查询失败仍拒绝;
过期查询/替换失败被观察,不覆盖当前选择。状态getter同时检查source代数和media身份。
## 兼容与生命周期修复
保留原有mediabunny-quality/audio名称、右侧control、setting宽度200、图标、间距、
标题/Auto/getName默认值、质量降序、通知格式、onSelect Promise与label返回值。
Auto仍是操作入口,显示与高亮基于实际选择轨道;自动模式下也不会只按mode伪造高亮。
相同label仍合并,但合并组中保留实际选中的ID,修复选中项被前一个同名条目遮蔽的问题。
排序改为提前建立height索引,避免比较器反复find数组。
refresh版本与选择意图分开:迟到状态不覆盖新模型,同一可见菜单在首个选择未完成时
仍接受下一次点击;自身loadedmetadata刷新不使有效选择的完成失效。被替换菜单或旧source
回调不再切轨、通知或刷新。选择失败恢复实际轨道高亮后保持原拒绝,恢复期间被新意图替代的
旧失败不再外溢;事件自动refresh明确观察拒绝。getName和registry回调的同步切源/销毁
在每个后续阶段前重新检查,避免重建已关闭UI。
control/setting分别拥有与移除。关闭一侧会清理它并保留另一侧;单音轨/纯视频清理audio,
非HLS清理两类菜单;loadstart/error/destroy立即使旧工作失效并清理已拥有入口。
清理尝试全部入口和全部监听器,即使其中一个抛错也继续,并保证入口的shim销毁仍执行。
这些模块不对外新增canvas属性或API;EnginePort补充已有只读source/destroyed能力用于内部检查。
## 复现与验证
- 首批27条旧main断言5通过/22失败;最终43条旧main为11通过/32失败,无取消或跳过。
候选全部通过,覆盖乱序刷新、旧回调、单入口关闭、失败恢复、清理异常、实际选中ID、
连续/跨类型轨道选择和配对期间media变化。配对和失败恢复的中间候选缺陷另有复现日志。
- 候选包专项226通过;main/legacy各202通过,每个产物命令含198候选断言及4冻结正常事件对照。
- 新增30浏览器场景:两套真实核心×五类场景×三个引擎。Chromium/Firefox共20项真实
MediaBunny解析/解码和DOM菜单验证;Windows WebKit10项明确媒体能力缺失对照。
- 同30条浏览器断言对旧main:14通过/16失败。四个正常菜单场景和十个能力对照通过;
失败分布在单侧control关闭、旧source/destroy状态写回、最新选择被早期请求覆盖。
单侧关闭失败是明确等待目标UI被删除未满足,其余是状态/写入次数/最终轨道断言。
- 真实菜单场景点击quality控件和audio设置项,再切Auto,验证实际配对与两个入口高亮;
每次替换恰好一套loadedmetadata/loadeddata/canplay/canplaythrough/seeked,三次共三套。
- 首次Firefox检查在解码完成前读取事件计数(为0)而失败,改用原超时等待精确完成序列;
下一轮暴露轮询未处理状态getter合法的临时null,改为等待非null目标值。没有放宽事件数量、
静默跳过或拉长超时,失败报告/results均保留。
- 最终构建main运行全部七个MediaBunny浏览器文件;详细结果在验证记录中核验。
- 严格TS、lint、三格式build、ESM默认factory及dist/docs逐字节一致性单独检查。
根test:unit与test:mediabunny加入HLS断言,完整CI持续执行。
最终完整CI1387项(1232单元+14工程+141基线)通过,另44重复契约;320生产TS。
全部七个MediaBunny浏览器文件108项通过,其中29项为Windows WebKit能力缺失对照。
最终源码/测试/产物/报告哈希已核验,main与浏览器所测文件字节一致,dist与docs三格式一致。
## 后续与回退
MB-LIFE-01仍open,剩长播放、完整媒体/核心/插件组合和物理设备证据归MB-09;编码能力/
undecodable fallback与公共shim/factory声明由MB-08及MB-CAP-01/MB-READY-01处理。
MB-10验证demo、真实安装包和MPL/source通知。本项通过不构成npm发布验收。
回退revert专用提交,历史冻结源码与报告保留。下一项MB-08完成入口TS、能力与声明边界。