@video-lab/player-core 1.0.1 → 2.0.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 +23 -20
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
# @video-lab/player-core
|
|
2
2
|
|
|
3
|
-
Video Lab Player
|
|
3
|
+
Video Lab Player 的播放核心。它包装 xgplayer,并对外提供统一的命令与事件接口。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
依赖 `@video-lab/protocol`、xgplayer、xgplayer-hls.js 与 xgplayer-flv.js,不依赖 React 或 Vue。业务应用通常使用 `@video-lab/react` 或 `@video-lab/vue`;仅在自定义集成时直接使用本包。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @video-lab/player-core
|
|
11
|
+
```
|
|
6
12
|
|
|
7
13
|
## 已实现范围
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
内置 11 个稳定性插件,逻辑均有单元测试覆盖:
|
|
10
16
|
|
|
11
17
|
| 插件 | 优先级 | 解决的 pitfall |
|
|
12
18
|
|:---|:---:|:---|
|
|
13
|
-
| `safeDestroy` | P0 |
|
|
14
|
-
| `SourceRouter` | P0 |
|
|
15
|
-
| `AutoplayGuard` | P0 |
|
|
16
|
-
| `Reconnect` | P0 |
|
|
17
|
-
| `Visibility` | P0 |
|
|
18
|
-
| `Compat` | P1 |
|
|
19
|
-
| `WakeLock` | P1 |
|
|
20
|
-
| `HealthMonitor` | P1 |
|
|
21
|
-
| `ErrorRecovery` | P2 |
|
|
22
|
-
| `FullscreenGuard` | P2 |
|
|
19
|
+
| `safeDestroy` | P0 | 清理事件与根节点样式,支持重复销毁 |
|
|
20
|
+
| `SourceRouter` | P0 | 选择浏览器可用的 HLS、FLV 或原生播放路径 |
|
|
21
|
+
| `AutoplayGuard` | P0 | 上报自动播放被拒绝 |
|
|
22
|
+
| `Reconnect` | P0 | 处理网络中断与换源重试 |
|
|
23
|
+
| `Visibility` | P0 | 处理应用切回前台后的播放恢复 |
|
|
24
|
+
| `Compat` | P1 | 应对浏览器兼容性差异 |
|
|
25
|
+
| `WakeLock` | P1 | 播放时维持屏幕唤醒 |
|
|
26
|
+
| `HealthMonitor` | P1 | 测量卡顿并通过 `stalled` 上报 |
|
|
27
|
+
| `ErrorRecovery` | P2 | 尝试恢复可处理的媒体错误 |
|
|
28
|
+
| `FullscreenGuard` | P2 | 处理全屏兼容性差异 |
|
|
23
29
|
| `ZIndexGuard` | P2 | 层级冲突(归一 player 根节点 z-index) |
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
(从 hls.js 填充,单码率源为空数组)。**字幕**(`setSubtitle` / `subtitlechange` / `ready.subtitles`,
|
|
27
|
-
ADR-027)、**弹幕**(`pushDanmaku` / `setDanmakuEnabled` / `clearDanmaku` + `config.danmaku`,ADR-028)、
|
|
28
|
-
**LL-HLS 显式开启**(`source.hls.lowLatencyMode`,ADR-024)也已接线。
|
|
31
|
+
支持清晰度与 ABR:`setQuality` 命令、`qualitychange` 事件及 `ready.quality` 档位清单(单码率源为空数组)。也支持字幕、弹幕和通过 `source.hls.lowLatencyMode` 显式开启的低延迟 HLS。
|
|
29
32
|
|
|
30
33
|
## 用法
|
|
31
34
|
|
|
@@ -60,11 +63,11 @@ player.destroy() // 幂等,反复调用安全
|
|
|
60
63
|
|
|
61
64
|
**`SourceRouter` 不是 xgplayer 的 BasePlugin,是纯函数。** 选源必须发生在 `new Player()` **之前**——内核插件(hls.js / flv.js)得在构造时就注册进去,而 BasePlugin 的生命周期最早只到 `beforeCreate`,拿不到这个时机。纯函数也更好测:UA 直接传进来,不用为了测 iOS 去改 `navigator`。
|
|
62
65
|
|
|
63
|
-
**MP4
|
|
66
|
+
**MP4 始终走浏览器原生 `<video>`。** 这样可避免额外媒体管线带来的兼容性与缓冲风险。
|
|
64
67
|
|
|
65
68
|
**`destroy()` 先摘监听,再销毁 player。** 顺序反了的话,xgplayer 在销毁过程中还会抛 pause / ended,消费方会在组件已经卸载之后收到事件(坑 #3)。这个顺序有测试守着。
|
|
66
69
|
|
|
67
|
-
**`safeDestroy` 没有 `enabled` 开关。**
|
|
70
|
+
**`safeDestroy` 没有 `enabled` 开关。** 销毁保护必须始终启用,才能可靠地避免监听器与样式残留。
|
|
68
71
|
|
|
69
72
|
**换内核会明确报错。** hls.js / flv.js 的内核插件在构造时注册,运行时换不了。`load()` 一个需要不同内核的源时抛 `E_METHOD_NOT_SUPPORTED`,而不是悄悄播不出来。消费方需要销毁 player 用新 source 重建。
|
|
70
73
|
|
|
@@ -74,7 +77,7 @@ player.destroy() // 幂等,反复调用安全
|
|
|
74
77
|
|
|
75
78
|
`detectEnv({ userAgent, hasMediaSource })` 是纯函数,UA 从外部注入。SSR 场景(没有 `window` / `navigator`)保守降级成"无 MSE、强制 HLS"——在服务端误判成能播 FLV 会让首屏白屏。
|
|
76
79
|
|
|
77
|
-
|
|
80
|
+
单元测试使用轻量 stub,不实例化真实播放器。
|
|
78
81
|
|
|
79
82
|
```bash
|
|
80
83
|
pnpm --filter @video-lab/player-core test
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@video-lab/player-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"xgplayer": "3.0.26",
|
|
34
34
|
"xgplayer-flv.js": "3.0.26",
|
|
35
35
|
"xgplayer-hls.js": "3.0.26",
|
|
36
|
-
"@video-lab/protocol": "
|
|
36
|
+
"@video-lab/protocol": "2.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"jsdom": "^24.0.0",
|