ezuikit-flv 1.0.2-alpha.4 → 1.0.2-alpha.5

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.
Files changed (40) hide show
  1. package/decoder.js +6 -0
  2. package/decoder.wasm +0 -0
  3. package/index.js +18 -0
  4. package/package.json +18 -78
  5. package/types/audio/audioContextLoader.d.ts +42 -0
  6. package/types/audio/index.d.ts +5 -0
  7. package/types/constant/index.d.ts +264 -0
  8. package/types/control/index.d.ts +4 -0
  9. package/types/control/observer.d.ts +2 -0
  10. package/types/demux/commonLoader.d.ts +19 -0
  11. package/types/demux/flvLoader.d.ts +15 -0
  12. package/types/demux/index.d.ts +5 -0
  13. package/types/demux/m7sLoader.d.ts +4 -0
  14. package/types/flv-mse/flv.min.d.ts +3 -0
  15. package/types/index.d.ts +292 -0
  16. package/types/player/base-player.d.ts +51 -0
  17. package/types/player/commonLoader.d.ts +16 -0
  18. package/types/player/events.d.ts +2 -0
  19. package/types/player/hard-player/index.d.ts +94 -0
  20. package/types/player/hard-player/videoLoader.d.ts +28 -0
  21. package/types/player/index.d.ts +7 -0
  22. package/types/player/interface.d.ts +100 -0
  23. package/types/player/observer.d.ts +2 -0
  24. package/types/player/property.d.ts +2 -0
  25. package/types/player/soft-player/canvasLoader.d.ts +27 -0
  26. package/types/player/soft-player/index.d.ts +91 -0
  27. package/types/stream/fetchLoader.d.ts +16 -0
  28. package/types/stream/index.d.ts +6 -0
  29. package/types/stream/websocketLoader.d.ts +18 -0
  30. package/types/typedefs.d.ts +138 -0
  31. package/types/utils/debug.d.ts +8 -0
  32. package/types/utils/emitter.d.ts +7 -0
  33. package/types/utils/events.d.ts +7 -0
  34. package/types/utils/file-save.d.ts +2 -0
  35. package/types/utils/index.d.ts +70 -0
  36. package/types/utils/monitor.d.ts +13 -0
  37. package/types/utils/noSleep.d.ts +12 -0
  38. package/types/utils/parse-url.d.ts +5 -0
  39. package/types/utils/webgl.d.ts +5 -0
  40. package/types/worker/index.d.ts +13 -0
@@ -0,0 +1,292 @@
1
+ export default EzuikitFlv;
2
+ /**
3
+ * @classdesc EzuikitFlv.js 播放flv直播流, 支持播放h264/h265的直播视频流
4
+ * @example
5
+ * ```js
6
+ * const flv = new EzuikitFlv({
7
+ * container: "EleId",
8
+ * url: "https://open.ys7.com/v3/openlive/E71992743_1_1.flv"
9
+ * })
10
+ * ```
11
+ */
12
+ declare class EzuikitFlv extends EventEmitter<string | symbol, any> {
13
+ /**
14
+ * @description ERROR
15
+ * @static
16
+ * @member
17
+ * @example
18
+ * EzuikitFlv.ERROR.playError
19
+ */
20
+ static ERROR: {
21
+ playError: string;
22
+ fetchError: string;
23
+ websocketError: string;
24
+ webcodecsH265NotSupport: string;
25
+ webcodecsDecodeError: string;
26
+ webcodecsWidthOrHeightChange: string;
27
+ mediaSourceH265NotSupport: string;
28
+ mediaSourceFull: string;
29
+ mseSourceBufferError: string;
30
+ mediaSourceAppendBufferError: string;
31
+ mediaSourceBufferListLarge: string;
32
+ mediaSourceAppendBufferEndTimeout: string;
33
+ wasmDecodeError: string;
34
+ webglAlignmentError: string;
35
+ };
36
+ /** */
37
+ static TIMEOUT: {
38
+ loadingTimeout: string;
39
+ delayTimeout: string;
40
+ };
41
+ static version: string;
42
+ /**
43
+ * @description 静态方法 判断是否支持播放地址
44
+ * @param {Object} options
45
+ * @param {string=} options.url
46
+ * @param {type=} options.type
47
+ * @returns {boolean}
48
+ * @static
49
+ *
50
+ * @example
51
+ * ```js
52
+ * EzuikitFlv.supportType({url: "https://open.ys7.com/v3/openlive/E71992743_1_1.flv", type:'flv'})
53
+ * ```
54
+ */
55
+ static supportType(options: {
56
+ url?: string | undefined;
57
+ type?: type | undefined;
58
+ }): boolean;
59
+ /**
60
+ * @constructor
61
+ * @param {FlvOptions} options
62
+ */
63
+ constructor(options: FlvOptions);
64
+ _opt: FlvOptions;
65
+ $container: any;
66
+ _loadingTimeoutReplayTimes: number;
67
+ _heartTimeoutReplayTimes: number;
68
+ events: Events;
69
+ /**
70
+ * @description 销毁
71
+ * @example
72
+ * flv.destroy()
73
+ */
74
+ destroy(): void;
75
+ player: Player;
76
+ /**
77
+ * @description 初始化播放
78
+ * @private
79
+ * @param {string | HTMLElement} $container
80
+ * @param {FlvOptions} options
81
+ * @return {void}
82
+ */
83
+ private _initPlayer;
84
+ /**
85
+ * @description 重置播放器
86
+ * @private
87
+ * @param {FlvOptions} options
88
+ */
89
+ private _resetPlayer;
90
+ /**
91
+ * @description 绑定事件
92
+ * @private
93
+ */
94
+ private _bindEvents;
95
+ /**
96
+ * @description 是否开启控制台调试打印
97
+ * @param {boolean} value true: 开启, false: 关闭
98
+ * @returns {void}
99
+ * @example
100
+ * flv.setDebug(false)
101
+ */
102
+ setDebug(value: boolean): void;
103
+ setLogger(opt?: {}): void;
104
+ /**
105
+ * @description 关闭声音
106
+ * @returns {void}
107
+ * @example
108
+ * flv.closeSound()
109
+ */
110
+ closeSound(): void;
111
+ /**
112
+ * @description 开启声音 默认音量 0.5
113
+ * @returns {void}
114
+ * @example
115
+ * flv.openSound() //
116
+ */
117
+ openSound(): void;
118
+ /**
119
+ * @description 设置音量
120
+ * @param {number} value 音量 0~1
121
+ * @returns {void}
122
+ * @example
123
+ * flv.setVolume(0.5)
124
+ */
125
+ setVolume(value: number): void;
126
+ set volume(value: any);
127
+ get volume(): any;
128
+ /**
129
+ * @description 获取音量, 音量 0~1
130
+ * @returns {number}
131
+ * @example
132
+ * flv.getVolume()
133
+ */
134
+ getVolume(): number;
135
+ /**
136
+ * @description 音频回复
137
+ * @returns {void}
138
+ * @example
139
+ * flv.audioResume()
140
+ */
141
+ audioResume(): void;
142
+ /**
143
+ * @description 设置超时时长, 单位秒 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件
144
+ * @private
145
+ * @param {number} time 设置超时时长, 单位秒
146
+ * @returns {void}
147
+ * @example
148
+ * flv.setTimeout(3)
149
+ */
150
+ private setTimeout;
151
+ /**
152
+ * @description 设置渲染的模式 (video 不支持)
153
+ * @private
154
+ * @param {0 | 1 | 2} type 0: 完全填充canvas区域; 1: 等比缩放, 最大边填充 ; 2: 等比缩放后,最小边填充,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全
155
+ * @returns {Promise}
156
+ * @example
157
+ * flv.setScaleMode(1)
158
+ */
159
+ private setScaleMode;
160
+ /**
161
+ * @description 暂停
162
+ * @returns {Promise<unknown>}
163
+ * @example
164
+ * flv.pause()
165
+ */
166
+ pause(): Promise<unknown>;
167
+ /**
168
+ * @description 关闭视频,不释放底层资源
169
+ * @private
170
+ * @returns {void}
171
+ * @example
172
+ * flv.close()
173
+ */
174
+ private close;
175
+ /**
176
+ * @description 清理画布为黑色背景
177
+ * @private
178
+ * @returns {void}
179
+ * @example
180
+ * flv.clearView()
181
+ */
182
+ private clearView;
183
+ /**
184
+ * @description 播放
185
+ * @param {FlvOptions=} options
186
+ * @returns {Promise}
187
+ * @example
188
+ * flv.play()
189
+ */
190
+ play(options?: FlvOptions): Promise<any>;
191
+ /**
192
+ * @description 播放
193
+ * @private
194
+ * @param {string} url
195
+ * @param {object=} options
196
+ * @returns {Promise<unknown>}
197
+ */
198
+ private _play;
199
+ /**
200
+ * @description 重新调整视图大小
201
+ * @param {number=} width 宽
202
+ * @param {number=} height 高
203
+ * @example
204
+ * flv.resize()
205
+ */
206
+ resize(width?: number | undefined, height?: number | undefined): void;
207
+ /**
208
+ * @description 设置最大缓冲时长,单位秒,播放器会自动消除延迟。软解
209
+ * @private
210
+ * @param {number} time 大缓冲时长 s
211
+ * @example
212
+ * flv.setBufferTime(3)
213
+ */
214
+ private setBufferTime;
215
+ /**
216
+ * @description 设置旋转角度,支持,0(默认), 90, 180, 270 四个值。
217
+ * @returns {Promise}
218
+ * @param {number} deg
219
+ * @example
220
+ * flv.setRotate(90) // 旋转90度
221
+ */
222
+ setRotate(deg: number): Promise<any>;
223
+ /**
224
+ * @description 返回是否加载完毕
225
+ * @private
226
+ * @returns {boolean}
227
+ */
228
+ private hasLoaded;
229
+ /**
230
+ * @description 开启屏幕常亮,在手机浏览器上
231
+ * @returns {void}
232
+ * @example
233
+ * flv.setKeepScreenOn()
234
+ */
235
+ setKeepScreenOn(): void;
236
+ /**
237
+ * @description 全屏(取消全屏)播放视频
238
+ * @private
239
+ * @param {Boolean} flag
240
+ */
241
+ private _setFullscreen;
242
+ /**
243
+ * @description 全屏播放视频
244
+ * @returns {Promise}
245
+ * @example
246
+ * flv.fullScreen() // 全屏
247
+ *
248
+ */
249
+ fullScreen(): Promise<any>;
250
+ /**
251
+ * @description 全屏播放视频
252
+ * @returns {Promise}
253
+ *
254
+ * @example
255
+ * flv.fullscreen() // 全屏
256
+ */
257
+ fullscreen(): Promise<any>;
258
+ /**
259
+ * @description 取消全屏播放视频
260
+ * @returns {Promise}
261
+ * @example
262
+ * flv.cancelFullScreen() // 全屏
263
+ */
264
+ cancelFullScreen(): Promise<any>;
265
+ /**
266
+ * @description 取消全屏播放视频
267
+ * @returns {Promise}
268
+ * @example
269
+ * flv.exitFullscreen() // 全屏
270
+ */
271
+ exitFullscreen(): Promise<any>;
272
+ /**
273
+ * @description 获取播放器的状态
274
+ * @returns {PlayerState} 播放器的状态
275
+ * @example
276
+ * flv.getState()
277
+ */
278
+ getState(): PlayerState;
279
+ /**
280
+ * @description 获取设置
281
+ * @returns {object}
282
+ */
283
+ getOptions(): object;
284
+ /**
285
+ * @description 获取版本
286
+ * @returns {string}
287
+ */
288
+ getVersion(): string;
289
+ }
290
+ import EventEmitter from 'eventemitter3';
291
+ import Events from './utils/events';
292
+ import Player from './player';
@@ -0,0 +1,51 @@
1
+ export default class BasePlayer extends Emitter {
2
+ constructor(container: any, options: any, Video: any);
3
+ $container: any;
4
+ _opt: any;
5
+ debug: Debug;
6
+ _loading: boolean;
7
+ _playing: boolean;
8
+ _hasLoaded: boolean;
9
+ _checkHeartTimeout: any;
10
+ _checkLoadingTimeout: any;
11
+ _checkStatsInterval: any;
12
+ _startBpsTime: any;
13
+ _isPlayingBeforePageHidden: boolean;
14
+ _stats: {
15
+ buf: number;
16
+ fps: number;
17
+ abps: number;
18
+ vbps: number;
19
+ ts: number;
20
+ };
21
+ _times: {
22
+ playInitStart: string;
23
+ playStart: string;
24
+ streamStart: string;
25
+ streamResponse: string;
26
+ demuxStart: string;
27
+ decodeStart: string;
28
+ videoStart: string;
29
+ playTimestamp: string;
30
+ streamTimestamp: string;
31
+ streamResponseTimestamp: string;
32
+ demuxTimestamp: string;
33
+ decodeTimestamp: string;
34
+ videoTimestamp: string;
35
+ allTimestamp: string;
36
+ };
37
+ _videoTimestamp: number;
38
+ _audioTimestamp: number;
39
+ events: Events;
40
+ video: any;
41
+ control: Control;
42
+ /**
43
+ *
44
+ * @param options
45
+ */
46
+ updateOption(options: any): void;
47
+ }
48
+ import Emitter from '../utils/emitter';
49
+ import Debug from '../utils/debug';
50
+ import Events from '../utils/events';
51
+ import Control from '../control';
@@ -0,0 +1,16 @@
1
+ export default class CommonLoader extends Emitter {
2
+ init: boolean;
3
+ resetInit(): void;
4
+ videoInfo: {
5
+ width: string;
6
+ height: string;
7
+ encType: string;
8
+ encTypeCode: string;
9
+ };
10
+ destroy(): void;
11
+ updateVideoInfo(data: any): void;
12
+ play(): void;
13
+ pause(): void;
14
+ clearView(): void;
15
+ }
16
+ import Emitter from '../utils/emitter';
@@ -0,0 +1,2 @@
1
+ declare function _default(player: any): void;
2
+ export default _default;
@@ -0,0 +1,94 @@
1
+ import { type PlayerInterface, type RequiredFlvOptions } from '../interface';
2
+ import Events from '../../utils/events';
3
+ import Video from './videoLoader';
4
+ import type Control from '../../control';
5
+ import BasePlayer from '../base-player';
6
+ /**
7
+ * @class
8
+ *
9
+ * @interface {PlayerInterface}
10
+ */
11
+ export default class HardPlayer extends BasePlayer implements PlayerInterface {
12
+ player: any;
13
+ video: Video;
14
+ events: Events;
15
+ _playing: any;
16
+ _lastVolume: any;
17
+ _loading: any;
18
+ _audioTimestamp: any;
19
+ _videoTimestamp: any;
20
+ _times: any;
21
+ $container: HTMLElement;
22
+ _opt: RequiredFlvOptions;
23
+ _hasLoaded: boolean;
24
+ _checkHeartTimeout: number;
25
+ _stats: any;
26
+ _checkLoadingTimeout: number;
27
+ control: Control;
28
+ width: number;
29
+ height: number;
30
+ _pause: boolean;
31
+ _decodedFrames: number;
32
+ constructor(container: HTMLElement, options: RequiredFlvOptions);
33
+ close(): Promise<unknown>;
34
+ _createPlayer(options: RequiredFlvOptions): void;
35
+ _flvEvents(): void;
36
+ getOption(): RequiredFlvOptions;
37
+ emitError(errorType: string, message?: string): void;
38
+ /**
39
+ * @description 销毁实例
40
+ */
41
+ destroy(): void;
42
+ resetStats(): void;
43
+ set fullscreen(value: any);
44
+ get fullscreen(): any;
45
+ set webFullscreen(value: boolean);
46
+ get webFullscreen(): boolean;
47
+ set loaded(value: boolean);
48
+ get loaded(): boolean;
49
+ set playing(value: any);
50
+ get playing(): any;
51
+ get volume(): number;
52
+ set volume(value: number);
53
+ get lastVolume(): any;
54
+ set loading(value: any);
55
+ get loading(): any;
56
+ set audioTimestamp(value: any);
57
+ get audioTimestamp(): any;
58
+ set videoTimestamp(value: any);
59
+ get videoTimestamp(): any;
60
+ get isDebug(): boolean;
61
+ /**
62
+ * 心跳检查
63
+ */
64
+ checkHeart(): void;
65
+ clearCheckHeartTimeout(): void;
66
+ /**
67
+ * @description 心跳检查,如果渲染间隔暂停了多少时间之后,就会抛出异常
68
+ */
69
+ checkHeartTimeout(): void;
70
+ /**
71
+ * @description 检查等待时间 (loading 等待时间)
72
+ */
73
+ checkLoadingTimeout(): void;
74
+ handleRender(): void;
75
+ clearCheckLoadingTimeout(): void;
76
+ /**
77
+ *
78
+ * @param options
79
+ */
80
+ updateOption(options: Partial<RequiredFlvOptions>): void;
81
+ /**
82
+ * @description 播放
83
+ * @param url
84
+ * @param options
85
+ * @returns {Promise}
86
+ */
87
+ play(): Promise<unknown>;
88
+ _play(): Promise<void>;
89
+ _close(): Promise<unknown>;
90
+ pause(): Promise<unknown>;
91
+ resumeAudioAfterPause(): void;
92
+ mute(flag: boolean): void;
93
+ resize(): void;
94
+ }
@@ -0,0 +1,28 @@
1
+ import CommonLoader from '../commonLoader';
2
+ import { ScreenshotFormat } from '../interface';
3
+ import HardPlayer from '.';
4
+ export default class VideoLoader extends CommonLoader {
5
+ _delayPlay: boolean;
6
+ $canvasElement: HTMLCanvasElement;
7
+ canvasContext: CanvasRenderingContext2D | null;
8
+ trackGenerator: any;
9
+ vwriter: any;
10
+ $videoElement: HTMLVideoElement;
11
+ player: HardPlayer;
12
+ $posterElement: HTMLImageElement;
13
+ constructor(player: HardPlayer);
14
+ destroy(): void;
15
+ fixChromeVideoFlashBug(): void;
16
+ play(): void;
17
+ _getVideoReadyState(): number;
18
+ _play(): void;
19
+ pause(isNow?: boolean): void;
20
+ clearView(): void;
21
+ screenshot(filename: string, format?: keyof ScreenshotFormat, quality?: number, type?: string): string | File;
22
+ initCanvasViewSize(): void;
23
+ _poster(): void;
24
+ render(msg: any): void;
25
+ resize(): void;
26
+ _resizeElement($Element: HTMLVideoElement | HTMLImageElement): void;
27
+ isPlaying(): boolean;
28
+ }
@@ -0,0 +1,7 @@
1
+ export default class PlayerLoader {
2
+ static getLoaderFactory(useMSE: any): typeof SoftPlayer | typeof HardPalyer;
3
+ constructor(container: any, options: any);
4
+ _opt: any;
5
+ }
6
+ import SoftPlayer from './soft-player';
7
+ import HardPalyer from './hard-player';
@@ -0,0 +1,100 @@
1
+ import Debug from '../utils/debug';
2
+ export type TFlvOptions = {
3
+ container: string | HTMLElement;
4
+ videoBuffer: number;
5
+ decoder?: string;
6
+ forceNoOffscreen?: boolean;
7
+ hasAudio?: boolean;
8
+ scaleMode: 0 | 1 | 2;
9
+ debug: boolean;
10
+ timeout: number;
11
+ heartTimeout: number;
12
+ heartTimeoutReplayTimes: number;
13
+ loadingTimeout: number;
14
+ loadingTimeoutReplay: boolean;
15
+ keepScreenOn: boolean;
16
+ isNotMute: boolean;
17
+ useMSE: boolean;
18
+ autoWasm: boolean;
19
+ wasmDecodeErrorReplay: boolean;
20
+ useWebFullScreen: boolean;
21
+ width: number;
22
+ height: number;
23
+ };
24
+ export type RequiredFlvOptions = Required<TFlvOptions> & {
25
+ url: string;
26
+ rotate?: 0 | 90 | 180 | 270;
27
+ hasControl: any;
28
+ openWebglAlignment?: boolean;
29
+ };
30
+ export type TPlayerTimes = {
31
+ playInitStart: number;
32
+ playStart: number;
33
+ streamStart: number;
34
+ streamResponse: number;
35
+ demuxStart: number;
36
+ decodeStart: number;
37
+ videoStart: number;
38
+ playTimestamp: number;
39
+ streamTimestamp: number;
40
+ streamResponseTimestamp: number;
41
+ demuxTimestamp: number;
42
+ decodeTimestamp: number;
43
+ videoTimestamp: number;
44
+ allTimestamp: number;
45
+ };
46
+ export type TPlayerStats = {
47
+ buf: number;
48
+ fps: number;
49
+ abps: number;
50
+ vbps: number;
51
+ ts: number;
52
+ };
53
+ export interface VideoInterface {
54
+ player: any;
55
+ destroy(): void;
56
+ initCanvasViewSize(): void;
57
+ render(msg: any): void;
58
+ screenshot(filename?: string, format?: string, quality?: number, type?: string): void;
59
+ clearView(): void;
60
+ resize(): void;
61
+ }
62
+ export interface PlayerInterface {
63
+ $container: any;
64
+ debug: Debug;
65
+ _opt: RequiredFlvOptions;
66
+ /**
67
+ * @description 播放
68
+ * @param url
69
+ * @param options
70
+ */
71
+ play(options?: TFlvOptions): Promise<unknown>;
72
+ /**
73
+ * @description 暂停
74
+ */
75
+ pause(flag?: boolean): Promise<unknown>;
76
+ /**
77
+ * @description 静音
78
+ * @param flag
79
+ */
80
+ mute(flag?: boolean): void;
81
+ /**
82
+ * @description resize
83
+ */
84
+ resize(): void;
85
+ /**
86
+ * @description 关闭
87
+ */
88
+ close(): Promise<unknown>;
89
+ /**
90
+ * @description 销毁实例
91
+ */
92
+ destroy(): void;
93
+ }
94
+ export type VideoInfo = {
95
+ width: string;
96
+ height: string;
97
+ encType: string;
98
+ encTypeCode?: 7 | 12 | '';
99
+ };
100
+ export type ScreenshotFormat = Record<'png' | 'jpeg' | 'webp', string>;
@@ -0,0 +1,2 @@
1
+ declare function _default(player: any): void;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare function _default(player: any): void;
2
+ export default _default;
@@ -0,0 +1,27 @@
1
+ export default class CanvasVideoLoader extends CommonLoader {
2
+ constructor(player: any);
3
+ player: any;
4
+ $videoElement: HTMLCanvasElement;
5
+ context2D: CanvasRenderingContext2D;
6
+ contextGl: any;
7
+ contextGlRender: (w: any, h: any, y: any, u: any, v: any) => void;
8
+ contextGlDestroy: () => void;
9
+ bitmaprenderer: ImageBitmapRenderingContext;
10
+ renderType: string;
11
+ videoInfo: {
12
+ width: string;
13
+ height: string;
14
+ encType: string;
15
+ };
16
+ _contextmenuEvent: (e: any) => void;
17
+ _initContextGl(): void;
18
+ _initContext2D(): void;
19
+ _initCanvasRender(): void;
20
+ _supportOffscreen(): any;
21
+ _bindOffscreen(): void;
22
+ initCanvasViewSize(): void;
23
+ render(msg: any): void;
24
+ screenshot(filename: any, format: any, quality: any, type: any): string | File;
25
+ resize(): void;
26
+ }
27
+ import CommonLoader from '../commonLoader';