@remotion/media-parser 4.0.265 → 4.0.267
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/buffer-iterator.d.ts +1 -0
- package/dist/buffer-iterator.js +17 -0
- package/dist/containers/aac/parse-aac.js +1 -1
- package/dist/containers/avc/create-sps-pps-data.js +15 -1
- package/dist/containers/avc/interpret-sps.js +8 -2
- package/dist/containers/avc/parse-avc.js +23 -24
- package/dist/containers/flac/parse-streaminfo.js +1 -1
- package/dist/containers/iso-base-media/get-moov-atom.js +3 -2
- package/dist/containers/iso-base-media/process-box.js +9 -2
- package/dist/containers/iso-base-media/trun.js +1 -1
- package/dist/containers/m3u/after-manifest-fetch.d.ts +14 -0
- package/dist/containers/m3u/after-manifest-fetch.js +67 -0
- package/dist/containers/m3u/fetch-m3u8-stream.d.ts +3 -0
- package/dist/containers/m3u/fetch-m3u8-stream.js +18 -0
- package/dist/containers/m3u/get-chunks.d.ts +6 -0
- package/dist/containers/m3u/get-chunks.js +20 -0
- package/dist/containers/m3u/get-duration-from-m3u.d.ts +2 -0
- package/dist/containers/m3u/get-duration-from-m3u.js +9 -0
- package/dist/containers/m3u/get-playlist.d.ts +3 -0
- package/dist/containers/m3u/get-playlist.js +27 -0
- package/dist/containers/m3u/get-streams.d.ts +24 -0
- package/dist/containers/m3u/get-streams.js +80 -0
- package/dist/containers/m3u/parse-directive.d.ts +2 -0
- package/dist/containers/m3u/parse-directive.js +72 -0
- package/dist/containers/m3u/parse-m3u-manifest.d.ts +8 -0
- package/dist/containers/m3u/parse-m3u-manifest.js +18 -0
- package/dist/containers/m3u/parse-m3u-media-directive.d.ts +2 -0
- package/dist/containers/m3u/parse-m3u-media-directive.js +31 -0
- package/dist/containers/m3u/parse-m3u.d.ts +4 -0
- package/dist/containers/m3u/parse-m3u.js +35 -0
- package/dist/containers/m3u/parse-m3u8-text.d.ts +2 -0
- package/dist/containers/m3u/parse-m3u8-text.js +23 -0
- package/dist/containers/m3u/parse-stream-inf.d.ts +3 -0
- package/dist/containers/m3u/parse-stream-inf.js +62 -0
- package/dist/containers/m3u/return-packets.d.ts +16 -0
- package/dist/containers/m3u/return-packets.js +71 -0
- package/dist/containers/m3u/select-stream.d.ts +10 -0
- package/dist/containers/m3u/select-stream.js +19 -0
- package/dist/containers/m3u/types.d.ts +62 -0
- package/dist/containers/m3u/types.js +2 -0
- package/dist/containers/mp3/parse-mpeg-header.js +1 -1
- package/dist/containers/riff/expect-riff-box.js +1 -1
- package/dist/containers/transport-stream/boxes.d.ts +4 -1
- package/dist/containers/transport-stream/find-separator.d.ts +1 -2
- package/dist/containers/transport-stream/find-separator.js +7 -13
- package/dist/containers/transport-stream/handle-aac-packet.js +1 -1
- package/dist/containers/transport-stream/handle-avc-packet.js +1 -1
- package/dist/containers/transport-stream/parse-packet.js +7 -1
- package/dist/containers/transport-stream/parse-pat.d.ts +2 -1
- package/dist/containers/transport-stream/parse-pat.js +16 -1
- package/dist/containers/transport-stream/parse-stream-packet.js +86 -74
- package/dist/containers/wav/parse-fmt.js +1 -1
- package/dist/containers/webm/parse-ebml.js +9 -2
- package/dist/download-and-parse-media.js +32 -29
- package/dist/emit-available-info.js +13 -1
- package/dist/emitter.d.ts +4 -0
- package/dist/emitter.js +4 -0
- package/dist/esm/fetch.mjs +148 -0
- package/dist/esm/index.mjs +1321 -528
- package/dist/esm/node-writer.mjs +113 -0
- package/dist/esm/node.mjs +37 -106
- package/dist/esm/{from-web-file.mjs → web-file.mjs} +2 -7
- package/dist/fetch.d.ts +1 -0
- package/dist/fetch.js +17 -0
- package/dist/file-types/detect-file-type.d.ts +5 -1
- package/dist/file-types/detect-file-type.js +5 -1
- package/dist/file-types/index.js +3 -0
- package/dist/forward-controller.d.ts +7 -0
- package/dist/forward-controller.js +25 -0
- package/dist/get-container.js +3 -0
- package/dist/get-duration.js +35 -2
- package/dist/get-fields-from-callbacks.js +1 -0
- package/dist/get-fps.js +7 -0
- package/dist/get-tracks.d.ts +2 -0
- package/dist/get-tracks.js +29 -4
- package/dist/has-all-info.js +4 -0
- package/dist/index.d.ts +46 -9
- package/dist/index.js +3 -1
- package/dist/init-video.js +8 -0
- package/dist/internal-parse-media.js +11 -4
- package/dist/is-audio-structure.js +3 -0
- package/dist/make-hvc1-codec-strings.js +3 -3
- package/dist/media-parser-controller.js +3 -1
- package/dist/metadata/get-metadata.js +26 -3
- package/dist/node-writer.d.ts +1 -0
- package/dist/node-writer.js +17 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +17 -0
- package/dist/options.d.ts +9 -1
- package/dist/parse-media.js +11 -8
- package/dist/parse-result.d.ts +2 -1
- package/dist/readers/fetch/get-body-and-reader.d.ts +8 -0
- package/dist/readers/fetch/get-body-and-reader.js +42 -0
- package/dist/readers/fetch/resolve-url.d.ts +1 -0
- package/dist/readers/fetch/resolve-url.js +15 -0
- package/dist/readers/from-fetch.js +19 -40
- package/dist/readers/from-node.js +1 -7
- package/dist/readers/from-web-file.js +1 -6
- package/dist/readers/reader.d.ts +1 -2
- package/dist/register-track.d.ts +8 -3
- package/dist/register-track.js +30 -17
- package/dist/run-parse-iteration.js +6 -1
- package/dist/state/can-skip-tracks.js +2 -1
- package/dist/state/emitted-fields.js +1 -0
- package/dist/state/m3u-state.d.ts +29 -0
- package/dist/state/m3u-state.js +48 -0
- package/dist/state/need-samples-for-fields.js +1 -0
- package/dist/state/parser-state.d.ts +36 -1
- package/dist/state/parser-state.js +4 -1
- package/dist/state/structure.d.ts +1 -0
- package/dist/state/structure.js +7 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/web-file.d.ts +1 -0
- package/dist/web-file.js +17 -0
- package/package.json +32 -32
- package/dist/containers/mp3/get-tracks-from-mp3.d.ts +0 -4
- package/dist/containers/mp3/get-tracks-from-mp3.js +0 -25
- package/dist/esm/from-fetch.mjs +0 -237
- package/dist/esm/from-node.mjs +0 -50
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ParserState } from '../../state/parser-state';
|
|
2
|
-
import type { AllTracks } from '../riff/get-tracks-from-avi';
|
|
3
|
-
export declare const getTracksFromMp3OrWavOrAac: (parserState: ParserState) => AllTracks;
|
|
4
|
-
export declare const hasAllTracksFromMp3OrWavOrAac: (parserState: ParserState) => boolean;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasAllTracksFromMp3OrWavOrAac = exports.getTracksFromMp3OrWavOrAac = void 0;
|
|
4
|
-
const getTracksFromMp3OrWavOrAac = (parserState) => {
|
|
5
|
-
const tracks = parserState.callbacks.tracks.getTracks();
|
|
6
|
-
if (tracks.length === 0) {
|
|
7
|
-
throw new Error('No tracks found');
|
|
8
|
-
}
|
|
9
|
-
return {
|
|
10
|
-
audioTracks: tracks.filter((t) => t.type === 'audio'),
|
|
11
|
-
otherTracks: [],
|
|
12
|
-
videoTracks: [],
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
exports.getTracksFromMp3OrWavOrAac = getTracksFromMp3OrWavOrAac;
|
|
16
|
-
const hasAllTracksFromMp3OrWavOrAac = (parserState) => {
|
|
17
|
-
try {
|
|
18
|
-
(0, exports.getTracksFromMp3OrWavOrAac)(parserState);
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
catch (_a) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
exports.hasAllTracksFromMp3OrWavOrAac = hasAllTracksFromMp3OrWavOrAac;
|
package/dist/esm/from-fetch.mjs
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
// src/errors.ts
|
|
2
|
-
class IsAGifError extends Error {
|
|
3
|
-
mimeType;
|
|
4
|
-
sizeInBytes;
|
|
5
|
-
fileName;
|
|
6
|
-
constructor({
|
|
7
|
-
message,
|
|
8
|
-
mimeType,
|
|
9
|
-
sizeInBytes,
|
|
10
|
-
fileName
|
|
11
|
-
}) {
|
|
12
|
-
super(message);
|
|
13
|
-
this.fileName = "IsAGifError";
|
|
14
|
-
this.mimeType = mimeType;
|
|
15
|
-
this.sizeInBytes = sizeInBytes;
|
|
16
|
-
this.fileName = fileName;
|
|
17
|
-
if (Error.captureStackTrace) {
|
|
18
|
-
Error.captureStackTrace(this, IsAGifError);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
class IsAnImageError extends Error {
|
|
24
|
-
imageType;
|
|
25
|
-
dimensions;
|
|
26
|
-
mimeType;
|
|
27
|
-
sizeInBytes;
|
|
28
|
-
fileName;
|
|
29
|
-
constructor({
|
|
30
|
-
dimensions,
|
|
31
|
-
imageType,
|
|
32
|
-
message,
|
|
33
|
-
mimeType,
|
|
34
|
-
sizeInBytes,
|
|
35
|
-
fileName
|
|
36
|
-
}) {
|
|
37
|
-
super(message);
|
|
38
|
-
this.name = "IsAnImageError";
|
|
39
|
-
this.imageType = imageType;
|
|
40
|
-
this.dimensions = dimensions;
|
|
41
|
-
this.mimeType = mimeType;
|
|
42
|
-
this.sizeInBytes = sizeInBytes;
|
|
43
|
-
this.fileName = fileName;
|
|
44
|
-
if (Error.captureStackTrace) {
|
|
45
|
-
Error.captureStackTrace(this, IsAnImageError);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
class IsAPdfError extends Error {
|
|
51
|
-
mimeType;
|
|
52
|
-
sizeInBytes;
|
|
53
|
-
fileName;
|
|
54
|
-
constructor({
|
|
55
|
-
message,
|
|
56
|
-
mimeType,
|
|
57
|
-
sizeInBytes,
|
|
58
|
-
fileName
|
|
59
|
-
}) {
|
|
60
|
-
super(message);
|
|
61
|
-
this.name = "IsAPdfError";
|
|
62
|
-
this.mimeType = mimeType;
|
|
63
|
-
this.sizeInBytes = sizeInBytes;
|
|
64
|
-
this.fileName = fileName;
|
|
65
|
-
if (Error.captureStackTrace) {
|
|
66
|
-
Error.captureStackTrace(this, IsAPdfError);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
class IsAnUnsupportedFileTypeError extends Error {
|
|
72
|
-
mimeType;
|
|
73
|
-
sizeInBytes;
|
|
74
|
-
fileName;
|
|
75
|
-
constructor({
|
|
76
|
-
message,
|
|
77
|
-
mimeType,
|
|
78
|
-
sizeInBytes,
|
|
79
|
-
fileName
|
|
80
|
-
}) {
|
|
81
|
-
super(message);
|
|
82
|
-
this.name = "IsAnUnsupportedFileTypeError";
|
|
83
|
-
this.mimeType = mimeType;
|
|
84
|
-
this.sizeInBytes = sizeInBytes;
|
|
85
|
-
this.fileName = fileName;
|
|
86
|
-
if (Error.captureStackTrace) {
|
|
87
|
-
Error.captureStackTrace(this, IsAnUnsupportedFileTypeError);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
class IsAnUnsupportedAudioTypeError extends Error {
|
|
93
|
-
mimeType;
|
|
94
|
-
sizeInBytes;
|
|
95
|
-
fileName;
|
|
96
|
-
audioType;
|
|
97
|
-
constructor({
|
|
98
|
-
message,
|
|
99
|
-
mimeType,
|
|
100
|
-
sizeInBytes,
|
|
101
|
-
fileName,
|
|
102
|
-
audioType
|
|
103
|
-
}) {
|
|
104
|
-
super(message);
|
|
105
|
-
this.name = "IsAnUnsupportedAudioTypeError";
|
|
106
|
-
this.mimeType = mimeType;
|
|
107
|
-
this.sizeInBytes = sizeInBytes;
|
|
108
|
-
this.fileName = fileName;
|
|
109
|
-
this.audioType = audioType;
|
|
110
|
-
if (Error.captureStackTrace) {
|
|
111
|
-
Error.captureStackTrace(this, IsAnUnsupportedAudioTypeError);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
class MediaParserAbortError extends Error {
|
|
117
|
-
constructor(message) {
|
|
118
|
-
super(message);
|
|
119
|
-
this.name = "MediaParserAbortError";
|
|
120
|
-
this.cause = undefined;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
var hasBeenAborted = (error) => {
|
|
124
|
-
return error instanceof MediaParserAbortError;
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
// src/readers/from-fetch.ts
|
|
128
|
-
function parseContentRange(input) {
|
|
129
|
-
const matches = input.match(/^(\w+) ((\d+)-(\d+)|\*)\/(\d+|\*)$/);
|
|
130
|
-
if (!matches)
|
|
131
|
-
return null;
|
|
132
|
-
const [, unit, , start, end, size] = matches;
|
|
133
|
-
const range = {
|
|
134
|
-
unit,
|
|
135
|
-
start: start != null ? Number(start) : null,
|
|
136
|
-
end: end != null ? Number(end) : null,
|
|
137
|
-
size: size === "*" ? null : Number(size)
|
|
138
|
-
};
|
|
139
|
-
if (range.start === null && range.end === null && range.size === null) {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
return range;
|
|
143
|
-
}
|
|
144
|
-
var validateContentRangeAndDetectIfSupported = (actualRange, parsedContentRange, statusCode) => {
|
|
145
|
-
if (statusCode === 206) {
|
|
146
|
-
return { supportsContentRange: true };
|
|
147
|
-
}
|
|
148
|
-
if (typeof actualRange === "number" && parsedContentRange?.start !== actualRange) {
|
|
149
|
-
if (actualRange === 0) {
|
|
150
|
-
return { supportsContentRange: false };
|
|
151
|
-
}
|
|
152
|
-
throw new Error(`Range header (${actualRange}) does not match content-range header (${parsedContentRange?.start})`);
|
|
153
|
-
}
|
|
154
|
-
if (actualRange !== null && typeof actualRange !== "number" && (parsedContentRange?.start !== actualRange[0] || parsedContentRange?.end !== actualRange[1])) {
|
|
155
|
-
throw new Error(`Range header (${actualRange}) does not match content-range header (${parsedContentRange?.start})`);
|
|
156
|
-
}
|
|
157
|
-
return { supportsContentRange: true };
|
|
158
|
-
};
|
|
159
|
-
var fetchReader = {
|
|
160
|
-
read: async ({ src, range, controller }) => {
|
|
161
|
-
if (typeof src !== "string") {
|
|
162
|
-
throw new Error("src must be a string when using `fetchReader`");
|
|
163
|
-
}
|
|
164
|
-
const resolvedUrl = typeof window !== "undefined" && typeof window.location !== "undefined" ? new URL(src, window.location.origin).toString() : src;
|
|
165
|
-
if (!resolvedUrl.startsWith("https://") && !resolvedUrl.startsWith("blob:") && !resolvedUrl.startsWith("http://")) {
|
|
166
|
-
return Promise.reject(new Error(resolvedUrl + " is not a URL - needs to start with http:// or https:// or blob:. If you want to read a local file, pass `reader: nodeReader` to parseMedia()."));
|
|
167
|
-
}
|
|
168
|
-
const ownController = new AbortController;
|
|
169
|
-
const cache = typeof navigator !== "undefined" && navigator.userAgent.includes("Cloudflare-Workers") ? undefined : "no-store";
|
|
170
|
-
const actualRange = range === null ? 0 : range;
|
|
171
|
-
const res = await fetch(resolvedUrl, {
|
|
172
|
-
headers: typeof actualRange === "number" ? {
|
|
173
|
-
Range: `bytes=${actualRange}-`
|
|
174
|
-
} : {
|
|
175
|
-
Range: `bytes=${`${actualRange[0]}-${actualRange[1]}`}`
|
|
176
|
-
},
|
|
177
|
-
signal: ownController.signal,
|
|
178
|
-
cache
|
|
179
|
-
});
|
|
180
|
-
const contentRange = res.headers.get("content-range");
|
|
181
|
-
const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
|
|
182
|
-
const { supportsContentRange } = validateContentRangeAndDetectIfSupported(actualRange, parsedContentRange, res.status);
|
|
183
|
-
controller._internals.signal.addEventListener("abort", () => {
|
|
184
|
-
ownController.abort(new MediaParserAbortError("Aborted by user"));
|
|
185
|
-
}, { once: true });
|
|
186
|
-
if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
|
|
187
|
-
throw new Error(`Server returned status code ${res.status} for ${src} and range ${actualRange}`);
|
|
188
|
-
}
|
|
189
|
-
if (!res.body) {
|
|
190
|
-
throw new Error("No body");
|
|
191
|
-
}
|
|
192
|
-
const length = res.headers.get("content-length");
|
|
193
|
-
const contentLength = length === null ? null : parseInt(length, 10);
|
|
194
|
-
const contentDisposition = res.headers.get("content-disposition");
|
|
195
|
-
const name = contentDisposition?.match(/filename="([^"]+)"/)?.[1];
|
|
196
|
-
const fallbackName = src.split("/").pop();
|
|
197
|
-
const reader = res.body.getReader();
|
|
198
|
-
if (controller) {
|
|
199
|
-
controller._internals.signal.addEventListener("abort", () => {
|
|
200
|
-
reader.cancel().catch(() => {
|
|
201
|
-
});
|
|
202
|
-
}, { once: true });
|
|
203
|
-
}
|
|
204
|
-
return {
|
|
205
|
-
reader: {
|
|
206
|
-
reader,
|
|
207
|
-
abort: () => {
|
|
208
|
-
ownController.abort();
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
contentLength,
|
|
212
|
-
contentType: res.headers.get("content-type"),
|
|
213
|
-
name: name ?? fallbackName,
|
|
214
|
-
supportsContentRange
|
|
215
|
-
};
|
|
216
|
-
},
|
|
217
|
-
getLength: async (src) => {
|
|
218
|
-
if (typeof src !== "string") {
|
|
219
|
-
throw new Error("src must be a string when using `fetchReader`");
|
|
220
|
-
}
|
|
221
|
-
const res = await fetch(src, {
|
|
222
|
-
method: "HEAD"
|
|
223
|
-
});
|
|
224
|
-
if (!res.body) {
|
|
225
|
-
throw new Error("No body");
|
|
226
|
-
}
|
|
227
|
-
const length = res.headers.get("content-length");
|
|
228
|
-
if (!length) {
|
|
229
|
-
throw new Error("No content-length");
|
|
230
|
-
}
|
|
231
|
-
return parseInt(length, 10);
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
export {
|
|
235
|
-
parseContentRange,
|
|
236
|
-
fetchReader
|
|
237
|
-
};
|
package/dist/esm/from-node.mjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
// src/readers/from-node.ts
|
|
2
|
-
import { createReadStream, statSync } from "fs";
|
|
3
|
-
import { sep } from "path";
|
|
4
|
-
import { Readable } from "stream";
|
|
5
|
-
var nodeReader = {
|
|
6
|
-
read: ({ src, range, controller }) => {
|
|
7
|
-
if (typeof src !== "string") {
|
|
8
|
-
throw new Error("src must be a string when using `nodeReader`");
|
|
9
|
-
}
|
|
10
|
-
const ownController = new AbortController;
|
|
11
|
-
const stream = createReadStream(src, {
|
|
12
|
-
start: range === null ? 0 : typeof range === "number" ? range : range[0],
|
|
13
|
-
end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1],
|
|
14
|
-
signal: ownController.signal
|
|
15
|
-
});
|
|
16
|
-
controller._internals.signal.addEventListener("abort", () => {
|
|
17
|
-
ownController.abort();
|
|
18
|
-
}, { once: true });
|
|
19
|
-
const stats = statSync(src);
|
|
20
|
-
const reader = Readable.toWeb(stream).getReader();
|
|
21
|
-
if (controller) {
|
|
22
|
-
controller._internals.signal.addEventListener("abort", () => {
|
|
23
|
-
reader.cancel().catch(() => {
|
|
24
|
-
});
|
|
25
|
-
}, { once: true });
|
|
26
|
-
}
|
|
27
|
-
return Promise.resolve({
|
|
28
|
-
reader: {
|
|
29
|
-
reader,
|
|
30
|
-
abort: () => {
|
|
31
|
-
ownController.abort();
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
contentLength: stats.size,
|
|
35
|
-
contentType: null,
|
|
36
|
-
name: src.split(sep).pop(),
|
|
37
|
-
supportsContentRange: true
|
|
38
|
-
});
|
|
39
|
-
},
|
|
40
|
-
getLength: (src) => {
|
|
41
|
-
if (typeof src !== "string") {
|
|
42
|
-
throw new Error("src must be a string when using `nodeReader`");
|
|
43
|
-
}
|
|
44
|
-
const stats = statSync(src);
|
|
45
|
-
return Promise.resolve(stats.size);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
export {
|
|
49
|
-
nodeReader
|
|
50
|
-
};
|