mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-10 04:36:15 -08:00
51 lines
4.0 KiB
Markdown
51 lines
4.0 KiB
Markdown
# 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。
|
||
下载来源、版本和完整成员见 [发布记录](multiple-subtitles-release.json)。三个历史 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 修订](https://github.com/w3c/webvtt.js/tree/380cfcce34ba8b472d3a31474874eb72a0e5f460),
|
||
该修订 package.json 的 version 为 2.1.2,不能把它误称为已验证的 npm 2.1.2 归档。
|
||
原始文件和指纹在 [来源目录](multiple-subtitles-vendor/sources.json)。当前本地 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 系统复现。
|