lemon-mse 0.1.4 → 0.1.6

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.
@@ -0,0 +1,410 @@
1
+ export { Flv }
2
+
3
+ declare class Flv {
4
+ static isSupported(mediaType: ('video' | 'audio') | null): boolean;
5
+ static enableLogger(): void;
6
+ static disableLogger(): void;
7
+
8
+ constructor(opts: FlvOption);
9
+ media: HTMLMediaElement | null;
10
+ _loading: boolean;
11
+ _opts: FlvOption;
12
+ _bufferService: K.BufferService;
13
+ _gapService: K.GapService;
14
+ _stats: K.MediaStatsService;
15
+ _mediaLoader: K.NetLoader;
16
+ _maxChunkWaitTimer: any;
17
+ _tickTimer: any;
18
+ _tickInterval: number;
19
+ _urlSwitching: boolean;
20
+ _seamlessSwitching: boolean;
21
+ _disconnectRetryCount: number;
22
+ _preLoadEndPoint: number;
23
+ _keyframes: any;
24
+ _acceptRanges: boolean;
25
+ _firstProgressEmit: boolean;
26
+ _seiService: K.SeiService;
27
+ _bandwidthService: K.BandwidthService;
28
+ get version(): any;
29
+ get isLive(): boolean;
30
+ get baseDts(): number;
31
+ get seekable(): boolean;
32
+ get loader(): K.NetLoader;
33
+ get blobUrl(): any;
34
+ speedInfo(): {
35
+ speed: any;
36
+ avgSpeed: number;
37
+ };
38
+ getStats(): Stats;
39
+ bufferInfo(maxHole?: number): {
40
+ start: number;
41
+ end: number;
42
+ buffers: [number, number][];
43
+ remaining: number;
44
+ index?: number;
45
+ nextStart?: number;
46
+ nextEnd?: number;
47
+ prevStart?: number;
48
+ prevEnd?: number;
49
+ };
50
+ playbackQuality(): {
51
+ droppedVideoFrames?: undefined;
52
+ totalVideoFrames?: undefined;
53
+ creationTime?: undefined;
54
+ } | {
55
+ droppedVideoFrames: any;
56
+ totalVideoFrames: any;
57
+ creationTime: any;
58
+ };
59
+ load(url?: string, reuseMse?: boolean): Promise<any>;
60
+ replay(seamlesslyReload: boolean, isPlayEmit: any): Promise<any>;
61
+ disconnect(): Promise<void>;
62
+ switchURL(url: string, seamless?: boolean): Promise<void>;
63
+ destroy(): Promise<any>;
64
+ _emitError(error: any, endOfStream?: boolean): void;
65
+ _reset(reuseMse?: boolean): Promise<void>;
66
+ _loadData(url: any, range: any): Promise<void>;
67
+ /**
68
+ * startTime: 当前流式分段开始read时间
69
+ * endTime: 当前流式分段结束read时间
70
+ * st: 拉流开始时间
71
+ * firstByteTime: 首字节响应时间
72
+ */
73
+ _onProgress: (chunk: ArrayBuffer, done: boolean, { startTime, endTime, st, firstByteTime }: {
74
+ startTime: number;
75
+ endTime: number;
76
+ st: number;
77
+ firstByteTime: number;
78
+ }, response: Response) => Promise<void>;
79
+ _onRetryError: (error: any, retryTime: any) => void;
80
+ _clear(): Promise<void>;
81
+ _end: () => void;
82
+ _resetDisconnectCount: () => void;
83
+ _tick: () => void;
84
+ _onPlay: () => void;
85
+ _onSeeking: () => Promise<void>;
86
+ _onTimeupdate: () => void;
87
+ _onWaiting: () => void;
88
+ _onBufferUpdate: () => void;
89
+ _checkPreload: () => Promise<void>;
90
+ _onFlvScriptData: (sample: any) => void;
91
+ }
92
+
93
+
94
+ export function getOption(opts: FlvOption): FlvOption;
95
+ export type FlvOption = {
96
+ media: HTMLMediaElement;
97
+ url?: string;
98
+ isLive?: boolean;
99
+ softDecode?: boolean;
100
+ analyzeDuration?: number;
101
+ maxJumpDistance?: number;
102
+ maxLatency?: number;
103
+ targetLatency?: number;
104
+ bufferBehind?: number;
105
+ retryCount?: number;
106
+ retryDelay?: number;
107
+ disconnectRetryCount?: number;
108
+ loadTimeout?: number;
109
+ maxReaderInterval?: number;
110
+ preloadTime?: number;
111
+ defaultVodLoadSize?: number;
112
+ disconnectTime?: number;
113
+ fetchOptions?: RequestInit;
114
+ seamlesslyReload: boolean;
115
+ keepStatusAfterSwitch?: boolean;
116
+ onlyVideo?: boolean;
117
+ onlyAudio?: boolean;
118
+ preferMMS?: boolean;
119
+ preProcessUrl?: (url: string, ext?: {
120
+ [propName: string]: any;
121
+ }) => {
122
+ [propName: string]: any;
123
+ url: string;
124
+ };
125
+ };
126
+
127
+ declare namespace K {
128
+
129
+ type StatsInfo = {
130
+ downloadSpeed: number;
131
+ avgSpeed: number;
132
+ currentTime: number;
133
+ bufferEnd: number;
134
+ decodeFps: number;
135
+ encodeType: string;
136
+ audioCodec: string;
137
+ videoCodec: string;
138
+ domain: string;
139
+ fps: number;
140
+ bitrate: number;
141
+ width: number;
142
+ height: number;
143
+ samplerate: number;
144
+ channelCount: number;
145
+ gop: number;
146
+ };
147
+
148
+ export class BufferService {
149
+ constructor(flv: Flv, softVideo?: any, opts?: any);
150
+ flv: Flv | null;
151
+ _demuxer: FlvDemuxer;
152
+ _remuxer: any;
153
+ _mse: any;
154
+ _softVideo: any;
155
+ _sourceCreated: boolean;
156
+ _needInitSegment: boolean;
157
+ _discontinuity: boolean;
158
+ _contiguous: boolean;
159
+ _initSegmentId: string;
160
+ _cachedBuffer: any;
161
+ _demuxStartTime: number;
162
+ _opts: any;
163
+ get baseDts(): number;
164
+ get blobUrl(): any;
165
+ isFull(mediaType?: string): any;
166
+ seamlessSwitch(): void;
167
+ unContiguous(startTime: any): void;
168
+ reset(reuseMse?: boolean): Promise<void>;
169
+ endOfStream(): Promise<void>;
170
+ updateDuration(duration: any): Promise<void>;
171
+ destroy(): Promise<void>;
172
+ appendBuffer(chunk: any): Promise<any[]>;
173
+ evictBuffer(bufferBehind: any): Promise<any>;
174
+ _emitMetaParsedEvent(videoTrack: any, audioTrack: any): void;
175
+ _fireEvents(videoTrack: any, audioTrack: any, metadataTrack: any): void;
176
+ }
177
+
178
+ export class FlvDemuxer {
179
+ static AUDIO_RATE: number[];
180
+ static probe(data: Uint8Array): boolean;
181
+ /**
182
+ * @param {VideoTrack} [videoTrack]
183
+ * @param {AudioTrack} [audioTrack]
184
+ * @param {MetadataTrack} [metadataTrack]
185
+ */
186
+ constructor(videoTrack?: VideoTrack, audioTrack?: AudioTrack, metadataTrack?: MetadataTrack);
187
+ _headerParsed: boolean;
188
+ _remainingData: any;
189
+ _gopId: number;
190
+ _needAddMetaBeforeKeyFrameNal: boolean;
191
+ videoTrack: VideoTrack;
192
+ audioTrack: AudioTrack;
193
+ metadataTrack: MetadataTrack;
194
+ _fixer: FlvFixer;
195
+ /**
196
+ * @param {Uint8Array} data
197
+ * @param {boolean} [discontinuity=false] 切流
198
+ * @param {boolean} [contiguous=true]
199
+ * @returns {DemuxResult}
200
+ */
201
+ demux(data: Uint8Array, discontinuity?: boolean, contiguous?: boolean): DemuxResult;
202
+
203
+ fix(startTime?: number, discontinuity?: boolean, contiguous?: boolean): DemuxResult;
204
+
205
+ demuxAndFix(data: Uint8Array, discontinuity?: boolean, contiguous?: boolean, startTime?: number): DemuxResult;
206
+ _parseAudio(data: any, pts: any): void;
207
+ _parseG711(data: any, pts: any, format: any): void;
208
+ _parseAac(data: any, pts: any): void;
209
+ _parseVideo(data: any, dts: any): void;
210
+ _checkAddMetaNalToUnits(hevc: any, units: any, track: any): any;
211
+ _parseScript(data: any, pts: any): void;
212
+ }
213
+
214
+ export type DemuxResult = {
215
+ videoTrack: VideoTrack;
216
+ audioTrack: AudioTrack;
217
+ metadataTrack: MetadataTrack;
218
+ };
219
+
220
+
221
+ declare class SeiService {
222
+ constructor(emitter: any);
223
+ _seiSet: Set<any>;
224
+ emitter: any;
225
+ throw(currentTime: any, isLive: any): void;
226
+ reset(): void;
227
+ }
228
+
229
+ export class BandwidthService {
230
+ _chunkSpeeds: any[];
231
+ _speeds: any[];
232
+ addRecord(totalByte: any, ms: any): void;
233
+ addChunkRecord(totalByte: any, ms: any): void;
234
+ getAvgSpeed(): number;
235
+ getLatestSpeed(): any;
236
+ reset(): void;
237
+ }
238
+
239
+ export class NetLoader {
240
+ static isFetchSupport(): boolean;
241
+ constructor(cfg: any);
242
+ type: string;
243
+ _queue: any[];
244
+ _alive: any[];
245
+ _currentTask: any;
246
+ _finnalUrl: string;
247
+ _config: any;
248
+ log: any;
249
+ isFetch(): boolean;
250
+ load(url: any, config?: {}): Promise<any>;
251
+ cancel(): Promise<void>;
252
+ _processTask(): void;
253
+ }
254
+
255
+ export class GapService {
256
+ _prevCurrentTime: number;
257
+ do(media: any, maxJumpDistance: number, isLive: any, seekThreshold?: number): void;
258
+ }
259
+
260
+
261
+ class MediaStatsService {
262
+ constructor(core: any, timescale?: number);
263
+ _core: any;
264
+ _samples: any[];
265
+ _timescale: number;
266
+ _stats: Stats;
267
+ getStats(): StatsInfo;
268
+ _bindEvents(): void;
269
+ reset(): void;
270
+ }
271
+
272
+ type Stats = StatsInfo
273
+
274
+ class VideoTrack {
275
+ id: number;
276
+ /** @readonly */
277
+ readonly type: string;
278
+ codecType: string;
279
+ pid: number;
280
+ /** @type {Uint8Array | Object} */
281
+ hvcC: Uint8Array | any;
282
+ codec: string;
283
+ timescale: number;
284
+ formatTimescale: number;
285
+ sequenceNumber: number;
286
+ baseMediaDecodeTime: number;
287
+ baseDts: number;
288
+ duration: number;
289
+ warnings: any[];
290
+ /** @type {import('./video-sample').VideoSample[]} */
291
+ samples: import('./video-sample').VideoSample[];
292
+ /** @type {Uint8Array[]} */
293
+ pps: Uint8Array[];
294
+ /** @type {Uint8Array[]} */
295
+ sps: Uint8Array[];
296
+ /** @type {Uint8Array[]} */
297
+ vps: Uint8Array[];
298
+ fpsNum: number;
299
+ fpsDen: number;
300
+ /** @type {[number, number]} */
301
+ sarRatio: [number, number];
302
+ width: number;
303
+ height: number;
304
+ nalUnitSize: number;
305
+ present: boolean;
306
+ isVideoEncryption: boolean;
307
+ isAudioEncryption: boolean;
308
+ isVideo: boolean;
309
+ kid: any;
310
+ pssh: any;
311
+ /** @type {any} */
312
+ ext: any;
313
+ reset(): void;
314
+ /**
315
+ * @returns {boolean}
316
+ */
317
+ exist(): boolean;
318
+ /**
319
+ * @returns {boolean}
320
+ */
321
+ hasSample(): boolean;
322
+ get isEncryption(): boolean;
323
+ }
324
+
325
+
326
+ class AudioTrack {
327
+ id: number;
328
+ /** @readonly */
329
+ readonly type: string;
330
+ codecType: string;
331
+ pid: number;
332
+ codec: string;
333
+ sequenceNumber: number;
334
+ sampleDuration: number;
335
+ timescale: number;
336
+ formatTimescale: number;
337
+ baseMediaDecodeTime: number;
338
+ duration: number;
339
+ warnings: any[];
340
+ samples: AudioSample[];
341
+ baseDts: number;
342
+ sampleSize: number;
343
+ sampleRate: number;
344
+ channelCount: number;
345
+ objectType: number;
346
+ sampleRateIndex: number;
347
+ config: number[];
348
+ present: boolean;
349
+ isVideoEncryption: boolean;
350
+ isAudioEncryption: boolean;
351
+ kid: any;
352
+ /** @type {any} */
353
+ ext: any;
354
+ reset(): void;
355
+ /**
356
+ * @returns {boolean}
357
+ */
358
+ exist(): boolean;
359
+ /**
360
+ * @returns {boolean}
361
+ */
362
+ hasSample(): boolean;
363
+ get isEncryption(): boolean;
364
+ }
365
+
366
+
367
+ class AudioSample {
368
+ /**
369
+ * @param {number} pts
370
+ * @param {Uint8Array} data
371
+ * @param {number} [duration=1024]
372
+ */
373
+ constructor(pts: number, data: Uint8Array, duration?: number, sampleOffset?: any);
374
+ duration: number;
375
+ flag: {
376
+ dependsOn: number;
377
+ isNonSyncSample: number;
378
+ };
379
+ keyframe: boolean;
380
+ originPts: number;
381
+ pts: number;
382
+ dts: number;
383
+ data: Uint8Array;
384
+ size: number;
385
+ sampleOffset: any;
386
+ }
387
+
388
+ class FlvScriptSample extends Sample {
389
+ }
390
+ class SeiSample extends Sample {
391
+ }
392
+ class MetadataTrack {
393
+ readonly id: 3;
394
+ readonly type: string;
395
+ timescale: number;
396
+ flvScriptSamples: FlvScriptSample[];
397
+ seiSamples: SeiSample[];
398
+ exist(): boolean;
399
+ reset(): void;
400
+ hasSample(): boolean;
401
+ }
402
+ declare class Sample {
403
+ constructor(data: any, pts: number);
404
+ time: number;
405
+ data: any;
406
+ originPts: number;
407
+ pts: number;
408
+ }
409
+
410
+ }