@remotion/media-parser 4.0.208 → 4.0.210
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/buffer.js +2 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +1 -1
- package/dist/boxes/iso-base-media/make-track.js +14 -2
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +2 -1
- package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
- package/dist/boxes/iso-base-media/moov/moov.d.ts +2 -1
- package/dist/boxes/iso-base-media/moov/moov.js +2 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +6 -3
- package/dist/boxes/iso-base-media/process-box.js +20 -5
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +1 -1
- package/dist/boxes/iso-base-media/stsd/avcc.js +2 -2
- package/dist/boxes/iso-base-media/stsd/ctts.js +2 -5
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +1 -1
- package/dist/boxes/iso-base-media/stsd/hvcc.js +2 -2
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
- package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/samples.js +69 -11
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +2 -1
- package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
- package/dist/boxes/iso-base-media/trak/trak.d.ts +2 -1
- package/dist/boxes/iso-base-media/trak/trak.js +2 -1
- package/dist/boxes/iso-base-media/traversal.d.ts +44 -0
- package/dist/boxes/iso-base-media/traversal.js +211 -0
- package/dist/boxes/webm/color.d.ts +4 -0
- package/dist/boxes/webm/color.js +120 -0
- package/dist/boxes/webm/description.js +1 -1
- package/dist/boxes/webm/get-ready-tracks.js +3 -3
- package/dist/boxes/webm/get-sample-from-block.js +1 -1
- package/dist/boxes/webm/get-track.js +16 -1
- package/dist/boxes/webm/make-track.d.ts +9 -0
- package/dist/boxes/webm/make-track.js +260 -0
- package/dist/boxes/webm/parse-ebml.js +5 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +36 -3
- package/dist/boxes/webm/segments/all-segments.js +34 -6
- package/dist/boxes/webm/traversal.d.ts +26 -1
- package/dist/boxes/webm/traversal.js +214 -1
- package/dist/buffer-iterator.js +6 -0
- package/dist/create/cluster-segment.d.ts +1 -1
- package/dist/create/cluster-segment.js +3 -5
- package/dist/create/cluster.d.ts +13 -0
- package/dist/create/cluster.js +54 -0
- package/dist/create/create-media.d.ts +4 -2
- package/dist/create/create-media.js +87 -47
- package/dist/create/cues.d.ts +0 -0
- package/dist/create/cues.js +1 -0
- package/dist/create/make-duration-with-padding.d.ts +1 -0
- package/dist/create/make-duration-with-padding.js +15 -0
- package/dist/create/matroska-cues.d.ts +6 -0
- package/dist/create/matroska-cues.js +50 -0
- package/dist/create/matroska-info.d.ts +1 -2
- package/dist/create/matroska-info.js +3 -11
- package/dist/create/matroska-seek.d.ts +6 -0
- package/dist/create/matroska-seek.js +32 -0
- package/dist/create/matroska-segment.d.ts +1 -0
- package/dist/create/matroska-segment.js +3 -2
- package/dist/create/matroska-trackentry.d.ts +9 -14
- package/dist/create/matroska-trackentry.js +79 -94
- package/dist/create/timescale.d.ts +1 -0
- package/dist/create/timescale.js +4 -0
- package/dist/emit-available-info.d.ts +12 -0
- package/dist/emit-available-info.js +133 -0
- package/dist/esm/buffer.mjs +57 -0
- package/dist/esm/from-fetch.mjs +72 -0
- package/dist/esm/from-node.mjs +48 -0
- package/dist/esm/from-web-file.mjs +48 -0
- package/dist/esm/index.mjs +6689 -0
- package/dist/esm/web-fs.mjs +67 -0
- package/dist/get-audio-codec.d.ts +5 -5
- package/dist/get-audio-codec.js +41 -57
- package/dist/get-container.d.ts +4 -0
- package/dist/get-container.js +26 -0
- package/dist/get-duration.js +1 -1
- package/dist/get-fps.js +1 -1
- package/dist/get-sample-aspect-ratio.d.ts +1 -1
- package/dist/get-sample-aspect-ratio.js +19 -19
- package/dist/get-tracks.d.ts +13 -0
- package/dist/get-tracks.js +8 -8
- package/dist/get-video-codec.d.ts +5 -2
- package/dist/get-video-codec.js +111 -21
- package/dist/has-all-info.d.ts +2 -2
- package/dist/has-all-info.js +23 -9
- package/dist/index.d.ts +3 -1
- package/dist/options.d.ts +97 -30
- package/dist/parse-media.js +43 -62
- package/dist/parse-video.d.ts +2 -1
- package/dist/parse-video.js +3 -1
- package/dist/parser-state.js +1 -2
- package/dist/readers/from-fetch.js +24 -4
- package/dist/readers/from-node.js +13 -3
- package/dist/readers/from-web-file.js +14 -2
- package/dist/readers/reader.d.ts +6 -1
- package/dist/samples-from-moof.js +1 -1
- package/dist/traversal.d.ts +0 -21
- package/dist/traversal.js +1 -158
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +7 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +58 -0
- package/dist/writers/web-fs.d.ts +1 -0
- package/dist/writers/web-fs.js +42 -18
- package/dist/writers/writer.d.ts +4 -2
- package/fetch.js +2 -0
- package/node.js +2 -0
- package/package.json +43 -8
- package/web-file.js +2 -0
- package/web-fs.js +2 -0
- package/.eslintrc +0 -8
- package/input.webm +0 -0
- package/src/add-new-matroska-tracks.ts +0 -23
- package/src/boxes/iso-base-media/base-type.ts +0 -4
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
- package/src/boxes/iso-base-media/esds/esds.ts +0 -49
- package/src/boxes/iso-base-media/ftyp.ts +0 -39
- package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
- package/src/boxes/iso-base-media/make-track.ts +0 -116
- package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
- package/src/boxes/iso-base-media/mdhd.ts +0 -59
- package/src/boxes/iso-base-media/moov/moov.ts +0 -43
- package/src/boxes/iso-base-media/mvhd.ts +0 -114
- package/src/boxes/iso-base-media/process-box.ts +0 -748
- package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
- package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
- package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
- package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
- package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
- package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
- package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
- package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
- package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
- package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
- package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
- package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
- package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
- package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
- package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
- package/src/boxes/iso-base-media/tfdt.ts +0 -37
- package/src/boxes/iso-base-media/tfhd.ts +0 -66
- package/src/boxes/iso-base-media/tkhd.ts +0 -150
- package/src/boxes/iso-base-media/to-date.ts +0 -9
- package/src/boxes/iso-base-media/trak/trak.ts +0 -43
- package/src/boxes/iso-base-media/trun.ts +0 -74
- package/src/boxes/iso-base-media/void-box.ts +0 -4
- package/src/boxes/webm/allowed-partial-segments.ts +0 -1
- package/src/boxes/webm/av1-codec-private.ts +0 -113
- package/src/boxes/webm/description.ts +0 -104
- package/src/boxes/webm/ebml.ts +0 -98
- package/src/boxes/webm/get-ready-tracks.ts +0 -36
- package/src/boxes/webm/get-sample-from-block.ts +0 -125
- package/src/boxes/webm/get-track.ts +0 -257
- package/src/boxes/webm/make-header.ts +0 -253
- package/src/boxes/webm/parse-ebml.ts +0 -255
- package/src/boxes/webm/parse-webm-header.ts +0 -18
- package/src/boxes/webm/segments/all-segments.ts +0 -888
- package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
- package/src/boxes/webm/segments/parse-children.ts +0 -144
- package/src/boxes/webm/segments/track-entry.ts +0 -38
- package/src/boxes/webm/segments.ts +0 -147
- package/src/boxes/webm/traversal.ts +0 -45
- package/src/buffer-iterator.ts +0 -548
- package/src/create/cluster-segment.ts +0 -62
- package/src/create/create-media.ts +0 -172
- package/src/create/matroska-header.ts +0 -63
- package/src/create/matroska-info.ts +0 -46
- package/src/create/matroska-segment.ts +0 -10
- package/src/create/matroska-trackentry.ts +0 -325
- package/src/get-audio-codec.ts +0 -270
- package/src/get-dimensions.ts +0 -47
- package/src/get-duration.ts +0 -103
- package/src/get-fps.ts +0 -113
- package/src/get-sample-aspect-ratio.ts +0 -204
- package/src/get-sample-positions.ts +0 -93
- package/src/get-tracks.ts +0 -147
- package/src/get-video-codec.ts +0 -117
- package/src/has-all-info.ts +0 -81
- package/src/index.ts +0 -18
- package/src/make-hvc1-codec-strings.ts +0 -55
- package/src/options.ts +0 -118
- package/src/parse-media.ts +0 -183
- package/src/parse-result.ts +0 -79
- package/src/parse-video.ts +0 -83
- package/src/parser-context.ts +0 -10
- package/src/parser-state.ts +0 -178
- package/src/readers/from-fetch.ts +0 -90
- package/src/readers/from-node.ts +0 -51
- package/src/readers/from-web-file.ts +0 -49
- package/src/readers/reader.ts +0 -15
- package/src/samples-from-moof.ts +0 -102
- package/src/test/aspect-ratio.test.ts +0 -42
- package/src/test/av1.test.ts +0 -108
- package/src/test/create-matroska.test.ts +0 -287
- package/src/test/duration.test.ts +0 -18
- package/src/test/keys.test.ts +0 -47
- package/src/test/matroska.test.ts +0 -463
- package/src/test/mvhd.test.ts +0 -94
- package/src/test/parse-esds.test.ts +0 -98
- package/src/test/parse-stco.test.ts +0 -61
- package/src/test/parse-stsc.test.ts +0 -104
- package/src/test/parse-stsz.test.ts +0 -57
- package/src/test/parse-stts.test.ts +0 -38
- package/src/test/parse-video.test.ts +0 -101
- package/src/test/parse-webm.test.ts +0 -17
- package/src/test/samples-from-moof.test.ts +0 -2496
- package/src/test/stream-local.test.ts +0 -743
- package/src/test/stream-remote.test.ts +0 -59
- package/src/test/stream-samples.test.ts +0 -181
- package/src/test/stsd.test.ts +0 -265
- package/src/test/tkhd.test.ts +0 -87
- package/src/traversal.ts +0 -528
- package/src/webcodec-sample-types.ts +0 -29
- package/src/writers/web-fs.ts +0 -50
- package/src/writers/writer.ts +0 -12
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
package/dist/traversal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasSkippedMdatProcessing = exports.
|
|
3
|
+
exports.hasSkippedMdatProcessing = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBox = exports.getMoovBox = exports.getFtypBox = void 0;
|
|
4
4
|
const getFtypBox = (segments) => {
|
|
5
5
|
const ftypBox = segments.find((s) => s.type === 'ftyp-box');
|
|
6
6
|
if (!ftypBox || ftypBox.type !== 'ftyp-box') {
|
|
@@ -188,163 +188,6 @@ const getTrunBoxes = (segment) => {
|
|
|
188
188
|
return trunBoxes;
|
|
189
189
|
};
|
|
190
190
|
exports.getTrunBoxes = getTrunBoxes;
|
|
191
|
-
const getClusterSegment = (segment) => {
|
|
192
|
-
const clusterSegment = segment.value.find((b) => b.type === 'Cluster');
|
|
193
|
-
return clusterSegment !== null && clusterSegment !== void 0 ? clusterSegment : null;
|
|
194
|
-
};
|
|
195
|
-
exports.getClusterSegment = getClusterSegment;
|
|
196
|
-
const getTracksSegment = (segment) => {
|
|
197
|
-
const tracksSegment = segment.value.find((b) => b.type === 'Tracks');
|
|
198
|
-
if (!tracksSegment || tracksSegment.type !== 'Tracks') {
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
return tracksSegment;
|
|
202
|
-
};
|
|
203
|
-
exports.getTracksSegment = getTracksSegment;
|
|
204
|
-
const getTimescaleSegment = (segment) => {
|
|
205
|
-
const infoSegment = segment.value.find((b) => b.type === 'Info');
|
|
206
|
-
if (!infoSegment || infoSegment.type !== 'Info') {
|
|
207
|
-
return null;
|
|
208
|
-
}
|
|
209
|
-
const timescale = infoSegment.value.find((b) => b.type === 'TimestampScale');
|
|
210
|
-
if (!timescale || timescale.type !== 'TimestampScale') {
|
|
211
|
-
return null;
|
|
212
|
-
}
|
|
213
|
-
return timescale;
|
|
214
|
-
};
|
|
215
|
-
exports.getTimescaleSegment = getTimescaleSegment;
|
|
216
|
-
const getVideoSegment = (track) => {
|
|
217
|
-
const videoSegment = track.value.find((b) => b.type === 'Video');
|
|
218
|
-
if (!videoSegment || videoSegment.type !== 'Video') {
|
|
219
|
-
return null;
|
|
220
|
-
}
|
|
221
|
-
return videoSegment !== null && videoSegment !== void 0 ? videoSegment : null;
|
|
222
|
-
};
|
|
223
|
-
exports.getVideoSegment = getVideoSegment;
|
|
224
|
-
const getAudioSegment = (track) => {
|
|
225
|
-
const audioSegment = track.value.find((b) => b.type === 'Audio');
|
|
226
|
-
if (!audioSegment || audioSegment.type !== 'Audio') {
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
return audioSegment !== null && audioSegment !== void 0 ? audioSegment : null;
|
|
230
|
-
};
|
|
231
|
-
exports.getAudioSegment = getAudioSegment;
|
|
232
|
-
const getSampleRate = (track) => {
|
|
233
|
-
const audioSegment = (0, exports.getAudioSegment)(track);
|
|
234
|
-
if (!audioSegment) {
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
237
|
-
const samplingFrequency = audioSegment.value.find((b) => b.type === 'SamplingFrequency');
|
|
238
|
-
if (!samplingFrequency || samplingFrequency.type !== 'SamplingFrequency') {
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
|
-
return samplingFrequency.value.value;
|
|
242
|
-
};
|
|
243
|
-
exports.getSampleRate = getSampleRate;
|
|
244
|
-
const getNumberOfChannels = (track) => {
|
|
245
|
-
const audioSegment = (0, exports.getAudioSegment)(track);
|
|
246
|
-
if (!audioSegment) {
|
|
247
|
-
throw new Error('Could not find audio segment');
|
|
248
|
-
}
|
|
249
|
-
const channels = audioSegment.value.find((b) => b.type === 'Channels');
|
|
250
|
-
if (!channels || channels.type !== 'Channels') {
|
|
251
|
-
return 1;
|
|
252
|
-
}
|
|
253
|
-
return channels.value.value;
|
|
254
|
-
};
|
|
255
|
-
exports.getNumberOfChannels = getNumberOfChannels;
|
|
256
|
-
const getBitDepth = (track) => {
|
|
257
|
-
const audioSegment = (0, exports.getAudioSegment)(track);
|
|
258
|
-
if (!audioSegment) {
|
|
259
|
-
return null;
|
|
260
|
-
}
|
|
261
|
-
const bitDepth = audioSegment.value.find((b) => b.type === 'BitDepth');
|
|
262
|
-
if (!bitDepth || bitDepth.type !== 'BitDepth') {
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
|
-
return bitDepth.value.value;
|
|
266
|
-
};
|
|
267
|
-
exports.getBitDepth = getBitDepth;
|
|
268
|
-
const getPrivateData = (track) => {
|
|
269
|
-
const privateData = track.value.find((b) => b.type === 'CodecPrivate');
|
|
270
|
-
if (!privateData || privateData.type !== 'CodecPrivate') {
|
|
271
|
-
return null;
|
|
272
|
-
}
|
|
273
|
-
return privateData.value;
|
|
274
|
-
};
|
|
275
|
-
exports.getPrivateData = getPrivateData;
|
|
276
|
-
const getWidthSegment = (track) => {
|
|
277
|
-
const videoSegment = (0, exports.getVideoSegment)(track);
|
|
278
|
-
if (!videoSegment) {
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
const width = videoSegment.value.find((b) => b.type === 'PixelWidth');
|
|
282
|
-
if (!width || width.type !== 'PixelWidth') {
|
|
283
|
-
return null;
|
|
284
|
-
}
|
|
285
|
-
return width;
|
|
286
|
-
};
|
|
287
|
-
exports.getWidthSegment = getWidthSegment;
|
|
288
|
-
const getHeightSegment = (track) => {
|
|
289
|
-
const videoSegment = (0, exports.getVideoSegment)(track);
|
|
290
|
-
if (!videoSegment) {
|
|
291
|
-
return null;
|
|
292
|
-
}
|
|
293
|
-
const height = videoSegment.value.find((b) => b.type === 'PixelHeight');
|
|
294
|
-
if (!height || height.type !== 'PixelHeight') {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
return height;
|
|
298
|
-
};
|
|
299
|
-
exports.getHeightSegment = getHeightSegment;
|
|
300
|
-
const getDisplayWidthSegment = (track) => {
|
|
301
|
-
const videoSegment = (0, exports.getVideoSegment)(track);
|
|
302
|
-
if (!videoSegment) {
|
|
303
|
-
return null;
|
|
304
|
-
}
|
|
305
|
-
const displayWidth = videoSegment.value.find((b) => b.type === 'DisplayWidth');
|
|
306
|
-
if (!displayWidth || displayWidth.type !== 'DisplayWidth') {
|
|
307
|
-
return null;
|
|
308
|
-
}
|
|
309
|
-
return displayWidth;
|
|
310
|
-
};
|
|
311
|
-
exports.getDisplayWidthSegment = getDisplayWidthSegment;
|
|
312
|
-
const getDisplayHeightSegment = (track) => {
|
|
313
|
-
const videoSegment = (0, exports.getVideoSegment)(track);
|
|
314
|
-
if (!videoSegment) {
|
|
315
|
-
return null;
|
|
316
|
-
}
|
|
317
|
-
const displayHeight = videoSegment.value.find((b) => b.type === 'DisplayHeight');
|
|
318
|
-
if (!displayHeight || displayHeight.type !== 'DisplayHeight') {
|
|
319
|
-
return null;
|
|
320
|
-
}
|
|
321
|
-
return displayHeight;
|
|
322
|
-
};
|
|
323
|
-
exports.getDisplayHeightSegment = getDisplayHeightSegment;
|
|
324
|
-
const getTrackTypeSegment = (track) => {
|
|
325
|
-
const trackType = track.value.find((b) => b.type === 'TrackType');
|
|
326
|
-
if (!trackType || trackType.type !== 'TrackType') {
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
return trackType;
|
|
330
|
-
};
|
|
331
|
-
exports.getTrackTypeSegment = getTrackTypeSegment;
|
|
332
|
-
const getTrackId = (track) => {
|
|
333
|
-
const trackId = track.value.find((b) => b.type === 'TrackNumber');
|
|
334
|
-
if (!trackId || trackId.type !== 'TrackNumber') {
|
|
335
|
-
throw new Error('Expected track number segment');
|
|
336
|
-
}
|
|
337
|
-
return trackId.value.value;
|
|
338
|
-
};
|
|
339
|
-
exports.getTrackId = getTrackId;
|
|
340
|
-
const getCodecSegment = (track) => {
|
|
341
|
-
const codec = track.value.find((b) => b.type === 'CodecID');
|
|
342
|
-
if (!codec || codec.type !== 'CodecID') {
|
|
343
|
-
return null;
|
|
344
|
-
}
|
|
345
|
-
return codec;
|
|
346
|
-
};
|
|
347
|
-
exports.getCodecSegment = getCodecSegment;
|
|
348
191
|
const hasSkippedMdatProcessing = (anySegment) => {
|
|
349
192
|
const mdat = anySegment.find((b) => b.type === 'mdat-box');
|
|
350
193
|
if (!mdat) {
|
package/dist/truthy.d.ts
ADDED
package/dist/truthy.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bufferWriter = void 0;
|
|
4
|
+
const createContent = () => {
|
|
5
|
+
const buf = new ArrayBuffer(0, {
|
|
6
|
+
// TODO: Educate that the buffer is limited to 100MB
|
|
7
|
+
maxByteLength: 100000000,
|
|
8
|
+
});
|
|
9
|
+
if (!buf.resize) {
|
|
10
|
+
throw new Error('Could not create buffer writer');
|
|
11
|
+
}
|
|
12
|
+
let data = new Uint8Array(buf);
|
|
13
|
+
const write = (newData) => {
|
|
14
|
+
const oldLength = buf.byteLength;
|
|
15
|
+
const newLength = oldLength + newData.byteLength;
|
|
16
|
+
buf.resize(newLength);
|
|
17
|
+
const newArray = new Uint8Array(buf);
|
|
18
|
+
newArray.set(newData, oldLength);
|
|
19
|
+
data = newArray;
|
|
20
|
+
};
|
|
21
|
+
const updateDataAt = (position, newData) => {
|
|
22
|
+
const newArray = new Uint8Array(buf);
|
|
23
|
+
newArray.set(newData, position);
|
|
24
|
+
data = newArray;
|
|
25
|
+
};
|
|
26
|
+
let writPromise = Promise.resolve();
|
|
27
|
+
let removed = false;
|
|
28
|
+
const writer = {
|
|
29
|
+
write: (arr) => {
|
|
30
|
+
writPromise = writPromise.then(() => write(arr));
|
|
31
|
+
return writPromise;
|
|
32
|
+
},
|
|
33
|
+
save: () => {
|
|
34
|
+
if (removed) {
|
|
35
|
+
return Promise.reject(new Error('Already called .remove() on the result'));
|
|
36
|
+
}
|
|
37
|
+
// TODO: Unhardcode name
|
|
38
|
+
return Promise.resolve(new File([data], 'hithere', {}));
|
|
39
|
+
},
|
|
40
|
+
remove() {
|
|
41
|
+
removed = true;
|
|
42
|
+
data = new Uint8Array(0);
|
|
43
|
+
return Promise.resolve();
|
|
44
|
+
},
|
|
45
|
+
getWrittenByteCount: () => buf.byteLength,
|
|
46
|
+
updateDataAt: (position, newData) => {
|
|
47
|
+
writPromise = writPromise.then(() => updateDataAt(position, newData));
|
|
48
|
+
return writPromise;
|
|
49
|
+
},
|
|
50
|
+
waitForFinish: async () => {
|
|
51
|
+
await writPromise;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
return Promise.resolve(writer);
|
|
55
|
+
};
|
|
56
|
+
exports.bufferWriter = {
|
|
57
|
+
createContent,
|
|
58
|
+
};
|
package/dist/writers/web-fs.d.ts
CHANGED
package/dist/writers/web-fs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.webFsWriter = void 0;
|
|
3
|
+
exports.canUseWebFsWriter = exports.webFsWriter = void 0;
|
|
4
4
|
const createContent = async () => {
|
|
5
5
|
const directoryHandle = await navigator.storage.getDirectory();
|
|
6
6
|
const filename = `media-parser-${Math.random().toString().replace('0.', '')}.webm`;
|
|
@@ -9,36 +9,60 @@ const createContent = async () => {
|
|
|
9
9
|
});
|
|
10
10
|
const writable = await fileHandle.createWritable();
|
|
11
11
|
let written = 0;
|
|
12
|
+
let writPromise = Promise.resolve();
|
|
13
|
+
const write = async (arr) => {
|
|
14
|
+
await writable.write(arr);
|
|
15
|
+
written += arr.byteLength;
|
|
16
|
+
};
|
|
17
|
+
const updateDataAt = async (position, data) => {
|
|
18
|
+
await writable.seek(position);
|
|
19
|
+
await writable.write(data);
|
|
20
|
+
await writable.seek(written);
|
|
21
|
+
};
|
|
22
|
+
const remove = async () => {
|
|
23
|
+
await directoryHandle.removeEntry(filename, {
|
|
24
|
+
recursive: true,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
12
27
|
const writer = {
|
|
13
|
-
write:
|
|
14
|
-
|
|
15
|
-
|
|
28
|
+
write: (arr) => {
|
|
29
|
+
writPromise = writPromise.then(() => write(arr));
|
|
30
|
+
return writPromise;
|
|
16
31
|
},
|
|
17
32
|
save: async () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
33
|
+
try {
|
|
34
|
+
await writable.close();
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
// Ignore, could already be closed
|
|
38
|
+
}
|
|
22
39
|
const newHandle = await directoryHandle.getFileHandle(filename, {
|
|
23
40
|
create: true,
|
|
24
41
|
});
|
|
25
42
|
const newFile = await newHandle.getFile();
|
|
26
|
-
|
|
27
|
-
const stream = newFile.stream();
|
|
28
|
-
await stream.pipeTo(pickerWriteable);
|
|
29
|
-
await directoryHandle.removeEntry(filename, {
|
|
30
|
-
recursive: true,
|
|
31
|
-
});
|
|
43
|
+
return newFile;
|
|
32
44
|
},
|
|
33
45
|
getWrittenByteCount: () => written,
|
|
34
|
-
updateDataAt:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
await writable.seek(written);
|
|
46
|
+
updateDataAt: (position, data) => {
|
|
47
|
+
writPromise = writPromise.then(() => updateDataAt(position, data));
|
|
48
|
+
return writPromise;
|
|
38
49
|
},
|
|
50
|
+
waitForFinish: async () => {
|
|
51
|
+
await writPromise;
|
|
52
|
+
},
|
|
53
|
+
remove,
|
|
39
54
|
};
|
|
40
55
|
return writer;
|
|
41
56
|
};
|
|
42
57
|
exports.webFsWriter = {
|
|
43
58
|
createContent,
|
|
44
59
|
};
|
|
60
|
+
const canUseWebFsWriter = async () => {
|
|
61
|
+
const directoryHandle = await navigator.storage.getDirectory();
|
|
62
|
+
const fileHandle = await directoryHandle.getFileHandle('remotion-probe-web-fs-support', {
|
|
63
|
+
create: true,
|
|
64
|
+
});
|
|
65
|
+
const canUse = fileHandle.createWritable !== undefined;
|
|
66
|
+
return canUse;
|
|
67
|
+
};
|
|
68
|
+
exports.canUseWebFsWriter = canUseWebFsWriter;
|
package/dist/writers/writer.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export type Writer = {
|
|
2
2
|
write: (arr: Uint8Array) => Promise<void>;
|
|
3
|
-
save: () => Promise<
|
|
3
|
+
save: () => Promise<File>;
|
|
4
4
|
getWrittenByteCount: () => number;
|
|
5
|
-
updateDataAt: (position: number,
|
|
5
|
+
updateDataAt: (position: number, data: Uint8Array) => Promise<void>;
|
|
6
|
+
waitForFinish: () => Promise<void>;
|
|
7
|
+
remove: () => Promise<void>;
|
|
6
8
|
};
|
|
7
9
|
type CreateContent = () => Promise<Writer>;
|
|
8
10
|
export type WriterInterface = {
|
package/fetch.js
ADDED
package/node.js
ADDED
package/package.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/media-parser",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.210",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/wicg-file-system-access": "2023.10.5",
|
|
11
|
-
"@remotion/renderer": "4.0.
|
|
11
|
+
"@remotion/renderer": "4.0.210"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public"
|
|
@@ -17,11 +17,42 @@
|
|
|
17
17
|
"url": "https://github.com/remotion-dev/remotion/issues"
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
20
|
-
".":
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
".": {
|
|
21
|
+
"require": "./dist/index.js",
|
|
22
|
+
"module": "./dist/esm/index.mjs",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/esm/index.mjs"
|
|
25
|
+
},
|
|
26
|
+
"./node": {
|
|
27
|
+
"require": "./dist/readers/from-node.js",
|
|
28
|
+
"module": "./dist/esm/from-node.mjs",
|
|
29
|
+
"types": "./dist/readers/from-node.d.ts",
|
|
30
|
+
"import": "./dist/esm/from-node.mjs"
|
|
31
|
+
},
|
|
32
|
+
"./fetch": {
|
|
33
|
+
"require": "./dist/readers/from-fetch.js",
|
|
34
|
+
"module": "./dist/esm/from-fetch.mjs",
|
|
35
|
+
"types": "./dist/readers/from-fetch.d.ts",
|
|
36
|
+
"import": "./dist/esm/from-fetch.mjs"
|
|
37
|
+
},
|
|
38
|
+
"./web-file": {
|
|
39
|
+
"require": "./dist/readers/from-web-file.js",
|
|
40
|
+
"module": "./dist/esm/from-web-file.mjs",
|
|
41
|
+
"types": "./dist/readers/from-web-file.d.ts",
|
|
42
|
+
"import": "./dist/esm/from-web-file.mjs"
|
|
43
|
+
},
|
|
44
|
+
"./web-fs": {
|
|
45
|
+
"require": "./dist/writers/web-fs.js",
|
|
46
|
+
"module": "./dist/esm/web-fs.mjs",
|
|
47
|
+
"types": "./dist/writers/web-fs.d.ts",
|
|
48
|
+
"import": "./dist/esm/web-fs.mjs"
|
|
49
|
+
},
|
|
50
|
+
"./buffer": {
|
|
51
|
+
"require": "./dist/writers/buffer.js",
|
|
52
|
+
"module": "./dist/esm/buffer.mjs",
|
|
53
|
+
"types": "./dist/writers/buffer.d.ts",
|
|
54
|
+
"import": "./dist/esm/buffer.mjs"
|
|
55
|
+
},
|
|
25
56
|
"./package.json": "./package.json"
|
|
26
57
|
},
|
|
27
58
|
"typesVersions": {
|
|
@@ -37,6 +68,9 @@
|
|
|
37
68
|
],
|
|
38
69
|
"web-fs": [
|
|
39
70
|
"dist/writers/web-fs.d.ts"
|
|
71
|
+
],
|
|
72
|
+
"buffer": [
|
|
73
|
+
"dist/writers/buffer.d.ts"
|
|
40
74
|
]
|
|
41
75
|
}
|
|
42
76
|
},
|
|
@@ -55,6 +89,7 @@
|
|
|
55
89
|
"formatting": "prettier src --check",
|
|
56
90
|
"lint": "eslint src --ext ts,tsx",
|
|
57
91
|
"test": "bun test src/test",
|
|
58
|
-
"watch": "tsc -w"
|
|
92
|
+
"watch": "tsc -w",
|
|
93
|
+
"build": "bun --env-file=../.env.bundle bundle.ts"
|
|
59
94
|
}
|
|
60
95
|
}
|
package/web-file.js
ADDED
package/web-fs.js
ADDED
package/.eslintrc
DELETED
package/input.webm
DELETED
|
Binary file
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type {Track} from './get-tracks';
|
|
2
|
-
import type {ParserContext} from './parser-context';
|
|
3
|
-
import type {ParserState} from './parser-state';
|
|
4
|
-
|
|
5
|
-
export const registerTrack = async ({
|
|
6
|
-
state,
|
|
7
|
-
options,
|
|
8
|
-
track,
|
|
9
|
-
}: {
|
|
10
|
-
state: ParserState;
|
|
11
|
-
options: ParserContext;
|
|
12
|
-
track: Track;
|
|
13
|
-
}) => {
|
|
14
|
-
if (track.type === 'video' && options.onVideoTrack) {
|
|
15
|
-
const callback = await options.onVideoTrack(track);
|
|
16
|
-
await state.registerVideoSampleCallback(track.trackId, callback ?? null);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (track.type === 'audio' && options.onAudioTrack) {
|
|
20
|
-
const callback = await options.onAudioTrack(track);
|
|
21
|
-
await state.registerAudioSampleCallback(track.trackId, callback ?? null);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import type {BufferIterator} from '../../../buffer-iterator';
|
|
2
|
-
|
|
3
|
-
type UnknownDecoderSpecificConfig = {
|
|
4
|
-
type: 'unknown-decoder-specific-config';
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
type AudioSpecificConfig = {
|
|
8
|
-
type: 'audio-specific-config';
|
|
9
|
-
audioObjectType: number;
|
|
10
|
-
samplingFrequencyIndex: number;
|
|
11
|
-
channelConfiguration: number;
|
|
12
|
-
asBytes: Uint8Array;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export type DecoderSpecificConfig =
|
|
16
|
-
| UnknownDecoderSpecificConfig
|
|
17
|
-
| AudioSpecificConfig;
|
|
18
|
-
|
|
19
|
-
export const parseDecoderSpecificConfig = (
|
|
20
|
-
iterator: BufferIterator,
|
|
21
|
-
): DecoderSpecificConfig => {
|
|
22
|
-
const layerTag = iterator.getUint8();
|
|
23
|
-
const layerSize = iterator.getPaddedFourByteNumber();
|
|
24
|
-
|
|
25
|
-
const start = iterator.counter.getOffset();
|
|
26
|
-
|
|
27
|
-
if (layerTag !== 5) {
|
|
28
|
-
iterator.discard(layerSize);
|
|
29
|
-
return {
|
|
30
|
-
type: 'unknown-decoder-specific-config',
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// https://csclub.uwaterloo.ca/~pbarfuss/ISO14496-3-2009.pdf
|
|
35
|
-
// 1.6.2.1 AudioSpecificConfig
|
|
36
|
-
|
|
37
|
-
const bytes = iterator.getSlice(layerSize);
|
|
38
|
-
iterator.counter.decrement(layerSize);
|
|
39
|
-
|
|
40
|
-
iterator.startReadingBits();
|
|
41
|
-
const audioObjectType = iterator.getBits(5);
|
|
42
|
-
const samplingFrequencyIndex = iterator.getBits(4);
|
|
43
|
-
if (samplingFrequencyIndex === 0xf) {
|
|
44
|
-
iterator.getBits(24);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const channelConfiguration = iterator.getBits(4);
|
|
48
|
-
iterator.stopReadingBits();
|
|
49
|
-
const read = iterator.counter.getOffset() - start;
|
|
50
|
-
if (read < layerSize) {
|
|
51
|
-
iterator.discard(layerSize - read);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Working around Chrome bug
|
|
55
|
-
// https://issues.chromium.org/issues/360083330#comment5
|
|
56
|
-
const patchedAsBytes =
|
|
57
|
-
bytes.byteLength === 2 && bytes[0] === 17 && bytes[1] === 136
|
|
58
|
-
? new Uint8Array([17, 144])
|
|
59
|
-
: bytes;
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
type: 'audio-specific-config',
|
|
63
|
-
audioObjectType,
|
|
64
|
-
samplingFrequencyIndex,
|
|
65
|
-
channelConfiguration,
|
|
66
|
-
asBytes: patchedAsBytes,
|
|
67
|
-
};
|
|
68
|
-
};
|