@sweet-player/core 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,7 +58,8 @@ player.destroy();
58
58
  - **i18n**:内置 zh-CN/en,支持自定义语言
59
59
  - **插件机制**:`plugins` 选项或 `player.use(plugin)` 运行时安装
60
60
  - **主题定制**:CSS 变量覆盖,如 `--sp-accent`
61
- - **统计信息**:标题 10 连击弹出 YouTube 风格统计面板
61
+ - **右键菜单**:屏蔽原生菜单,内置"更新记录(当前版本,跳转 npm)"、"视频信息(YouTube 风格统计面板)"、"快捷键(键位说明面板)"
62
+ - **按需隐藏**:`hiddenControls: ['ratio', 'audioTrack', ...]` 收集不显示的功能,默认全显示(只影响 UI,不影响 API 与快捷键)
62
63
 
63
64
  ## 画质 / 音轨
64
65
 
@@ -82,25 +83,46 @@ new SweetPlayer({ ..., plugins: [myPlugin] });
82
83
  // 或运行时:player.use(myPlugin);
83
84
  ```
84
85
 
85
- ### 接入 sweet-subtitle 字幕
86
+ ### 接入 [sweet-subtitle](https://github.com/leuvi/sweet-subtitle) 字幕
87
+
88
+ ```bash
89
+ npm install sweet-subtitle
90
+ ```
91
+
92
+ 插件工厂持有字幕实例并对外暴露切换 API,运行时换字幕无需重建播放器:
86
93
 
87
94
  ```ts
88
95
  import { SweetSubtitle } from 'sweet-subtitle';
89
96
  import type { SweetPlayerPlugin } from '@sweet-player/core';
90
97
 
91
- function subtitlePlugin(src: string): SweetPlayerPlugin {
92
- return {
98
+ function createSubtitlePlugin(src?: string) {
99
+ let sub: SweetSubtitle | null = null;
100
+ const plugin: SweetPlayerPlugin = {
93
101
  name: 'sweet-subtitle',
94
102
  apply(player) {
95
- const sub = new SweetSubtitle(player.video, { src });
96
- return () => sub.destroy?.();
103
+ sub = new SweetSubtitle(player.video, src ? { src } : {});
104
+ return () => { sub?.destroy(); sub = null; }; // 播放器 destroy 时自动清理
97
105
  },
98
106
  };
107
+ return {
108
+ plugin,
109
+ load: (url: string) => sub?.loadFromUrl(url), // 切换字幕
110
+ show: () => sub?.show(),
111
+ hide: () => sub?.hide(),
112
+ setOffset: (s: number) => sub?.setOffset(s),
113
+ };
99
114
  }
100
115
 
101
- new SweetPlayer({ ..., plugins: [subtitlePlugin('/subs/ep-01.ass')] });
116
+ const subtitle = createSubtitlePlugin('/subs/ep-01.ass');
117
+ const player = new SweetPlayer({ ..., plugins: [subtitle.plugin] });
118
+
119
+ // 随时换字幕 / 关字幕,播放器不动
120
+ await subtitle.load('/subs/ep-02.ass');
121
+ subtitle.hide();
102
122
  ```
103
123
 
124
+ 不想用插件的话也可以完全独立管理:`new SweetSubtitle(player.video, ...)` 拿到实例自己持有,只需在销毁播放器前调用 `sub.destroy()`。
125
+
104
126
  ## 实例 API
105
127
 
106
128
  `play()` `pause()` `toggle()` `seek(t)` `seekBy(±s)` `setRate(r)` `setVolume(0-100)` `setMuted(b)` `setAspectRatio(r)` `setQualities(list)` `setAudioTracks(list)` `toggleFullscreen()` `togglePip()` `load(src)` `setTitle(s)` `use(plugin)` `on/off(event, fn)` `destroy()`