mn-video-player-v2 1.4.9

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 ADDED
@@ -0,0 +1,403 @@
1
+ # MnVideoPlayer API 文档
2
+
3
+ ## 概述
4
+
5
+ MnVideoPlayer 是一个基于 WebSocket 的视频播放器,支持实时播放、历史回放、对讲等功能。
6
+
7
+ 在项目中使用时,需要排除 `mn-video-player` 模块的预加载,以避免与 Worker文件资源获取失败。
8
+
9
+ ```javascript
10
+ // 示例:Vue 项目配置
11
+ module.exports = {
12
+ // ... 其他配置
13
+ optimizeDeps: {
14
+ exclude: ['mn-video-player']
15
+ },
16
+ };
17
+ ```
18
+
19
+ ## 初始化
20
+
21
+ ### init(options)
22
+
23
+ 初始化播放器实例。
24
+
25
+ **参数:**
26
+
27
+ | 参数 | 类型 | 必填 | 说明 |
28
+ |------|------|--------|------|
29
+ | el | HTMLElement | 是 | 容器元素,用于显示视频 |
30
+ | host | string | 是 | 主机地址 |
31
+ | port | number | 是 | 端口号 |
32
+ | ws | string | 是 | WebSocket 协议(ws 或 wss) |
33
+ | userId | string | 是 | 用户 ID |
34
+ | tenantId | string | 是 | 租户 ID |
35
+ | accessToken | string | 是 | 访问令牌 |
36
+ | phone | string | 是 | 车辆编码 |
37
+ | channelNo | number | 是 | 通道号 |
38
+ | beginTime | string | 否 | 开始时间(历史回放时使用) 格式为 'YYYY-MM-DD HH:mm:ss' |
39
+ | streamType | number | 否 | 码流类型 实时:(0=主码流,1=子码流) 回放:(1=主码流,2=子码流) |
40
+ | renderType | string | 否 | 渲染类型(wasm 或 decode) 使用wasm解码 回放时建议使用decode |
41
+ | showControlBar | boolean | 否 | 是否显示内置控制栏(默认 true) |
42
+ | enableDoubleClickFullscreen | boolean | 否 | 是否启用双击全屏(默认 true) |
43
+ | controlCallbackFn | (type: MnVideoPlayerControlType) => boolean | 否 | 控制回调函数,返回 false 则阻止默认行为 ,返回 true 则执行默认行为 MnVideoPlayerControlType 枚举值 : refresh 刷新 close 关闭 fullscreen 全屏/退出全屏 stream 切换码流 speedDec 降低倍速 speedInc 增加倍速 |
44
+
45
+ **示例:**
46
+
47
+ ```javascript
48
+ const player = new MnVideoPlayer();
49
+ player.init({
50
+ el: document.getElementById('player'),
51
+ host: '172.16.0.150',
52
+ port: 16202,
53
+ ws: 'ws',
54
+ userId: '1',
55
+ tenantId: '1',
56
+ accessToken: 'your-access-token',
57
+ phone: '13695962147',
58
+ channelNo: 5,
59
+ beginTime: '2026-01-14 13:30:00',
60
+ streamType: 1,
61
+ showControlBar:true,
62
+ renderType:'wasm' // 使用wasm解码 回放时建议使用decode
63
+ });
64
+ ```
65
+
66
+ ## 播放控制
67
+
68
+ ### play(data)
69
+
70
+ 开始播放视频。
71
+
72
+ **参数:**
73
+
74
+ | 参数 | 类型 | 必填 | 说明 |
75
+ |------|------|--------|------|
76
+ | streamType | number | 否 | 码流类型(0=主码流,1=子码流) |
77
+ | beginTime | string | 否 | 开始时间(历史回放时使用) |
78
+ **示例:**
79
+
80
+ ```javascript
81
+ // 实时播放
82
+ player.play({
83
+ beginTime: ''
84
+ });
85
+
86
+ // 历史回放
87
+ player.play({
88
+ streamType: 0,
89
+ beginTime: '2026-01-14 13:30:00'
90
+ });
91
+ ```
92
+
93
+ ### pause()
94
+
95
+ 暂停播放。
96
+
97
+ **参数:** 无
98
+
99
+ **示例:**
100
+
101
+ ```javascript
102
+ player.pause();
103
+ ```
104
+
105
+ ### resume()
106
+
107
+ 恢复播放。
108
+
109
+ **参数:** 无
110
+
111
+ **说明:** 用于在暂停后恢复视频播放。
112
+
113
+ **示例:**
114
+
115
+ ```javascript
116
+ // 恢复播放
117
+ player.resume();
118
+ ```
119
+
120
+ ### stop()
121
+
122
+ 停止播放。
123
+
124
+ **参数:** 无
125
+
126
+ **示例:**
127
+
128
+ ```javascript
129
+ player.stop();
130
+ ```
131
+
132
+
133
+ ### changeSpeed(number)
134
+
135
+ 倍速播放 0.5-16。
136
+
137
+ **参数:** number 数字
138
+
139
+ **示例:**
140
+
141
+ ```javascript
142
+ player.changeSpeed(2);
143
+ ```
144
+
145
+
146
+ ### switchStream(streamType)
147
+
148
+ 切换码流类型。
149
+
150
+ **参数:**
151
+
152
+ | 参数 | 类型 | 必填 | 说明 |
153
+ |------|------|--------|------|
154
+ | streamType | number | 是 | 码流类型 实时:(0=主码流,1=子码流) 回放:(1=主码流,2=子码流) |
155
+
156
+ **示例:**
157
+
158
+ ```javascript
159
+ // 切换到主码流
160
+ player.switchStream(0);
161
+
162
+ // 切换到子码流
163
+ player.switchStream(1);
164
+
165
+ // 切换码流(使用变量)
166
+ let streamType = 1;
167
+ player.switchStream(streamType);
168
+ streamType = streamType === 1 ? 0 : 1;
169
+ ```
170
+ ### controlCallback(callback)
171
+
172
+ 设置控制栏按钮点击回调,返回 `false` 可阻止默认行为。
173
+
174
+ **参数:**
175
+
176
+ | 参数 | 类型 | 必填 | 说明 |
177
+ |------|------|--------|------|
178
+ | callback | function | 是 | 回调函数,参数为操作类型 `'play' \| 'stop' \| 'audio' \| 'speedDec' \| 'speedInc' \| 'refresh' \| 'close' \| 'fullscreen'`,返回 `true` 继续默认行为,`false` 阻止 |
179
+
180
+ **示例:**
181
+
182
+ ```javascript
183
+ player.controlCallback((type) => {
184
+ console.log('控制操作:', type);
185
+ return true;
186
+ });
187
+ ```
188
+
189
+ ## 内置控制栏
190
+
191
+ 播放器内置控制栏,鼠标移入视频区域时显示,位于视频底部,高度 20px。
192
+
193
+ 从左到右按钮依次:
194
+
195
+ | 按钮 | 图标 | 说明 |
196
+ |------|------|------|
197
+ | 播放/暂停 | ▶ / ⏸ | 切换播放状态 |
198
+ | 音频开关 | 🔊 / 🔇 | 切换音频开/关 |
199
+ | 降低倍速 | < | 降低播放倍速 |
200
+ | 当前倍速 | 0.5x ~ 32x | 显示当前倍速 |
201
+ | 提高倍速 | > | 提高播放倍速 |
202
+ | 刷新 | ↻ | 重新加载回放 |
203
+ | 关闭 | ✕ | 停止播放并关闭 |
204
+ | 全屏 | ⛶ | 全屏/退出全屏 |
205
+
206
+ 可通过 `showControlBar: false` 禁用内置控制栏。默认支持双击视频全屏,可通过 `player.enableDoubleClickFullscreen = false` 关闭。
207
+
208
+ ### enableAudio(enable)
209
+
210
+ 开启或关闭音频。
211
+
212
+ **参数:**
213
+
214
+ | 参数 | 类型 | 必填 | 说明 |
215
+ |------|------|--------|------|
216
+ | enable | boolean | 是 | true=开启音频,false=关闭音频 |
217
+
218
+ **示例:**
219
+
220
+ ```javascript
221
+ // 开启音频
222
+ player.enableAudio(true);
223
+
224
+ // 关闭音频
225
+ player.enableAudio(false);
226
+
227
+ // 切换音频状态(使用变量)
228
+ let audioEnabled = false;
229
+ player.enableAudio(!audioEnabled);
230
+ audioEnabled = !audioEnabled;
231
+ ```
232
+
233
+ ### resetCanvas()
234
+
235
+ 重置画布大小,使其适应容器元素的当前尺寸。
236
+
237
+ **参数:** 无
238
+
239
+ **说明:** 当容器元素大小改变时,调用此方法可以重新调整画布大小,确保视频显示正常。
240
+
241
+ **示例:**
242
+
243
+ ```javascript
244
+ // 重置画布大小
245
+ player.resetCanvas();
246
+
247
+ // 窗口大小改变时重置画布
248
+ window.addEventListener('resize', () => {
249
+ player.resetCanvas();
250
+ });
251
+ ```
252
+
253
+ ### timeCallBack(callback)
254
+
255
+ 设置视频时间回调函数。
256
+
257
+ **参数:**
258
+
259
+ | 参数 | 类型 | 必填 | 说明 |
260
+ |------|------|--------|------|
261
+ | callback | function | 是 | 时间回调函数,参数为视频时间(毫秒) |
262
+
263
+ **示例:**
264
+
265
+ ```javascript
266
+ player.timeCallBack((time) => {
267
+ console.log('当前视频时间:', time);
268
+ });
269
+ ```
270
+
271
+
272
+
273
+ ## 完整示例
274
+
275
+ ### 实时播放示例
276
+
277
+ ```javascript
278
+ import MnVideoPlayer from 'mn-video-player'
279
+
280
+ const player = new MnVideoPlayer();
281
+
282
+ // 初始化播放器
283
+ player.init({
284
+ el: document.getElementById('player'),
285
+ host: '172.16.0.150',
286
+ port: 16202,
287
+ ws: 'ws',
288
+ userId: '1',
289
+ tenantId: '1',
290
+ accessToken: 'your-access-token',
291
+ phone: '13695962147',
292
+ channelNo: 5
293
+ });
294
+
295
+ // 开始播放
296
+ player.play({
297
+ streamType: 0
298
+ });
299
+ ```
300
+
301
+ ### 历史回放示例
302
+
303
+ ```javascript
304
+ import MnVideoPlayer from 'mn-video-player'
305
+
306
+ const player = new MnVideoPlayer();
307
+
308
+ // 初始化播放器
309
+ player.init({
310
+ el: document.getElementById('player'),
311
+ host: '172.16.0.150',
312
+ port: 16202,
313
+ ws: 'ws',
314
+ userId: '1',
315
+ tenantId: '1',
316
+ accessToken: 'your-access-token',
317
+ phone: '13695962147',
318
+ channelNo: 5,
319
+ renderType:"decode"
320
+ });
321
+
322
+ // 历史回放
323
+ player.play({
324
+ streamType: 0,
325
+ beginTime: '2026-01-14 13:30:00'
326
+ });
327
+ ```
328
+
329
+ ### 完整控制示例
330
+
331
+ ```javascript
332
+ import MnVideoPlayer from 'mn-video-player'
333
+
334
+ const player = new MnVideoPlayer();
335
+
336
+ // 初始化播放器
337
+ player.init({
338
+ el: document.getElementById('player'),
339
+ host: '172.16.0.150',
340
+ port: 16202,
341
+ ws: 'ws',
342
+ userId: '1',
343
+ tenantId: '1',
344
+ accessToken: 'your-access-token',
345
+ phone: '13695962147',
346
+ channelNo: 5
347
+ });
348
+
349
+ // 播放按钮
350
+ document.getElementById('playBtn').addEventListener('click', () => {
351
+ player.play({
352
+ streamType: 0,
353
+ beginTime: '2026-01-14 13:30:00'
354
+ });
355
+ });
356
+
357
+ // 暂停按钮
358
+ document.getElementById('pauseBtn').addEventListener('click', () => {
359
+ player.pause();
360
+ });
361
+
362
+ // 停止按钮
363
+ document.getElementById('stopBtn').addEventListener('click', () => {
364
+ player.stop();
365
+ });
366
+
367
+ // 切换码流按钮
368
+ let streamType = 1;
369
+ document.getElementById('switchBtn').addEventListener('click', () => {
370
+ player.switchStream(streamType);
371
+ streamType = streamType === 1 ? 0 : 1
372
+ });
373
+
374
+ // 音频开关按钮
375
+ let audioEnabled = false;
376
+ document.getElementById('playAudioBtn').addEventListener('click', () => {
377
+ player.enableAudio(!audioEnabled);
378
+ audioEnabled = !audioEnabled
379
+ });
380
+
381
+ ```
382
+
383
+ ## 注意事项
384
+
385
+ 1. **容器元素**:初始化时必须提供一个有效的 DOM 元素作为容器
386
+ 2. **WebSocket 连接**:确保 WebSocket 服务器地址可访问
387
+ 4. **码流切换**:实时播放和历史回放都支持码流切换
388
+ 5. **时间格式**:历史回放的 beginTime 格式为 'YYYY-MM-DD HH:mm:ss'
389
+ 7. **资源清理**:停止播放时会自动清理资源
390
+
391
+
392
+ ## 浏览器兼容性
393
+
394
+ - Chrome 90+
395
+ - Firefox 88+
396
+ - Safari 14+
397
+ - Edge 90+
398
+
399
+ 需要支持:
400
+ - WebSocket API
401
+ - Canvas API
402
+ - Web Audio API
403
+ - WebAssembly (WASM)