Files
ArtPlayer/refactor/baselines/multiple-subtitles-contract.md
T

4.0 KiB
Raw Blame History

Multiple-subtitles 历史兼容契约

任务 PKG-MULTI-SUB-01。输入固定在 Git 0c5bb2bd7ac6d76b0b5f42dcdfb71ccdb31fb8d5, 包括源码、声明、README、三个产物和 multiple.subtitles demo,共 9 份输入。 真实 npm 1.0.0、1.1.0、1.2.0 共 20 个成员逐项保存 SHA-256,归档验证 registry SHA-512。 下载来源、版本和完整成员见 发布记录。三个历史 gitHead 关联的核心分别为 5.1.2、5.1.7、5.3.1;这是历史关联,不是全部已支持核心范围的证明。

维度 冻结事实
工厂 artplayerPluginMultipleSubtitles({ subtitles = [] });整个参数不能省略,JS 可传 {}
加载 异步注册;并行 fetch 全部 URL,arrayBuffer 后按 encoding 或 utf-8 解码
转换 type 优先于 getExt(url);vtt 原文,srt/ass 使用核心转换器,其他扩展名产生空字幕文本
解析 WebVTTParser metadata 模式;parser 各轨排序,不代表合并后按全局时间排序
1.0.0 合并 按 cue 数组下标把后续轨文字拼入首轨对应 cue,保留首轨时间
1.1.0 起合并 依次连接各轨 cue 数组,保留每轨自己的 cue 时间
样式 每轨顶层文本写入 art-subtitle-{name} div,reset 不重复套 div
返回值 Promise 最终结果有 name: multipleSubtitles、tracks(names = [])、reset()
切换 按 name 查找并按调用者顺序输出;tracks() 或 [] 清空;reset 恢复初始轨顺序;不重新 fetch
更新 setTracks 返回 undefined;每次先 revoke 旧 URL,再创建 text/vtt Blob URL,调用 subtitle.init
配置 永久把 art.option.subtitle.escape 改为 false;init 继承调用时 subtitle 配置,覆盖 url/type/onVttLoad
onParser 三个版本都在声明中出现,但已执行的真实工厂没有调用它
类型 subtitles 数组在声明中必需、其条目的 url/name/encoding 可选;声明没有 Promise、tracks/reset
旧导出 1.0.0/1.1.0 实际 CommonJS 为含 default 的对象,声明却使用 export=;都有脚本全局
新导出 1.2.0 实际 CJS 直接函数,ESM default-only,声明使用默认导出;新增 exports/legacy 路径

Parser 来源与保留范围

固定比较源为 w3c/webvtt.js 的 380cfcce 修订, 该修订 package.json 的 version 为 2.1.2,不能把它误称为已验证的 npm 2.1.2 归档。 原始文件和指纹在 来源目录。当前本地 parser 只 改变 IIFE/global 导出为 ESM 导出、增加 eslint 说明并格式化;剥离这组明确适配后, esbuild 规范化的完整执行代码相同。两个旧 npm 包保留 IIFE/exportify,经过同样边界比较 后也一致。历史真正下载时使用的 commit 没有直接证据,此修订是固定比较源。

原始 CC0 头保留,完整 dedication 放入包内 THIRD_PARTY_NOTICES,由现有构建脚本放入 main/legacy/mjs 独立文件头。parser/serializer 的 metadata、实体、样式、cue 0、排序和 无效 timing 输入与固定上游对照。此项不声称所有 WebVTT 浏览器渲染或设备已经验收。

复现与后续任务

yarn test:multiple-subtitles 验证 53 项:9 份实现的 45 个正常行为、6 个发布契约、 2 个 vendor/分发测试。源实现与实际 main/legacy 候选还分别执行 5 项正常调用回归。 converter stub 只证明调用/类型选择,不等于验证实际 SRT/ASS 解析正确性。 实际 ESM 验证入口及空轨注册,不能当作真实视频字幕显示验证。

02 继续复现错误、编码、重叠/空轨、失败和切换;03 负责拆分及请求/URL生命周期; 04 负责公开类型差异,05 负责原生核心/字幕/设备组合,06 负责安装消费者和实际 demo。 源码目前缺少 fetch 取消及 destroy 的最后 URL 释放,仅从源码观察,未计作已修复。 未知名字、轨道长度不等、HTML 样式节点、宿主失败等还需 02 系统复现。