@alessmicrosystems/mpegts.js 1.8.1

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 (121) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +158 -0
  3. package/README_ja.md +153 -0
  4. package/README_zh.md +157 -0
  5. package/d.ts/mpegts.d.ts +524 -0
  6. package/d.ts/src/core/mse-events.d.ts +9 -0
  7. package/d.ts/src/core/transmuxing-events.d.ts +24 -0
  8. package/d.ts/src/demux/aac.d.ts +44 -0
  9. package/d.ts/src/demux/ac3.d.ts +70 -0
  10. package/d.ts/src/demux/av1-parser.d.ts +77 -0
  11. package/d.ts/src/demux/av1.d.ts +11 -0
  12. package/d.ts/src/demux/base-demuxer.d.ts +55 -0
  13. package/d.ts/src/demux/h264.d.ts +40 -0
  14. package/d.ts/src/demux/h265.d.ts +65 -0
  15. package/d.ts/src/demux/klv.d.ts +17 -0
  16. package/d.ts/src/demux/mp3.d.ts +6 -0
  17. package/d.ts/src/demux/mpeg4-audio.d.ts +28 -0
  18. package/d.ts/src/demux/pat-pmt-pes.d.ts +106 -0
  19. package/d.ts/src/demux/patpmt.d.ts +40 -0
  20. package/d.ts/src/demux/pes-private-data.d.ts +14 -0
  21. package/d.ts/src/demux/pgs-data.d.ts +9 -0
  22. package/d.ts/src/demux/scte35.d.ts +250 -0
  23. package/d.ts/src/demux/sei.d.ts +8 -0
  24. package/d.ts/src/demux/smpte2038.d.ts +22 -0
  25. package/d.ts/src/demux/ts-demuxer.d.ts +124 -0
  26. package/d.ts/src/player/live-latency-chaser.d.ts +10 -0
  27. package/d.ts/src/player/live-latency-synchronizer.d.ts +10 -0
  28. package/d.ts/src/player/loading-controller.d.ts +19 -0
  29. package/d.ts/src/player/mse-player.d.ts +30 -0
  30. package/d.ts/src/player/player-engine-dedicated-thread-worker.d.ts +2 -0
  31. package/d.ts/src/player/player-engine-dedicated-thread.d.ts +48 -0
  32. package/d.ts/src/player/player-engine-main-thread.d.ts +50 -0
  33. package/d.ts/src/player/player-engine-worker-cmd-def.d.ts +25 -0
  34. package/d.ts/src/player/player-engine-worker-msg-def.d.ts +54 -0
  35. package/d.ts/src/player/player-engine-worker.d.ts +2 -0
  36. package/d.ts/src/player/player-engine.d.ts +16 -0
  37. package/d.ts/src/player/player-events.d.ts +21 -0
  38. package/d.ts/src/player/seeking-handler.d.ts +22 -0
  39. package/d.ts/src/player/startup-stall-jumper.d.ts +14 -0
  40. package/d.ts/src/utils/typedarray-equality.d.ts +2 -0
  41. package/dist/mpegts.js +3 -0
  42. package/dist/mpegts.js.LICENSE.txt +7 -0
  43. package/dist/mpegts.js.map +1 -0
  44. package/package.json +53 -0
  45. package/src/config.js +67 -0
  46. package/src/core/features.js +88 -0
  47. package/src/core/media-info.js +127 -0
  48. package/src/core/media-segment-info.js +230 -0
  49. package/src/core/mse-controller.js +599 -0
  50. package/src/core/mse-events.ts +28 -0
  51. package/src/core/transmuxer.js +346 -0
  52. package/src/core/transmuxing-controller.js +628 -0
  53. package/src/core/transmuxing-events.ts +43 -0
  54. package/src/core/transmuxing-worker.js +286 -0
  55. package/src/demux/aac.ts +397 -0
  56. package/src/demux/ac3.ts +335 -0
  57. package/src/demux/amf-parser.js +243 -0
  58. package/src/demux/av1-parser.ts +629 -0
  59. package/src/demux/av1.ts +103 -0
  60. package/src/demux/base-demuxer.ts +69 -0
  61. package/src/demux/demux-errors.js +26 -0
  62. package/src/demux/exp-golomb.js +116 -0
  63. package/src/demux/flv-demuxer.js +1854 -0
  64. package/src/demux/h264.ts +187 -0
  65. package/src/demux/h265-parser.js +501 -0
  66. package/src/demux/h265.ts +214 -0
  67. package/src/demux/klv.ts +40 -0
  68. package/src/demux/mp3.ts +7 -0
  69. package/src/demux/mpeg4-audio.ts +45 -0
  70. package/src/demux/pat-pmt-pes.ts +132 -0
  71. package/src/demux/pes-private-data.ts +16 -0
  72. package/src/demux/pgs-data.ts +11 -0
  73. package/src/demux/scte35.ts +723 -0
  74. package/src/demux/sei.ts +99 -0
  75. package/src/demux/smpte2038.ts +89 -0
  76. package/src/demux/sps-parser.js +298 -0
  77. package/src/demux/ts-demuxer.ts +2405 -0
  78. package/src/index.js +4 -0
  79. package/src/io/fetch-stream-loader.js +266 -0
  80. package/src/io/io-controller.js +647 -0
  81. package/src/io/loader.js +134 -0
  82. package/src/io/param-seek-handler.js +85 -0
  83. package/src/io/range-seek-handler.js +52 -0
  84. package/src/io/speed-sampler.js +93 -0
  85. package/src/io/websocket-loader.js +151 -0
  86. package/src/io/xhr-moz-chunked-loader.js +211 -0
  87. package/src/io/xhr-msstream-loader.js +307 -0
  88. package/src/io/xhr-range-loader.js +366 -0
  89. package/src/mpegts.js +95 -0
  90. package/src/player/live-latency-chaser.ts +66 -0
  91. package/src/player/live-latency-synchronizer.ts +79 -0
  92. package/src/player/loading-controller.ts +142 -0
  93. package/src/player/mse-player.ts +150 -0
  94. package/src/player/native-player.js +262 -0
  95. package/src/player/player-engine-dedicated-thread.ts +479 -0
  96. package/src/player/player-engine-main-thread.ts +463 -0
  97. package/src/player/player-engine-worker-cmd-def.ts +62 -0
  98. package/src/player/player-engine-worker-msg-def.ts +102 -0
  99. package/src/player/player-engine-worker.ts +370 -0
  100. package/src/player/player-engine.ts +35 -0
  101. package/src/player/player-errors.js +39 -0
  102. package/src/player/player-events.ts +40 -0
  103. package/src/player/seeking-handler.ts +205 -0
  104. package/src/player/startup-stall-jumper.ts +86 -0
  105. package/src/remux/aac-silent.js +56 -0
  106. package/src/remux/mp4-generator.js +866 -0
  107. package/src/remux/mp4-remuxer.js +778 -0
  108. package/src/utils/browser.js +128 -0
  109. package/src/utils/exception.js +73 -0
  110. package/src/utils/logger.js +140 -0
  111. package/src/utils/logging-control.js +165 -0
  112. package/src/utils/polyfill.js +68 -0
  113. package/src/utils/typedarray-equality.ts +69 -0
  114. package/src/utils/utf8-conv.js +84 -0
  115. package/src/utils/webworkify-webpack.js +202 -0
  116. package/tsconfig.json +16 -0
  117. package/tslint.json +1 -0
  118. package/types/index.d.ts +3 -0
  119. package/types/test-flv.ts +8 -0
  120. package/types/tsconfig.json +24 -0
  121. package/webpack.config.js +55 -0
@@ -0,0 +1,524 @@
1
+ /*
2
+ * Copyright (C) 2021 magicxqq. All Rights Reserved.
3
+ *
4
+ * @author magicxqq <xqq@xqq.im>
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ // mpegts.js TypeScript definition file
20
+
21
+ declare namespace Mpegts {
22
+ interface MediaSegment {
23
+ duration: number;
24
+ filesize?: number;
25
+ url: string;
26
+ }
27
+
28
+ interface MediaDataSource {
29
+ type: string;
30
+ isLive?: boolean;
31
+ cors?: boolean;
32
+ withCredentials?: boolean;
33
+
34
+ hasAudio?: boolean;
35
+ hasVideo?: boolean;
36
+
37
+ duration?: number;
38
+ filesize?: number;
39
+ url?: string;
40
+
41
+ segments?: MediaSegment[];
42
+ }
43
+
44
+ interface Config {
45
+ /**
46
+ * @desc Enable separated thread (DedicatedWorker) for transmuxing
47
+ * @defaultvalue false
48
+ */
49
+ enableWorker?: boolean;
50
+ /**
51
+ * @desc Enable separated thread (DedicatedWorker) for MediaSource
52
+ * @defaultvalue false
53
+ */
54
+ enableWorkerForMSE?: boolean;
55
+ /**
56
+ * @desc Enable IO stash buffer. Set to false if you need realtime (minimal latency) for live stream
57
+ * playback, but may stalled if there's network jittering.
58
+ * @defaultvalue true
59
+ */
60
+ enableStashBuffer?: boolean;
61
+ /**
62
+ * @desc Indicates IO stash buffer initial size. Default is `384KB`. Indicate a suitable size can
63
+ * improve video load/seek time.
64
+ */
65
+ stashInitialSize?: number;
66
+
67
+ /**
68
+ * @desc Same to `isLive` in **MediaDataSource**, ignored if has been set in MediaDataSource structure.
69
+ * @defaultvalue false
70
+ */
71
+ isLive?: boolean;
72
+
73
+ /**
74
+ * @desc Preferred audio PID for MPEG-TS. When PMT is parsed, the auto-fallback
75
+ * will select this PID if it exists among available audio tracks.
76
+ * @defaultvalue 0 (auto-select first compatible track)
77
+ */
78
+ preferredAudioPid?: number;
79
+
80
+ /**
81
+ * @desc Chasing the live stream latency caused by the internal buffer in HTMLMediaElement
82
+ * `isLive` should also be set to `true`
83
+ * @defaultvalue false
84
+ */
85
+ liveBufferLatencyChasing?: boolean;
86
+
87
+ /**
88
+ * @desc Chasing the live stream latency caused by the internal buffer in HTMLMediaElement even if HTMLMediaElement is paused
89
+ * Effective only if `isLive: true` and `liveBufferLatencyChasing: true`
90
+ * @defaultvalue false
91
+ */
92
+ liveBufferLatencyChasingOnPaused?: boolean;
93
+
94
+ /**
95
+ * @desc Maximum acceptable buffer latency in HTMLMediaElement, in seconds
96
+ * Effective only if `isLive: true` and `liveBufferLatencyChasing: true`
97
+ * @defaultvalue 1.5
98
+ */
99
+ liveBufferLatencyMaxLatency?: number;
100
+
101
+ /**
102
+ * @desc Minimum buffer latency to be keeped in HTMLMediaElement, in seconds
103
+ * Effective only if `isLive: true` and `liveBufferLatencyChasing: true`
104
+ * @defaultvalue 0.5
105
+ */
106
+ liveBufferLatencyMinRemain?: number;
107
+
108
+ /**
109
+ * @desc Chasing the live stream latency caused by the internal buffer in HTMLMediaElement
110
+ * by changing the playbackRate. `isLive` should also be set to `true`
111
+ * @defaultvalue false
112
+ */
113
+ liveSync?: boolean;
114
+
115
+ /**
116
+ * @desc Maximum acceptable buffer latency in HTMLMediaElement, in seconds.
117
+ * Effective only if `isLive: true` and `liveSync: true`
118
+ * @defaultvalue 1.2
119
+ */
120
+ liveSyncMaxLatency?: number;
121
+
122
+ /**
123
+ * @desc Target latency in HTMLMediaElement to chase when latency exceeds liveSyncMaxLatency, in seconds.
124
+ * Effective only if `isLive: true` and `liveSync: true`
125
+ * @defaultvalue 0.8
126
+ */
127
+ liveSyncTargetLatency?: number;
128
+
129
+ /**
130
+ * @desc PlaybackRate limited between [1, 2] will be used for latency chasing.
131
+ * Effective only if `isLive: true` and `liveSync: true`
132
+ * @defaultvalue 1.2
133
+ */
134
+ liveSyncPlaybackRate?: number;
135
+
136
+ /**
137
+ * @desc Abort the http connection if there's enough data for playback.
138
+ * @defaultvalue true
139
+ */
140
+ lazyLoad?: boolean;
141
+ /**
142
+ * @desc Indicates how many seconds of data to be kept for `lazyLoad`.
143
+ * @defaultvalue 3 * 60
144
+ */
145
+ lazyLoadMaxDuration?: number;
146
+ /**
147
+ * @desc Indicates the `lazyLoad` recover time boundary in seconds.
148
+ * @defaultvalue 30
149
+ */
150
+ lazyLoadRecoverDuration?: number;
151
+ /**
152
+ * @desc Do load after MediaSource `sourceopen` event triggered. On Chrome, tabs which
153
+ * be opened in background may not trigger `sourceopen` event until switched to that tab.
154
+ * @defaultvalue true
155
+ */
156
+ deferLoadAfterSourceOpen?: boolean;
157
+
158
+ /**
159
+ * @desc Do auto cleanup for SourceBuffer
160
+ * @defaultvalue false (from docs)
161
+ */
162
+ autoCleanupSourceBuffer?: boolean;
163
+ /**
164
+ * @desc When backward buffer duration exceeded this value (in seconds), do auto cleanup for SourceBuffer
165
+ * @defaultvalue 3 * 60
166
+ */
167
+ autoCleanupMaxBackwardDuration?: number;
168
+ /**
169
+ * @desc Indicates the duration in seconds to reserve for backward buffer when doing auto cleanup.
170
+ * @defaultvalue 2 * 60
171
+ */
172
+ autoCleanupMinBackwardDuration?: number;
173
+
174
+ /**
175
+ * @defaultvalue 600
176
+ */
177
+ statisticsInfoReportInterval?: number;
178
+
179
+ /**
180
+ * @desc Fill silent audio frames to avoid a/v unsync when detect large audio timestamp gap.
181
+ * @defaultvalue true
182
+ */
183
+ fixAudioTimestampGap?: boolean;
184
+
185
+ /**
186
+ * @desc Accurate seek to any frame, not limited to video IDR frame, but may a bit slower.
187
+ * Available on Chrome > 50, FireFox and Safari.
188
+ * @defaultvalue false
189
+ */
190
+ accurateSeek?: boolean;
191
+ /**
192
+ * @desc 'range' use range request to seek, or 'param' add params into url to indicate request range.
193
+ * @defaultvalue 'range'
194
+ */
195
+ seekType?: 'range' | 'param' | 'custom';
196
+ /**
197
+ * @desc Indicates seek start parameter name for seekType = 'param'
198
+ * @defaultvalue 'bstart'
199
+ */
200
+ seekParamStart?: string;
201
+ /**
202
+ * @desc Indicates seek end parameter name for seekType = 'param'
203
+ * @defaultvalue 'bend'
204
+ */
205
+ seekParamEnd?: string;
206
+ /**
207
+ * @desc Send Range: bytes=0- for first time load if use Range seek
208
+ * @defaultvalue false
209
+ */
210
+ rangeLoadZeroStart?: boolean;
211
+ /**
212
+ * @desc Indicates a custom seek handler
213
+ * @desc Should implement `SeekHandler` interface
214
+ */
215
+ customSeekHandler?: CustomSeekHandlerConstructor;
216
+ /**
217
+ * @desc Reuse 301/302 redirected url for subsequence request like seek, reconnect, etc.
218
+ * @defaultvalue false
219
+ */
220
+ reuseRedirectedURL?: boolean;
221
+ /**
222
+ * @desc Indicates the Referrer Policy when using FetchStreamLoader
223
+ * @defaultvalue 'no-referrer-when-downgrade' (from docs)
224
+ */
225
+ referrerPolicy?: ReferrerPolicy;
226
+ /**
227
+ * @desc Indicates additional headers that will be added to request
228
+ */
229
+ headers?: {
230
+ [k: string]: string
231
+ }
232
+ /**
233
+ * @desc Should implement `BaseLoader` interface
234
+ */
235
+ customLoader?: CustomLoaderConstructor;
236
+ }
237
+
238
+ interface CustomSeekHandlerConstructor {
239
+ new(): SeekHandler;
240
+ }
241
+
242
+ interface SeekHandler {
243
+ getConfig(sourceURL: string, range: Range): SeekConfig;
244
+ removeURLParameters(url: string): string;
245
+ }
246
+
247
+ interface SeekConfig {
248
+ url: string;
249
+ headers: Headers | object;
250
+ }
251
+
252
+ interface BaseLoaderConstructor {
253
+ new(typeName: string): BaseLoader;
254
+ }
255
+
256
+ interface BaseLoader {
257
+ _status: number;
258
+ _needStash: boolean;
259
+
260
+ destroy(): void;
261
+ isWorking(): boolean;
262
+ readonly type: string;
263
+ readonly status: number;
264
+ readonly needStashBuffer: boolean;
265
+ onContentLengthKnown: (contentLength: number) => void;
266
+ onURLRedirect: (redirectedURL: string) => void;
267
+ onDataArrival: (chunk: ArrayBuffer, byteStart: number, receivedLength?: number) => void;
268
+ onError: (errorType: LoaderErrors, errorInfo: LoaderErrorMessage) => void;
269
+ onComplete: (rangeFrom: number, rangeTo: number) => void;
270
+ open(dataSource: MediaSegment, range: Range): void;
271
+ abort(): void;
272
+ }
273
+
274
+ interface CustomLoaderConstructor {
275
+ new(seekHandler: SeekHandler, config: Config): BaseLoader;
276
+ }
277
+
278
+ interface Range {
279
+ from: number;
280
+ to: number;
281
+ }
282
+
283
+ interface LoaderStatus {
284
+ readonly kIdle: 0;
285
+ readonly kConnecting: 1;
286
+ readonly kBuffering: 2;
287
+ readonly kError: 3;
288
+ readonly kComplete: 4;
289
+ }
290
+
291
+ interface LoaderErrors {
292
+ readonly OK: 'OK';
293
+ readonly EXCEPTION: 'Exception';
294
+ readonly HTTP_STATUS_CODE_INVALID: 'HttpStatusCodeInvalid';
295
+ readonly CONNECTING_TIMEOUT: 'ConnectingTimeout';
296
+ readonly EARLY_EOF: 'EarlyEof';
297
+ readonly UNRECOVERABLE_EARLY_EOF: 'UnrecoverableEarlyEof';
298
+ }
299
+
300
+ interface LoaderErrorMessage {
301
+ code: number;
302
+ msg: string;
303
+ }
304
+
305
+ interface FeatureList {
306
+ msePlayback: boolean;
307
+ mseLivePlayback: boolean;
308
+ mseH265Playback: boolean;
309
+ networkStreamIO: boolean;
310
+ networkLoaderName: string;
311
+ nativeMP4H264Playback: boolean;
312
+ nativeMP4H265Playback: boolean;
313
+ nativeWebmVP8Playback: boolean;
314
+ nativeWebmVP9Playback: boolean;
315
+ }
316
+
317
+ interface PlayerConstructor<T extends Player> {
318
+ new (mediaDataSource: MediaDataSource, config?: Config): T;
319
+ }
320
+
321
+ interface SEIData {
322
+ type: number;
323
+ size: number;
324
+ uuid: Uint8Array;
325
+ user_data: Uint8Array;
326
+ pts?: number;
327
+ }
328
+
329
+ interface TrackInfo {
330
+ pid: number;
331
+ codec: string;
332
+ lang?: string;
333
+ }
334
+
335
+ interface SubtitleTrackInfo {
336
+ pid: number;
337
+ type: string;
338
+ lang?: string;
339
+ }
340
+
341
+ interface TracksUpdatedInfo {
342
+ audioTracks: TrackInfo[];
343
+ subtitleTracks: SubtitleTrackInfo[];
344
+ }
345
+
346
+ interface Player {
347
+ destroy(): void;
348
+ on(event: string, listener: (...args: any[]) => void): void;
349
+ off(event: string, listener: (...args: any[]) => void): void;
350
+ attachMediaElement(mediaElement: HTMLMediaElement): void;
351
+ detachMediaElement(): void;
352
+ load(): void;
353
+ unload(): void;
354
+ play(): Promise<void> | void;
355
+ pause(): void;
356
+ switchAudioPid(pid: number): void;
357
+ type: string;
358
+ buffered: TimeRanges;
359
+ duration: number;
360
+ volume: number;
361
+ muted: boolean;
362
+ currentTime: number;
363
+ /**
364
+ * @deprecated MSEPlayer/NativePlayer have its own `mediaInfo` field.
365
+ * @desc Keep it for backwards compatibility
366
+ * @since 1.4
367
+ */
368
+ mediaInfo: NativePlayerMediaInfo | MSEPlayerMediaInfo;
369
+ /**
370
+ * @deprecated MSEPlayer/NativePlayer have its own `statisticsInfo` field.
371
+ * @desc Keep it for backwards compatibility
372
+ * @since 1.4
373
+ */
374
+ statisticsInfo: NativePlayerStatisticsInfo | MSEPlayerStatisticsInfo;
375
+ }
376
+
377
+ interface NativePlayerStatisticsInfo {
378
+ playerType: 'NativePlayer';
379
+ url: string;
380
+ decodedFrames?: number;
381
+ droppedFrames?: number;
382
+ }
383
+
384
+ interface MSEPlayerReportStatisticsInfo {
385
+ url: string;
386
+ hasRedirect: boolean;
387
+ redirectedURL?: string;
388
+ speed: number; // KB/s
389
+ loaderType: string;
390
+ currentSegmentIndex: number;
391
+ totalSegmentCount: number;
392
+ }
393
+
394
+ interface MSEPlayerStatisticsInfo extends Partial<MSEPlayerReportStatisticsInfo> {
395
+ playerType: 'MSEPlayer';
396
+ decodedFrames?: number;
397
+ droppedFrames?: number;
398
+ }
399
+
400
+ interface NativePlayerMediaInfo {
401
+ mimeType: string;
402
+ duration?: number;
403
+ width?: number;
404
+ height?: number;
405
+ }
406
+
407
+ interface MSEPlayerMediaInfo extends NativePlayerMediaInfo {
408
+ audioCodec?: string;
409
+ videoCodec?: string;
410
+ audioDataRate?: number;
411
+ videoDataRate?: number;
412
+ hasAudio?: boolean;
413
+ hasVideo?: boolean;
414
+ chromaFormat?: string;
415
+ fps?: number;
416
+
417
+ [k: string]: any;
418
+ }
419
+
420
+ interface MSEPlayer extends Player {
421
+ mediaInfo: MSEPlayerMediaInfo;
422
+ statisticsInfo: MSEPlayerStatisticsInfo;
423
+ }
424
+
425
+ interface NativePlayer extends Player {
426
+ mediaInfo: NativePlayerMediaInfo;
427
+ statisticsInfo: NativePlayerStatisticsInfo;
428
+ }
429
+
430
+ interface LoggingControlConfig {
431
+ forceGlobalTag: boolean;
432
+ globalTag: string;
433
+ enableAll: boolean;
434
+ enableDebug: boolean;
435
+ enableVerbose: boolean;
436
+ enableInfo: boolean;
437
+ enableWarn: boolean;
438
+ enableError: boolean;
439
+ }
440
+
441
+ interface LoggingControl extends LoggingControlConfig {
442
+ getConfig(): LoggingControlConfig;
443
+ applyConfig(config: Partial<LoggingControlConfig>): void;
444
+ addLogListener(listener: (...args: any[]) => void): void;
445
+ removeLogListener(listener: (...args: any[]) => void): void;
446
+ }
447
+
448
+ interface Events {
449
+ ERROR: string;
450
+ LOADING_COMPLETE: string;
451
+ RECOVERED_EARLY_EOF: string;
452
+ MEDIA_INFO: string;
453
+ METADATA_ARRIVED: string;
454
+ SCRIPTDATA_ARRIVED: string;
455
+ TIMED_ID3_METADATA_ARRIVED: string;
456
+ PGS_SUBTITLE_ARRIVED: string;
457
+ SYNCHRONOUS_KLV_METADATA_ARRIVED: string;
458
+ ASYNCHRONOUS_KLV_METADATA_ARRIVED: string;
459
+ SMPTE2038_METADATA_ARRIVED: string;
460
+ SEI_ARRIVED: string;
461
+ SCTE35_METADATA_ARRIVED: string;
462
+ PES_PRIVATE_DATA_DESCRIPTOR: string;
463
+ PES_PRIVATE_DATA_ARRIVED: string;
464
+ STATISTICS_INFO: string;
465
+ TRACKS_UPDATED: string;
466
+ }
467
+
468
+ interface ErrorTypes {
469
+ NETWORK_ERROR: string;
470
+ MEDIA_ERROR: string;
471
+ OTHER_ERROR: string;
472
+ }
473
+
474
+ interface ErrorDetails {
475
+ NETWORK_EXCEPTION: string;
476
+ NETWORK_STATUS_CODE_INVALID: string;
477
+ NETWORK_TIMEOUT: string;
478
+ NETWORK_UNRECOVERABLE_EARLY_EOF: string;
479
+
480
+ MEDIA_MSE_ERROR: string;
481
+
482
+ MEDIA_FORMAT_ERROR: string;
483
+ MEDIA_FORMAT_UNSUPPORTED: string;
484
+ MEDIA_CODEC_UNSUPPORTED: string;
485
+ }
486
+ }
487
+
488
+ declare var Mpegts: {
489
+ createPlayer(mediaDataSource: Mpegts.MediaDataSource, config?: Mpegts.Config): Mpegts.Player;
490
+ isSupported(): boolean;
491
+ getFeatureList(): Mpegts.FeatureList;
492
+
493
+ /**
494
+ * @deprecated Use `Mpegts.BaseLoaderConstructor` instead.
495
+ * Because it's not available on `mpegts` variable.
496
+ * @desc implement interface `BaseLoader`
497
+ * @since 1.4
498
+ */
499
+ BaseLoader: Mpegts.BaseLoaderConstructor;
500
+ /**
501
+ * @deprecated Use `Mpegts.BaseLoaderConstructor` instead.
502
+ * Because it's not available on `mpegts` variable.
503
+ * @since 1.4
504
+ */
505
+ LoaderStatus: Mpegts.LoaderStatus;
506
+ /**
507
+ * @deprecated Use `Mpegts.BaseLoaderConstructor` instead.
508
+ * Because it's not available on `mpegts` variable.
509
+ * @since 1.4
510
+ */
511
+ LoaderErrors: Mpegts.LoaderErrors;
512
+
513
+ readonly version: string;
514
+
515
+ readonly Events: Readonly<Mpegts.Events>;
516
+ readonly ErrorTypes: Readonly<Mpegts.ErrorTypes>;
517
+ readonly ErrorDetails: Readonly<Mpegts.ErrorDetails>;
518
+
519
+ readonly MSEPlayer: Mpegts.PlayerConstructor<Mpegts.MSEPlayer>;
520
+ readonly NativePlayer: Mpegts.PlayerConstructor<Mpegts.NativePlayer>;
521
+ readonly LoggingControl: Mpegts.LoggingControl;
522
+ };
523
+
524
+ export default Mpegts;
@@ -0,0 +1,9 @@
1
+ declare enum MSEEvents {
2
+ ERROR = "error",
3
+ SOURCE_OPEN = "source_open",
4
+ UPDATE_END = "update_end",
5
+ BUFFER_FULL = "buffer_full",
6
+ START_STREAMING = "start_streaming",
7
+ END_STREAMING = "end_streaming"
8
+ }
9
+ export default MSEEvents;
@@ -0,0 +1,24 @@
1
+ declare enum TransmuxingEvents {
2
+ IO_ERROR = "io_error",
3
+ DEMUX_ERROR = "demux_error",
4
+ INIT_SEGMENT = "init_segment",
5
+ MEDIA_SEGMENT = "media_segment",
6
+ LOADING_COMPLETE = "loading_complete",
7
+ RECOVERED_EARLY_EOF = "recovered_early_eof",
8
+ MEDIA_INFO = "media_info",
9
+ METADATA_ARRIVED = "metadata_arrived",
10
+ SCRIPTDATA_ARRIVED = "scriptdata_arrived",
11
+ TRACKS_UPDATED = "tracks_updated",
12
+ TIMED_ID3_METADATA_ARRIVED = "timed_id3_metadata_arrived",
13
+ PGS_SUBTITLE_ARRIVED = "pgs_subtitle_arrived",
14
+ SYNCHRONOUS_KLV_METADATA_ARRIVED = "synchronous_klv_metadata_arrived",
15
+ ASYNCHRONOUS_KLV_METADATA_ARRIVED = "asynchronous_klv_metadata_arrived",
16
+ SMPTE2038_METADATA_ARRIVED = "smpte2038_metadata_arrived",
17
+ SEI_ARRIVED = "sei_arrived",
18
+ SCTE35_METADATA_ARRIVED = "scte35_metadata_arrived",
19
+ PES_PRIVATE_DATA_DESCRIPTOR = "pes_private_data_descriptor",
20
+ PES_PRIVATE_DATA_ARRIVED = "pes_private_data_arrived",
21
+ STATISTICS_INFO = "statistics_info",
22
+ RECOMMEND_SEEKPOINT = "recommend_seekpoint"
23
+ }
24
+ export default TransmuxingEvents;
@@ -0,0 +1,44 @@
1
+ import { MPEG4AudioObjectTypes, MPEG4SamplingFrequencyIndex } from "./mpeg4-audio";
2
+ export declare class AACFrame {
3
+ audio_object_type: MPEG4AudioObjectTypes;
4
+ sampling_freq_index: MPEG4SamplingFrequencyIndex;
5
+ sampling_frequency: number;
6
+ channel_config: number;
7
+ data: Uint8Array;
8
+ }
9
+ export declare class LOASAACFrame extends AACFrame {
10
+ other_data_present: boolean;
11
+ }
12
+ export declare class AACADTSParser {
13
+ private readonly TAG;
14
+ private data_;
15
+ private current_syncword_offset_;
16
+ private eof_flag_;
17
+ private has_last_incomplete_data;
18
+ constructor(data: Uint8Array);
19
+ private findNextSyncwordOffset;
20
+ readNextAACFrame(): AACFrame | null;
21
+ hasIncompleteData(): boolean;
22
+ getIncompleteData(): Uint8Array;
23
+ }
24
+ export declare class AACLOASParser {
25
+ private readonly TAG;
26
+ private data_;
27
+ private current_syncword_offset_;
28
+ private eof_flag_;
29
+ private has_last_incomplete_data;
30
+ constructor(data: Uint8Array);
31
+ private findNextSyncwordOffset;
32
+ private getLATMValue;
33
+ readNextAACFrame(privious?: LOASAACFrame): LOASAACFrame | null;
34
+ hasIncompleteData(): boolean;
35
+ getIncompleteData(): Uint8Array;
36
+ }
37
+ export declare class AudioSpecificConfig {
38
+ config: Array<number>;
39
+ sampling_rate: number;
40
+ channel_count: number;
41
+ codec_mimetype: string;
42
+ original_codec_mimetype: string;
43
+ constructor(frame: AACFrame);
44
+ }
@@ -0,0 +1,70 @@
1
+ export declare class AC3Frame {
2
+ sampling_frequency: number;
3
+ sampling_rate_code: number;
4
+ bit_stream_identification: number;
5
+ bit_stream_mode: number;
6
+ low_frequency_effects_channel_on: number;
7
+ frame_size_code: number;
8
+ channel_count: number;
9
+ channel_mode: number;
10
+ data: Uint8Array;
11
+ }
12
+ export declare class AC3Parser {
13
+ private readonly TAG;
14
+ private data_;
15
+ private current_syncword_offset_;
16
+ private eof_flag_;
17
+ private has_last_incomplete_data;
18
+ constructor(data: Uint8Array);
19
+ private findNextSyncwordOffset;
20
+ readNextAC3Frame(): AC3Frame | null;
21
+ hasIncompleteData(): boolean;
22
+ getIncompleteData(): Uint8Array;
23
+ }
24
+ export declare class AC3Config {
25
+ config: Array<number>;
26
+ sampling_rate: number;
27
+ bit_stream_identification: number;
28
+ bit_stream_mode: number;
29
+ low_frequency_effects_channel_on: number;
30
+ channel_count: number;
31
+ channel_mode: number;
32
+ codec_mimetype: string;
33
+ original_codec_mimetype: string;
34
+ constructor(frame: AC3Frame);
35
+ }
36
+ export declare class EAC3Frame {
37
+ sampling_frequency: number;
38
+ sampling_rate_code: number;
39
+ bit_stream_identification: number;
40
+ low_frequency_effects_channel_on: number;
41
+ num_blks: number;
42
+ frame_size: number;
43
+ channel_count: number;
44
+ channel_mode: number;
45
+ data: Uint8Array;
46
+ }
47
+ export declare class EAC3Parser {
48
+ private readonly TAG;
49
+ private data_;
50
+ private current_syncword_offset_;
51
+ private eof_flag_;
52
+ private has_last_incomplete_data;
53
+ constructor(data: Uint8Array);
54
+ private findNextSyncwordOffset;
55
+ readNextEAC3Frame(): EAC3Frame | null;
56
+ hasIncompleteData(): boolean;
57
+ getIncompleteData(): Uint8Array;
58
+ }
59
+ export declare class EAC3Config {
60
+ config: Array<number>;
61
+ sampling_rate: number;
62
+ bit_stream_identification: number;
63
+ num_blks: number;
64
+ low_frequency_effects_channel_on: number;
65
+ channel_count: number;
66
+ channel_mode: number;
67
+ codec_mimetype: string;
68
+ original_codec_mimetype: string;
69
+ constructor(frame: EAC3Frame);
70
+ }