@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.
- package/LICENSE +202 -0
- package/README.md +158 -0
- package/README_ja.md +153 -0
- package/README_zh.md +157 -0
- package/d.ts/mpegts.d.ts +524 -0
- package/d.ts/src/core/mse-events.d.ts +9 -0
- package/d.ts/src/core/transmuxing-events.d.ts +24 -0
- package/d.ts/src/demux/aac.d.ts +44 -0
- package/d.ts/src/demux/ac3.d.ts +70 -0
- package/d.ts/src/demux/av1-parser.d.ts +77 -0
- package/d.ts/src/demux/av1.d.ts +11 -0
- package/d.ts/src/demux/base-demuxer.d.ts +55 -0
- package/d.ts/src/demux/h264.d.ts +40 -0
- package/d.ts/src/demux/h265.d.ts +65 -0
- package/d.ts/src/demux/klv.d.ts +17 -0
- package/d.ts/src/demux/mp3.d.ts +6 -0
- package/d.ts/src/demux/mpeg4-audio.d.ts +28 -0
- package/d.ts/src/demux/pat-pmt-pes.d.ts +106 -0
- package/d.ts/src/demux/patpmt.d.ts +40 -0
- package/d.ts/src/demux/pes-private-data.d.ts +14 -0
- package/d.ts/src/demux/pgs-data.d.ts +9 -0
- package/d.ts/src/demux/scte35.d.ts +250 -0
- package/d.ts/src/demux/sei.d.ts +8 -0
- package/d.ts/src/demux/smpte2038.d.ts +22 -0
- package/d.ts/src/demux/ts-demuxer.d.ts +124 -0
- package/d.ts/src/player/live-latency-chaser.d.ts +10 -0
- package/d.ts/src/player/live-latency-synchronizer.d.ts +10 -0
- package/d.ts/src/player/loading-controller.d.ts +19 -0
- package/d.ts/src/player/mse-player.d.ts +30 -0
- package/d.ts/src/player/player-engine-dedicated-thread-worker.d.ts +2 -0
- package/d.ts/src/player/player-engine-dedicated-thread.d.ts +48 -0
- package/d.ts/src/player/player-engine-main-thread.d.ts +50 -0
- package/d.ts/src/player/player-engine-worker-cmd-def.d.ts +25 -0
- package/d.ts/src/player/player-engine-worker-msg-def.d.ts +54 -0
- package/d.ts/src/player/player-engine-worker.d.ts +2 -0
- package/d.ts/src/player/player-engine.d.ts +16 -0
- package/d.ts/src/player/player-events.d.ts +21 -0
- package/d.ts/src/player/seeking-handler.d.ts +22 -0
- package/d.ts/src/player/startup-stall-jumper.d.ts +14 -0
- package/d.ts/src/utils/typedarray-equality.d.ts +2 -0
- package/dist/mpegts.js +3 -0
- package/dist/mpegts.js.LICENSE.txt +7 -0
- package/dist/mpegts.js.map +1 -0
- package/package.json +53 -0
- package/src/config.js +67 -0
- package/src/core/features.js +88 -0
- package/src/core/media-info.js +127 -0
- package/src/core/media-segment-info.js +230 -0
- package/src/core/mse-controller.js +599 -0
- package/src/core/mse-events.ts +28 -0
- package/src/core/transmuxer.js +346 -0
- package/src/core/transmuxing-controller.js +628 -0
- package/src/core/transmuxing-events.ts +43 -0
- package/src/core/transmuxing-worker.js +286 -0
- package/src/demux/aac.ts +397 -0
- package/src/demux/ac3.ts +335 -0
- package/src/demux/amf-parser.js +243 -0
- package/src/demux/av1-parser.ts +629 -0
- package/src/demux/av1.ts +103 -0
- package/src/demux/base-demuxer.ts +69 -0
- package/src/demux/demux-errors.js +26 -0
- package/src/demux/exp-golomb.js +116 -0
- package/src/demux/flv-demuxer.js +1854 -0
- package/src/demux/h264.ts +187 -0
- package/src/demux/h265-parser.js +501 -0
- package/src/demux/h265.ts +214 -0
- package/src/demux/klv.ts +40 -0
- package/src/demux/mp3.ts +7 -0
- package/src/demux/mpeg4-audio.ts +45 -0
- package/src/demux/pat-pmt-pes.ts +132 -0
- package/src/demux/pes-private-data.ts +16 -0
- package/src/demux/pgs-data.ts +11 -0
- package/src/demux/scte35.ts +723 -0
- package/src/demux/sei.ts +99 -0
- package/src/demux/smpte2038.ts +89 -0
- package/src/demux/sps-parser.js +298 -0
- package/src/demux/ts-demuxer.ts +2405 -0
- package/src/index.js +4 -0
- package/src/io/fetch-stream-loader.js +266 -0
- package/src/io/io-controller.js +647 -0
- package/src/io/loader.js +134 -0
- package/src/io/param-seek-handler.js +85 -0
- package/src/io/range-seek-handler.js +52 -0
- package/src/io/speed-sampler.js +93 -0
- package/src/io/websocket-loader.js +151 -0
- package/src/io/xhr-moz-chunked-loader.js +211 -0
- package/src/io/xhr-msstream-loader.js +307 -0
- package/src/io/xhr-range-loader.js +366 -0
- package/src/mpegts.js +95 -0
- package/src/player/live-latency-chaser.ts +66 -0
- package/src/player/live-latency-synchronizer.ts +79 -0
- package/src/player/loading-controller.ts +142 -0
- package/src/player/mse-player.ts +150 -0
- package/src/player/native-player.js +262 -0
- package/src/player/player-engine-dedicated-thread.ts +479 -0
- package/src/player/player-engine-main-thread.ts +463 -0
- package/src/player/player-engine-worker-cmd-def.ts +62 -0
- package/src/player/player-engine-worker-msg-def.ts +102 -0
- package/src/player/player-engine-worker.ts +370 -0
- package/src/player/player-engine.ts +35 -0
- package/src/player/player-errors.js +39 -0
- package/src/player/player-events.ts +40 -0
- package/src/player/seeking-handler.ts +205 -0
- package/src/player/startup-stall-jumper.ts +86 -0
- package/src/remux/aac-silent.js +56 -0
- package/src/remux/mp4-generator.js +866 -0
- package/src/remux/mp4-remuxer.js +778 -0
- package/src/utils/browser.js +128 -0
- package/src/utils/exception.js +73 -0
- package/src/utils/logger.js +140 -0
- package/src/utils/logging-control.js +165 -0
- package/src/utils/polyfill.js +68 -0
- package/src/utils/typedarray-equality.ts +69 -0
- package/src/utils/utf8-conv.js +84 -0
- package/src/utils/webworkify-webpack.js +202 -0
- package/tsconfig.json +16 -0
- package/tslint.json +1 -0
- package/types/index.d.ts +3 -0
- package/types/test-flv.ts +8 -0
- package/types/tsconfig.json +24 -0
- package/webpack.config.js +55 -0
package/d.ts/mpegts.d.ts
ADDED
|
@@ -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,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
|
+
}
|