Files
ArtPlayer/refactor/changes/2026-09-13-PKG-MULTI-SUB-07-timestamps.md
T

50 lines
3.6 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-MULTI-SUB-07 内嵌时间戳与显示层修复
九份历史实现已复现 `<00:02.000>` 被包装成字符串并输出 `<NaN:NaN.NaN>`。
本次保留数字 TimestampNode,处理顶层与嵌套节点,在有效的 VTT class 节点中承载
时间戳。解析树仍不可变,重复选择/reset 不积累包装;文本、标签和轨序的原回归保留。
私有 WrappedNode 现在与 CueNode 一样要求数字时间戳,编译负例从 8 项增为 9 项。
## 原生与自定义字幕层
直接输出有效时间戳后,Chromium 中的发布/候选核心都把 `<00:02.000>` 显示成文字。
这不是测试超时或资源加载失败,最初两个失败断言及截图/trace 已保留。
因此新增 caption.ts,在既有 subtitleAfterUpdate 事件后处理插件生成的专用标记。
- 原生 WebVTT 中的 `<c.artplayer-multiple-subtitles-timestamp>` 是合法 class 节点,
其中的数字时间戳仍解析为 processing instruction,cue.text 不被显示层修改。
- HTML 不会把 `<c.class>` 与 `</c>` 配对,后面的字幕可能成为该元素的子节点。
直接删除标记曾导致后文丢失;已通过真实浏览器复现并修正为移除前导时间指令、
将其余子节点移回父层。对应失败报告保留,最终断言检查前后文字。
- 不对整段文字做时间戳正则删除。仅处理专用标记中的前导指令,普通用户文字和
原有 `.art-subtitle-<name>` CSS 钩子保留。public cue.text 修改产生的字面量标签
有真实浏览器回归,清空/reset 后正常恢复原字幕。
- 注册的监听器由当前 lifetime 管理,失败/销毁时移除;已有资源测试改为检查所有
监听器集合为空。没有增加新公开选项、返回值或事件,不改变逐 cue 显示策略。
## 验证范围
纯测试覆盖开始/中间/末尾、多个毫秒时间戳、Unicode、嵌套标签、冻结树、重复选择
和重新解析有效 VTT;历史时间戳失败仍保持,不将候选修复覆盖进旧预期。
原生场景检查开头/中间/末尾三个 processing instruction、前后文字、红色样式、
字面量标签保留、清空/reset,以及原有 SRT、销毁/HTTP/Blob/视频切源场景。
通过源码/main/legacy 与发布/候选核心,在 Chromium/Firefox/Windows WebKit 重跑。
具体结果、编译器和输入指纹见[验证](../baselines/multiple-subtitles-timestamps.json)。
最终三入口各 37 项回归通过,本包 267 项通过;原生各 36 项,共 108 项通过,
原生 processing instruction 精确为 00:00:01.250、00:00:02.000、00:00:03.500。
完整 CI 2337 项通过(1987 单元、14 工程、336 基线),严格生产 TS 353 文件。
状态更新后 9 项元数据测试通过。显式 lint 无错误/警告,全量 lint 保留既有生成声明警告。
## 独立发现与后续边界
给字面量场景提供正常 `&lt;...&gt;` 输入时,vendor 生成了 `<;...>;`。九份历史实现
又复现 `&lt;`、`&gt;`、`&amp;` 的多余分号,新增 MULTI-SUB-ENTITY-01,由 05 处置。
本任务不改 vendor;最终字面量显示测试通过公开 cue.text 修改隔离显示层,明确不代表
该实体解码缺陷已修复。额外分号的初始六个浏览器失败记录保留。
04 的公开类型、完整旧核心/实体设备、实体解码、全部样式/编辑器和安装消费者仍待
后续任务。正常构建更新三个产物及 docs 副本;无新依赖、公开声明和版本变更。
本任务独立本地提交,不推送、不发布。回退恢复原 NaN 输出并移除显示监听器;
已发布失败基线及新发现记录仍可追溯。