mn-video-player-v2 1.5.0 → 1.5.2
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/dist/capture.d.ts +46 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/index.d.ts +170 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/{mn-media.js → mn-media-v2.js} +9 -2
- package/dist/mn-video-player-v2.es.js +3699 -2632
- package/dist/mn-video-player-v2.es.js.map +1 -1
- package/dist/mn-video-player-v2.umd.js +141 -8
- package/dist/mn-video-player-v2.umd.js.map +1 -1
- package/dist/{mn-worker-CLBlI2q_.js → mn-worker-BNF7HBfT.js} +121 -102
- package/dist/mn-worker-y3DtJlJ4.js +2 -0
- package/dist/mn-worker-y3DtJlJ4.js.map +1 -0
- package/package.json +1 -1
- package/readme.md +139 -5
- package/dist/mn-worker-CW3JpGn0.js +0 -2
- package/dist/mn-worker-CW3JpGn0.js.map +0 -1
- /package/dist/{mn-media.wasm → mn-media-v2.wasm} +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 视频截屏 / 录屏工具(与播放器解耦)
|
|
3
|
+
*
|
|
4
|
+
* 仅依赖一个 canvas(视频渲染画布)、一个承载录制提示的容器元素,
|
|
5
|
+
* 以及可选的音频源(用于把播放中的声音一起录进视频):
|
|
6
|
+
* - snapshot(): canvas 当前画面 → PNG 下载
|
|
7
|
+
* - startRecord()/stopRecord(): canvas.captureStream + MediaRecorder → webm 下载
|
|
8
|
+
* - 录制中在容器右上角显示红点 + "REC 录制中" 提示
|
|
9
|
+
*
|
|
10
|
+
* 音频捕获:通过 getAudio() 返回播放音频的 AudioContext 与其输出枢纽节点
|
|
11
|
+
* (播放器侧为 MnAudio.audioCtx / MnAudio.gainNode),录制时新建
|
|
12
|
+
* MediaStreamAudioDestinationNode 并连接该节点,把声音并入画面流。
|
|
13
|
+
*
|
|
14
|
+
* 注意:WebGL 渲染时需在创建 context 时开启 preserveDrawingBuffer,
|
|
15
|
+
* 否则浏览器在合成后清空绘制缓冲区,toDataURL/captureStream 取到的是空白帧。
|
|
16
|
+
*/
|
|
17
|
+
/** 音频源:返回播放音频的上下文与输出枢纽节点(如 MnAudio 的 audioCtx/gainNode) */
|
|
18
|
+
export type VideoCaptureAudio = {
|
|
19
|
+
context: AudioContext;
|
|
20
|
+
output: AudioNode;
|
|
21
|
+
};
|
|
22
|
+
export declare class VideoCapture {
|
|
23
|
+
private canvas;
|
|
24
|
+
private container;
|
|
25
|
+
private getAudio;
|
|
26
|
+
private recorder;
|
|
27
|
+
private chunks;
|
|
28
|
+
private stream;
|
|
29
|
+
private audioSource;
|
|
30
|
+
private audioDest;
|
|
31
|
+
private hintEl;
|
|
32
|
+
private recording;
|
|
33
|
+
onStateChange: (recording: boolean) => void;
|
|
34
|
+
constructor(canvas: HTMLCanvasElement, container: HTMLElement, getAudio?: () => VideoCaptureAudio | null);
|
|
35
|
+
get isRecording(): boolean;
|
|
36
|
+
snapshot(fileName?: string): string | null;
|
|
37
|
+
startRecord(): boolean;
|
|
38
|
+
stopRecord(): void;
|
|
39
|
+
toggleRecord(): boolean;
|
|
40
|
+
dispose(): void;
|
|
41
|
+
private showHint;
|
|
42
|
+
private hideHint;
|
|
43
|
+
private static download;
|
|
44
|
+
private static timestamp;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAiB;IAElC,aAAa,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAW;gBAGpD,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,WAAW,EACtB,QAAQ,GAAE,MAAM,iBAAiB,GAAG,IAAiB;IAOvD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAGD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAY1C,WAAW,IAAI,OAAO;IAwDtB,UAAU;IA0BV,YAAY,IAAI,OAAO;IASvB,OAAO;IAKP,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAUvB,OAAO,CAAC,MAAM,CAAC,SAAS;CAKzB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import MnPlayer from "./js/mn-player.js";
|
|
2
|
+
import { VideoCapture } from "./capture";
|
|
2
3
|
export type MnVideoPlayerOptions = {
|
|
3
4
|
el: HTMLElement;
|
|
4
5
|
port: number;
|
|
@@ -15,15 +16,25 @@ export type MnVideoPlayerOptions = {
|
|
|
15
16
|
renderType: 'wasm' | 'decode';
|
|
16
17
|
streamType?: number;
|
|
17
18
|
showControlBar: boolean;
|
|
19
|
+
url?: string;
|
|
18
20
|
debug?: boolean;
|
|
21
|
+
unifiedTimerCtrl?: any;
|
|
22
|
+
showChannelInfo?: boolean;
|
|
23
|
+
channelInfoTemplate?: string;
|
|
24
|
+
channelInfoCustom?: string;
|
|
25
|
+
channelInfoPosition?: 'top-left' | 'bottom-right';
|
|
26
|
+
controlItems?: MnVideoPlayerControlItem[];
|
|
19
27
|
};
|
|
20
28
|
export type MnVideoPlayerPlayOptions = {
|
|
21
29
|
beginTime: string;
|
|
22
30
|
streamType: number;
|
|
23
31
|
};
|
|
24
|
-
export type MnVideoPlayerControlType = 'play' | 'stop' | 'audio' | 'speedDec' | 'speedInc' | 'fullscreen' | "close" | "refresh" | 'stream0' | 'stream1' | 'stream2';
|
|
32
|
+
export type MnVideoPlayerControlType = 'play' | 'stop' | 'audio' | 'speedDec' | 'speedInc' | 'fullscreen' | "close" | "refresh" | 'stream0' | 'stream1' | 'stream2' | 'windowFullscreen';
|
|
33
|
+
export type MnVideoPlayerControlItem = 'play' | 'audio' | 'speed' | 'refresh' | 'stream' | 'snapshot' | 'record' | 'close' | 'fullscreen';
|
|
25
34
|
export declare class MnVideoPlayer {
|
|
35
|
+
static activeInstances: MnVideoPlayer[];
|
|
26
36
|
canvasEl: HTMLCanvasElement | null;
|
|
37
|
+
static _uuid: string;
|
|
27
38
|
playBtn: HTMLButtonElement | null;
|
|
28
39
|
audioBtn: HTMLButtonElement | null;
|
|
29
40
|
opt: MnVideoPlayerOptions | null;
|
|
@@ -37,28 +48,53 @@ export declare class MnVideoPlayer {
|
|
|
37
48
|
isPlayStart: boolean;
|
|
38
49
|
isEnableAudio: boolean;
|
|
39
50
|
currentSpeed: number;
|
|
51
|
+
speedDisplay: HTMLElement | null;
|
|
40
52
|
isFullscreen: boolean;
|
|
41
53
|
resizeObserver: ResizeObserver | null;
|
|
42
54
|
outerWorker?: Worker | null;
|
|
43
55
|
noDataImg: HTMLImageElement | null;
|
|
44
56
|
showControlBar: boolean;
|
|
45
57
|
enableDoubleClickFullscreen: boolean;
|
|
58
|
+
enableWindowFullscreen: boolean;
|
|
59
|
+
fullscreenMode: 'window' | 'browser';
|
|
60
|
+
windowFullscreenBtn: HTMLButtonElement | null;
|
|
46
61
|
id: string;
|
|
47
|
-
timeCallbackFn: (time: number) => void;
|
|
62
|
+
timeCallbackFn: (time: number, payload?: any) => void;
|
|
48
63
|
controlCallbackFn: (type: MnVideoPlayerControlType) => boolean;
|
|
49
64
|
debug: boolean;
|
|
50
65
|
debugEl: HTMLDivElement | null;
|
|
51
66
|
debugTimer: any;
|
|
67
|
+
showChannelInfo: boolean;
|
|
68
|
+
channelInfoEl: HTMLDivElement | null;
|
|
69
|
+
channelInfoTemplate: string;
|
|
70
|
+
channelInfoCustom: string;
|
|
71
|
+
channelInfoPosition: 'top-left' | 'bottom-right';
|
|
52
72
|
netSpeedKb: number;
|
|
53
73
|
netSpeedCache: number;
|
|
74
|
+
capture: VideoCapture | null;
|
|
75
|
+
controlItems: MnVideoPlayerControlItem[];
|
|
54
76
|
constructor(id?: string);
|
|
77
|
+
static getInstanceCount(): number;
|
|
78
|
+
static uuid(): string;
|
|
79
|
+
static getInstances(): MnVideoPlayer[];
|
|
55
80
|
isSupportHardDecode(): Promise<boolean>;
|
|
56
81
|
init(opt: MnVideoPlayerOptions): void;
|
|
57
82
|
initDom(): void;
|
|
83
|
+
initChannelInfoDom(): void;
|
|
84
|
+
private buildChannelInfoHtml;
|
|
85
|
+
private escapeHtml;
|
|
86
|
+
channelNoText(): string;
|
|
87
|
+
deviceNoText(): string;
|
|
88
|
+
updateChannelInfo(): void;
|
|
89
|
+
ensureCapture(): VideoCapture;
|
|
58
90
|
initControlDom(): void;
|
|
91
|
+
showControlItem(key: MnVideoPlayerControlItem): boolean;
|
|
92
|
+
private buildControlBar;
|
|
93
|
+
reloadControlDom(): void;
|
|
59
94
|
injectControlStyles(): void;
|
|
60
95
|
initDebugDom(): void;
|
|
61
96
|
updateDebug(): void;
|
|
97
|
+
wsStateText(): string;
|
|
62
98
|
injectDebugStyles(): void;
|
|
63
99
|
resetCanvas(w?: number, h?: number): void;
|
|
64
100
|
removeDom(): void;
|
|
@@ -75,5 +111,137 @@ export declare class MnVideoPlayer {
|
|
|
75
111
|
formatDateTime(date: Date): string;
|
|
76
112
|
setSyncTime(time: number): void;
|
|
77
113
|
}
|
|
114
|
+
export type MnVideoMultiLayout = 1 | 4 | 6 | 8 | 9 | 16 | 24 | 36;
|
|
115
|
+
export interface MnVideoMultiChn {
|
|
116
|
+
id: number;
|
|
117
|
+
lastUsed: number;
|
|
118
|
+
url: string;
|
|
119
|
+
opts: Partial<MnVideoPlayerOptions> | null;
|
|
120
|
+
streamType?: number;
|
|
121
|
+
beginTime?: string;
|
|
122
|
+
el: HTMLElement;
|
|
123
|
+
body: HTMLElement;
|
|
124
|
+
player: MnVideoPlayer | null;
|
|
125
|
+
}
|
|
126
|
+
/** 每路配置:纯地址字符串,或 { url },或结构化参数对象(含 url/phone/channelNo 等) */
|
|
127
|
+
export type MnVideoMultiChnOpt = string | (Partial<MnVideoPlayerOptions> & {
|
|
128
|
+
url?: string;
|
|
129
|
+
});
|
|
130
|
+
export type MnVideoMultiOptions = {
|
|
131
|
+
el: HTMLElement;
|
|
132
|
+
num?: number;
|
|
133
|
+
layout?: MnVideoMultiLayout;
|
|
134
|
+
urls?: MnVideoMultiChnOpt[];
|
|
135
|
+
syncMode?: boolean;
|
|
136
|
+
unifiedTimer?: boolean;
|
|
137
|
+
strictSync?: boolean;
|
|
138
|
+
syncThreshold?: number;
|
|
139
|
+
showToolbar?: boolean;
|
|
140
|
+
fullscreenMode?: 'window' | 'browser';
|
|
141
|
+
playerOptions?: Omit<MnVideoPlayerOptions, 'el'>;
|
|
142
|
+
controlCallback?: (from: MnVideoMultiChn, type: MnVideoPlayerControlType) => boolean | void;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* 多路播放器:继承 MnVideoPlayer,在单个容器内管理多路画面。
|
|
146
|
+
* - 布局切换 1-4-6-8-9-16-24(6/8 为异形:1 大窗 + 其余小窗)
|
|
147
|
+
* - 拖拽窗口头部交换位置;窗口可单独全屏
|
|
148
|
+
* - 统一控制:播放/暂停/恢复/停止;任一路播放/暂停全路联动;统一倍速(任一路调速全路同步);单路音频(syncMode 时仅一路发声)
|
|
149
|
+
* - setNum / setChns / appendChns / removeChns / getAll
|
|
150
|
+
*/
|
|
151
|
+
export declare class MnVideoPlayerMulti extends MnVideoPlayer {
|
|
152
|
+
static chnIdSeed: number;
|
|
153
|
+
static MAX_CHN: number;
|
|
154
|
+
static lastUsedSeed: number;
|
|
155
|
+
multiEl: HTMLElement | null;
|
|
156
|
+
gridEl: HTMLElement | null;
|
|
157
|
+
showToolbar: boolean;
|
|
158
|
+
toolbarEl: HTMLElement | null;
|
|
159
|
+
chns: MnVideoMultiChn[];
|
|
160
|
+
layout: MnVideoMultiLayout;
|
|
161
|
+
syncMode: boolean;
|
|
162
|
+
unifiedTimer: boolean;
|
|
163
|
+
strictSync: boolean;
|
|
164
|
+
syncThreshold: number;
|
|
165
|
+
uniTimerCtrl: any;
|
|
166
|
+
windowFullscreenChn: MnVideoMultiChn | null;
|
|
167
|
+
fullscreenMode: 'window' | 'browser';
|
|
168
|
+
audioOn: boolean;
|
|
169
|
+
currentSpeed: number;
|
|
170
|
+
private origChangeSpeed;
|
|
171
|
+
private origEnableAudio;
|
|
172
|
+
playerOptions: Omit<MnVideoPlayerOptions, 'el'> | null;
|
|
173
|
+
controlCallback: ((from: MnVideoMultiChn, type: MnVideoPlayerControlType) => boolean | void) | null;
|
|
174
|
+
constructor(id?: string);
|
|
175
|
+
init(opt: MnVideoMultiOptions): void;
|
|
176
|
+
private ensureUniTimerCtrl;
|
|
177
|
+
/** 动态修改严重不同步判定阈值(ms),默认 300;0 表示任何差距都算严重不同步。
|
|
178
|
+
* 仅在 unifiedTimer=true 时生效;统一时钟未创建时保存,创建后自动应用 */
|
|
179
|
+
setSyncThreshold(ms: number): void;
|
|
180
|
+
/** 动态开关严格同步:任一通道断流无缓存且落后超过 syncThreshold 时,暂停所有通道等待恢复。
|
|
181
|
+
* 仅在 unifiedTimer=true 时生效;统一时钟未创建时保存,创建后自动应用 */
|
|
182
|
+
setStrictSync(on: boolean): void;
|
|
183
|
+
/** 解析每路配置(字符串 / { url } / 结构化参数)为 { url, 其余参数 } */
|
|
184
|
+
private parseChnOpt;
|
|
185
|
+
/** 该路是否具备可播放配置(有 url 或每路参数);自动补齐的空窗口不可播放 */
|
|
186
|
+
private chnConnectable;
|
|
187
|
+
/** 空窗口标识:自动补齐/未配置的窗口特殊显示(虚线框 + noData 图片) */
|
|
188
|
+
private updateChnEmpty;
|
|
189
|
+
createChns(num: number, opts?: MnVideoMultiChnOpt[]): void;
|
|
190
|
+
createChn(index: number, opt?: MnVideoMultiChnOpt): MnVideoMultiChn;
|
|
191
|
+
setNum(n: number): void;
|
|
192
|
+
setChns(opts: MnVideoMultiChnOpt[]): void;
|
|
193
|
+
appendChns(opts: MnVideoMultiChnOpt[]): void;
|
|
194
|
+
removeChns(indexes: number | number[]): void;
|
|
195
|
+
private clearChn;
|
|
196
|
+
getAll(): MnVideoMultiChn[];
|
|
197
|
+
getHasChnNum(): number;
|
|
198
|
+
destroyChns(toLayout?: boolean): void;
|
|
199
|
+
reloadChn(chn: MnVideoMultiChn): void;
|
|
200
|
+
reindexChns(): void;
|
|
201
|
+
initChnPlayer(chn: MnVideoMultiChn): void;
|
|
202
|
+
onChnControl(from: MnVideoMultiChn, type: MnVideoPlayerControlType): boolean;
|
|
203
|
+
toggleWindowFullscreen(chn: MnVideoMultiChn): void;
|
|
204
|
+
applyWindowFullscreen(): void;
|
|
205
|
+
switchStreamAll(from: MnVideoMultiChn, streamType: number): void;
|
|
206
|
+
refreshAll(): void;
|
|
207
|
+
syncPlaying(from: MnVideoMultiChn, playing: boolean): void;
|
|
208
|
+
playChn(id: number): void;
|
|
209
|
+
playAll(): void;
|
|
210
|
+
pause(): void;
|
|
211
|
+
resume(): void;
|
|
212
|
+
stop(): void;
|
|
213
|
+
changeSpeed(speed: number): void;
|
|
214
|
+
syncSpeed(speed: number, from?: MnVideoMultiChn): void;
|
|
215
|
+
resetSpeed(): void;
|
|
216
|
+
enableAudio(enable: boolean): void;
|
|
217
|
+
syncAudio(from: MnVideoMultiChn, enable: boolean): void;
|
|
218
|
+
audioTargetChn(): MnVideoMultiChn | undefined;
|
|
219
|
+
toggleAudio(): void;
|
|
220
|
+
setLayout(num: number): void;
|
|
221
|
+
irregularPositions(layout: 6 | 8): {
|
|
222
|
+
col: number;
|
|
223
|
+
row: number;
|
|
224
|
+
span: [number, number];
|
|
225
|
+
}[];
|
|
226
|
+
/** 按下时的拖拽状态(mousedown 记录,mousemove 判定移动,mouseup 结算) */
|
|
227
|
+
dragState: {
|
|
228
|
+
id: number;
|
|
229
|
+
x: number;
|
|
230
|
+
y: number;
|
|
231
|
+
moved: boolean;
|
|
232
|
+
} | null;
|
|
233
|
+
/** 拖拽结束后的单击抑制标记(拖动后不触发播放) */
|
|
234
|
+
suppressClick: boolean;
|
|
235
|
+
/** 拖拽跟随图标(fixed 定位,moved 后跟随鼠标移动) */
|
|
236
|
+
dragGhost: HTMLElement | null;
|
|
237
|
+
/** 懒创建拖拽跟随图标(挂在 body,拖拽时显示、结束时隐藏) */
|
|
238
|
+
private ensureDragGhost;
|
|
239
|
+
/** 构造时绑定一次 document 级拖拽监听 */
|
|
240
|
+
private initDragEvents;
|
|
241
|
+
chnFromPoint(x: number, y: number): MnVideoMultiChn | null;
|
|
242
|
+
swapChn(aId: number, bId: number): void;
|
|
243
|
+
buildToolbar(): void;
|
|
244
|
+
injectMultiStyles(): void;
|
|
245
|
+
}
|
|
78
246
|
export default MnVideoPlayer;
|
|
79
247
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAIzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,WAAW,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,OAAO,CAAC;IAExB,KAAK,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -263,7 +263,7 @@ function abort(what) {
|
|
|
263
263
|
}
|
|
264
264
|
var wasmBinaryFile;
|
|
265
265
|
function findWasmBinary() {
|
|
266
|
-
return locateFile("mn-media.wasm");
|
|
266
|
+
return locateFile("mn-media-v2.wasm");
|
|
267
267
|
}
|
|
268
268
|
function getBinarySync(file) {
|
|
269
269
|
if (readBinary) {
|
|
@@ -468,7 +468,14 @@ var PThread = {
|
|
|
468
468
|
}
|
|
469
469
|
},
|
|
470
470
|
initMainThread() {
|
|
471
|
-
var pthreadPoolSize =
|
|
471
|
+
var pthreadPoolSize = 2;
|
|
472
|
+
if (self.isSecureContext && self.crossOriginIsolated) {
|
|
473
|
+
// console.log("✅ Worker 在安全上下文中,COOP 会生效");
|
|
474
|
+
// 可以尝试设置或使用 COOP 相关功能
|
|
475
|
+
} else {
|
|
476
|
+
// console.log("❌ Worker 不在安全上下文中,COOP 会被忽略");
|
|
477
|
+
var pthreadPoolSize = 0
|
|
478
|
+
}
|
|
472
479
|
while (pthreadPoolSize--) {
|
|
473
480
|
PThread.allocateUnusedWorker();
|
|
474
481
|
}
|