mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-10 12:46:15 -08:00
95 lines
6.3 KiB
Markdown
95 lines
6.3 KiB
Markdown
# Audio Track 1.1.0 兼容基线
|
||
|
||
PKG-AUDIO-01;源码起点 26b2983daf9edf9c798ce6a1638deeb3c36ba778。
|
||
固定来源、逐文件 SHA-256、npm SRI、历史源码及比较结果见
|
||
[audio-track-release.json](audio-track-release.json)。不覆盖 BASE-01 的历史快照。
|
||
|
||
## 来源与范围
|
||
|
||
npm 观察到 1.0.0、1.1.0,采集时 latest 为 1.1.0。本次实际归档范围为 **1.1.0**,
|
||
不是所有历史版本。六文件归档完整性通过,manifest、README、公开声明与起点源码
|
||
在 LF 规范化后相同,发布 ESM 与源码工厂经 AST 提取/esbuild 规范化后相同。
|
||
这证明比较范围内的逻辑一致,不能代替真实媒体行为测试。
|
||
|
||
registry gitHead daf133b22630b4a0eecfa3336bbddab0e9119d96 对应本地包版本 1.0.2,
|
||
不是该 npm 1.1.0 源码的充分证明;因此保留归档完整性和独立工厂比较。
|
||
manifest 无 runtime/peer 依赖、无核心/浏览器/TS 最低版本承诺。
|
||
旧核心对照使用现有冻结的 5.4.0;这只是具体检查点,不宣称最低支持版本为 5.4.0。
|
||
|
||
## 公开形状及调用
|
||
|
||
```js
|
||
const attach = artplayerPluginAudioTrack({ url: '/audio.aac', offset: 0, sync: 0.3 })
|
||
// ArtPlayer 注册时调用 attach(art)
|
||
const result = art.plugins.artplayerPluginAudioTrack
|
||
result.update({ url: '/next.aac', offset: 0.2 })
|
||
const audio = result.audio // 同一 HTMLAudioElement,可直接操作
|
||
```
|
||
|
||
工厂配置为必传对象;工厂同步返回安装函数,安装同步返回 `{ name, audio, update }`。
|
||
name 固定为 `artplayerPluginAudioTrack`,update 同步返回 undefined。没有额外公开 destroy、
|
||
事件、UI、CSS、静态版本或 SDK。插件创建独立 Audio 元素,不替换主视频,也不自动静音主视频;
|
||
因此含原音轨的主视频可能与外部音频同时播放,这是现有行为,不静默改变音量策略。
|
||
每次安装创建独立状态;配置在安装时解构,调用工厂后、安装前的对象修改会生效。
|
||
|
||
| 输入或行为 | 1.1.0 源码/发布实现事实 | 兼容与后续验证 |
|
||
| --- | --- | --- |
|
||
| url | 初始仅 truthy 时赋给 audio.src,preload 为 auto | URL 字符串交给浏览器解析,无 SDK |
|
||
| offset | 默认 0,目标 audio 时间是 art.currentTime + offset | 正数音频领先、负数滞后;负目标/超时长在 02 实测 |
|
||
| sync | 默认 0.3,仅绝对偏差严格大于阈值才 seek | 等于阈值不写;未校验负数、NaN、Infinity,不能凭猜测新增拒绝规则 |
|
||
| update | truthy 且不同 URL 才赋 src;playing 时调用 play;之后才更新 offset/sync | 同 URL 不重载,空 URL 不清源;JS 允许只传 offset/sync,且不立即同步 |
|
||
| audio | 公开真实元素,同一引用贯穿安装/更新/销毁 | 不换为不可访问封装,不用新元素实现每次切源 |
|
||
| 音量/倍率 | 初始 volume/muted 来自 art;倍率 video?.playbackRate 或 1 | 后续 video:volumechange/ratechange 同步,无自有主视频 mute |
|
||
| play 拒绝 | 三个调用点各自 catch 并 console.warn 原错误 | 没有返回给调用者的 play Promise、没有自定义错误事件 |
|
||
|
||
| ArtPlayer 事件 | 外部音频行为 |
|
||
| --- | --- |
|
||
| play | 有 URL 才同步目标时间,随后 audio.play |
|
||
| pause | audio.pause |
|
||
| seek | 有 video/URL 才同步时间 |
|
||
| video:timeupdate | art.playing 时同步时间 |
|
||
| video:ratechange | 读 art.video.playbackRate |
|
||
| video:volumechange | 同步 art.volume 和 art.muted |
|
||
| video:waiting | audio.pause |
|
||
| video:playing | 有 URL 且 art.playing 才 audio.play,不主动 sync |
|
||
| destroy | pause、src = ''、load,按此顺序 |
|
||
|
||
没有定时器或自建请求;浏览器拥有媒体加载。当前九个 emitter 回调没有插件自身解绑,
|
||
依赖核心销毁清空事件。没有 closed 状态,外部保留的 update 可在销毁后写入新 src。
|
||
这些是源码观察,02 用受控复现及真实媒体验证;不能只凭观察称内存泄漏已复现。
|
||
|
||
## 类型和分发
|
||
|
||
公开默认导出为 `(option: Option) => (art: Artplayer) => Result`,Option.url 必需、
|
||
offset/sync 可选;Result.audio 为 HTMLAudioElement,update(option: Option): void。
|
||
Option/Result 未具名导出,消费者可用 Parameters/ReturnType 提取;04 保留这些旧合法调用。
|
||
JS 的 update({ offset: 1 }) 与声明不一致,允许拓宽 update 为部分配置,但不弱化字段类型。
|
||
docs 编辑器声明还同时包含 export default/export =,由 04 做语义验证及生成修正,
|
||
本步不声称编辑器或 TS 消费已经通过。
|
||
|
||
root exports 使用 types + import(mjs)/require(js),legacy import/require 都指向 legacy.js;
|
||
main/module/types/legacy 的完整值冻结在 manifest。UMD 全局名与默认导出一致。
|
||
保留 `/legacy`、旧文件路径、同步注册和未加载 DOM 时的导入边界;实际各格式消费由 02/04/06 验证。
|
||
当前版本保持 1.1.0,REL-09 按用户要求准备 2.0.0,未获 npm 发布授权。
|
||
|
||
## 文档、样本与差异归属
|
||
|
||
README 仅说明插件名、Demo 和 MIT;其 `example=audio-track` 与真实
|
||
`docs/assets/example/audio.track.js` 不一致。common.js 直接拼接名称,无连字符转换。
|
||
实际示例使用本地 sprite-fight.mp4 + sprite-fight.aac,二者存在;没有演示 update、
|
||
偏移边界或销毁。06 应修链接并以正式 8082 demo 验证,不能拿静态文件存在作为播放通过。
|
||
|
||
| 风险 | 当前证据等级 | 负责任务 |
|
||
| --- | --- | --- |
|
||
| AUDIO-LIFE-01:销毁后 update 可写 src,监听/异步播放归属缺少终止守卫 | 源码事实,未作浏览器泄漏结论 | 02/03/05 |
|
||
| AUDIO-SYNC-01:偏移边界及切源/缓冲恢复缺少媒体时序证据 | 待取证,不预设所有当前行为是缺陷 | 02/03/05 |
|
||
| AUDIO-TYPE-01:update 部分配置和编辑器声明不一致 | 源码/声明事实 | 04 |
|
||
| AUDIO-DEMO-01:README 示例名不匹配、维护说明缺失 | 源码/文件事实 | 06 |
|
||
|
||
## 重跑
|
||
|
||
`node refactor/scripts/audio-contract.mjs`:重验固定归档、六文件、manifest、历史 Git 内容与工厂。
|
||
首次仅从固定 npm URL 下载至忽略缓存;不安装、不执行归档脚本、不覆盖基线。
|
||
`node --test refactor/scripts/audio-contract.test.mjs`:包含该验证及规范化工具的有意行为变化检查。
|
||
本步不改生产代码/声明/构建产物;所有媒体、类型和设备验收仍是后续任务。
|