@remotion/media-parser 4.0.317 → 4.0.319

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 (39) hide show
  1. package/dist/containers/avc/parse-avc.js +5 -1
  2. package/dist/containers/flac/parse-flac-frame.js +5 -1
  3. package/dist/containers/iso-base-media/get-moov-atom.js +5 -1
  4. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +5 -1
  5. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +5 -1
  6. package/dist/containers/iso-base-media/moov/mvhd.js +10 -2
  7. package/dist/containers/iso-base-media/parse-icc-profile.js +10 -2
  8. package/dist/containers/riff/seek/fetch-idx1.js +5 -1
  9. package/dist/containers/transport-stream/adts-header.js +5 -1
  10. package/dist/containers/wav/parse-fact.d.ts +5 -0
  11. package/dist/containers/wav/parse-fact.js +18 -0
  12. package/dist/containers/wav/parse-fmt.js +9 -5
  13. package/dist/containers/wav/parse-wav.js +4 -0
  14. package/dist/containers/wav/subformats.d.ts +4 -0
  15. package/dist/containers/wav/subformats.js +17 -0
  16. package/dist/containers/wav/types.d.ts +5 -1
  17. package/dist/containers/webm/av1-codec-private.js +5 -1
  18. package/dist/containers/webm/description.js +5 -1
  19. package/dist/containers/webm/get-sample-from-block.js +5 -1
  20. package/dist/containers/webm/make-track.js +10 -2
  21. package/dist/containers/webm/seek/fetch-web-cues.js +5 -1
  22. package/dist/esm/index.mjs +237 -78
  23. package/dist/esm/universal.mjs +3 -3
  24. package/dist/esm/web.mjs +3 -3
  25. package/dist/esm/worker-server-entry.mjs +236 -77
  26. package/dist/esm/worker-web-entry.mjs +236 -77
  27. package/dist/index.d.ts +5 -1
  28. package/dist/iterator/buffer-iterator.d.ts +6 -1
  29. package/dist/iterator/buffer-iterator.js +25 -25
  30. package/dist/iterator/buffer-manager.d.ts +5 -3
  31. package/dist/iterator/buffer-manager.js +24 -23
  32. package/dist/iterator/polyfilled-arraybuffer.d.ts +6 -0
  33. package/dist/iterator/polyfilled-arraybuffer.js +21 -0
  34. package/dist/readers/from-fetch.js +3 -4
  35. package/dist/remotion-license-acknowledge.js +1 -2
  36. package/dist/state/parser-state.js +5 -1
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +4 -4
@@ -7,9 +7,9 @@ const file_types_1 = require("../file-types");
7
7
  const log_1 = require("../log");
8
8
  const buffer_manager_1 = require("./buffer-manager");
9
9
  const offset_counter_1 = require("./offset-counter");
10
- const getArrayBufferIterator = (initialData, maxBytes) => {
10
+ const getArrayBufferIterator = ({ initialData, maxBytes, logLevel, }) => {
11
11
  const counter = (0, offset_counter_1.makeOffsetCounter)(0);
12
- const { uintArray, view, addData, destroy, removeBytesRead, skipTo, replaceData, } = (0, buffer_manager_1.bufferManager)({ initialData, maxBytes, counter });
12
+ const { getUint8Array, getView, addData, destroy, removeBytesRead, skipTo, replaceData, } = (0, buffer_manager_1.bufferManager)({ initialData, maxBytes, counter, logLevel });
13
13
  const startCheckpoint = () => {
14
14
  const checkpoint = counter.getOffset();
15
15
  return {
@@ -19,7 +19,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
19
19
  };
20
20
  };
21
21
  const getSlice = (amount) => {
22
- const value = uintArray.slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
22
+ const value = getUint8Array().slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
23
23
  counter.increment(value.length);
24
24
  return value;
25
25
  };
@@ -52,7 +52,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
52
52
  return str;
53
53
  };
54
54
  const getUint8 = () => {
55
- const val = view.getUint8(counter.getDiscardedOffset());
55
+ const val = getView().getUint8(counter.getDiscardedOffset());
56
56
  counter.increment(1);
57
57
  return val;
58
58
  };
@@ -107,12 +107,12 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
107
107
  return lastInt;
108
108
  };
109
109
  const getUint32 = () => {
110
- const val = view.getUint32(counter.getDiscardedOffset());
110
+ const val = getView().getUint32(counter.getDiscardedOffset());
111
111
  counter.increment(4);
112
112
  return val;
113
113
  };
114
114
  const getSyncSafeInt32 = () => {
115
- const val = view.getUint32(counter.getDiscardedOffset());
115
+ const val = getView().getUint32(counter.getDiscardedOffset());
116
116
  counter.increment(4);
117
117
  return (((val & 0x7f000000) >> 3) |
118
118
  ((val & 0x007f0000) >> 2) |
@@ -120,12 +120,12 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
120
120
  (val & 0x0000007f));
121
121
  };
122
122
  const getUint64 = (littleEndian = false) => {
123
- const val = view.getBigUint64(counter.getDiscardedOffset(), littleEndian);
123
+ const val = getView().getBigUint64(counter.getDiscardedOffset(), littleEndian);
124
124
  counter.increment(8);
125
125
  return val;
126
126
  };
127
127
  const getInt64 = (littleEndian = false) => {
128
- const val = view.getBigInt64(counter.getDiscardedOffset(), littleEndian);
128
+ const val = getView().getBigInt64(counter.getDiscardedOffset(), littleEndian);
129
129
  counter.increment(8);
130
130
  return val;
131
131
  };
@@ -142,22 +142,22 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
142
142
  };
143
143
  };
144
144
  const getUint32Le = () => {
145
- const val = view.getUint32(counter.getDiscardedOffset(), true);
145
+ const val = getView().getUint32(counter.getDiscardedOffset(), true);
146
146
  counter.increment(4);
147
147
  return val;
148
148
  };
149
149
  const getInt32Le = () => {
150
- const val = view.getInt32(counter.getDiscardedOffset(), true);
150
+ const val = getView().getInt32(counter.getDiscardedOffset(), true);
151
151
  counter.increment(4);
152
152
  return val;
153
153
  };
154
154
  const getInt32 = () => {
155
- const val = view.getInt32(counter.getDiscardedOffset());
155
+ const val = getView().getInt32(counter.getDiscardedOffset());
156
156
  counter.increment(4);
157
157
  return val;
158
158
  };
159
159
  const bytesRemaining = () => {
160
- return uintArray.byteLength - counter.getDiscardedOffset();
160
+ return getUint8Array().byteLength - counter.getDiscardedOffset();
161
161
  };
162
162
  const readExpGolomb = () => {
163
163
  if (!bitReadingMode) {
@@ -277,7 +277,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
277
277
  return new TextDecoder().decode(atom);
278
278
  },
279
279
  detectFileType: () => {
280
- return (0, file_types_1.detectFileType)(uintArray);
280
+ return (0, file_types_1.detectFileType)(getUint8Array());
281
281
  },
282
282
  getPaddedFourByteNumber,
283
283
  getMatroskaSegmentId: () => {
@@ -373,36 +373,36 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
373
373
  return actualValue;
374
374
  },
375
375
  getInt8: () => {
376
- const val = view.getInt8(counter.getDiscardedOffset());
376
+ const val = getView().getInt8(counter.getDiscardedOffset());
377
377
  counter.increment(1);
378
378
  return val;
379
379
  },
380
380
  getUint16: () => {
381
- const val = view.getUint16(counter.getDiscardedOffset());
381
+ const val = getView().getUint16(counter.getDiscardedOffset());
382
382
  counter.increment(2);
383
383
  return val;
384
384
  },
385
385
  getUint16Le: () => {
386
- const val = view.getUint16(counter.getDiscardedOffset(), true);
386
+ const val = getView().getUint16(counter.getDiscardedOffset(), true);
387
387
  counter.increment(2);
388
388
  return val;
389
389
  },
390
390
  getUint24: () => {
391
- const val1 = view.getUint8(counter.getDiscardedOffset());
392
- const val2 = view.getUint8(counter.getDiscardedOffset() + 1);
393
- const val3 = view.getUint8(counter.getDiscardedOffset() + 2);
391
+ const val1 = getView().getUint8(counter.getDiscardedOffset());
392
+ const val2 = getView().getUint8(counter.getDiscardedOffset() + 1);
393
+ const val3 = getView().getUint8(counter.getDiscardedOffset() + 2);
394
394
  counter.increment(3);
395
395
  return (val1 << 16) | (val2 << 8) | val3;
396
396
  },
397
397
  getInt24: () => {
398
- const val1 = view.getInt8(counter.getDiscardedOffset());
399
- const val2 = view.getUint8(counter.getDiscardedOffset() + 1);
400
- const val3 = view.getUint8(counter.getDiscardedOffset() + 2);
398
+ const val1 = getView().getInt8(counter.getDiscardedOffset());
399
+ const val2 = getView().getUint8(counter.getDiscardedOffset() + 1);
400
+ const val3 = getView().getUint8(counter.getDiscardedOffset() + 2);
401
401
  counter.increment(3);
402
402
  return (val1 << 16) | (val2 << 8) | val3;
403
403
  },
404
404
  getInt16: () => {
405
- const val = view.getInt16(counter.getDiscardedOffset());
405
+ const val = getView().getInt16(counter.getDiscardedOffset());
406
406
  counter.increment(2);
407
407
  return val;
408
408
  },
@@ -455,13 +455,13 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
455
455
  };
456
456
  },
457
457
  getFloat64: () => {
458
- const val = view.getFloat64(counter.getDiscardedOffset());
458
+ const val = getView().getFloat64(counter.getDiscardedOffset());
459
459
  counter.increment(8);
460
460
  return val;
461
461
  },
462
462
  readUntilNullTerminator,
463
463
  getFloat32: () => {
464
- const val = view.getFloat32(counter.getDiscardedOffset());
464
+ const val = getView().getFloat32(counter.getDiscardedOffset());
465
465
  counter.increment(4);
466
466
  return val;
467
467
  },
@@ -1,12 +1,14 @@
1
+ import type { MediaParserLogLevel } from '../log';
1
2
  import type { ParseMediaMode } from '../options';
2
3
  import type { OffsetCounter } from './offset-counter';
3
- export declare const bufferManager: ({ initialData, maxBytes, counter, }: {
4
+ export declare const bufferManager: ({ initialData, maxBytes, counter, logLevel, }: {
4
5
  initialData: Uint8Array;
5
6
  maxBytes: number;
6
7
  counter: OffsetCounter;
8
+ logLevel: MediaParserLogLevel;
7
9
  }) => {
8
- view: DataView<ArrayBuffer>;
9
- uintArray: Uint8Array<ArrayBuffer>;
10
+ getView: () => DataView<ArrayBufferLike>;
11
+ getUint8Array: () => Uint8Array<ArrayBufferLike>;
10
12
  destroy: () => void;
11
13
  addData: (newData: Uint8Array) => void;
12
14
  skipTo: (offset: number) => void;
@@ -1,34 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bufferManager = void 0;
4
+ const log_1 = require("../log");
5
+ const polyfilled_arraybuffer_1 = require("./polyfilled-arraybuffer");
4
6
  const makeBufferWithMaxBytes = (initialData, maxBytes) => {
5
7
  const maxByteLength = Math.min(maxBytes, 2 ** 31);
6
8
  try {
7
9
  const buf = new ArrayBuffer(initialData.byteLength, {
8
10
  maxByteLength,
9
11
  });
10
- return buf;
12
+ return new polyfilled_arraybuffer_1.ResizableBuffer(buf);
11
13
  }
12
14
  catch (e) {
13
15
  // Cloudflare Workers have a limit of 128MB max array buffer size
14
16
  if (e instanceof RangeError && maxBytes > 2 ** 27) {
15
- return new ArrayBuffer(initialData.byteLength, {
17
+ return new polyfilled_arraybuffer_1.ResizableBuffer(new ArrayBuffer(initialData.byteLength, {
16
18
  maxByteLength: 2 ** 27,
17
- });
19
+ }));
18
20
  }
19
21
  throw e;
20
22
  }
21
23
  };
22
- const bufferManager = ({ initialData, maxBytes, counter, }) => {
24
+ const bufferManager = ({ initialData, maxBytes, counter, logLevel, }) => {
23
25
  const buf = makeBufferWithMaxBytes(initialData, maxBytes);
24
- if (!buf.resize) {
25
- throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111');
26
+ if (!buf.buffer.resize) {
27
+ log_1.Log.warn(logLevel, '`ArrayBuffer.resize` is not supported in this Runtime. Using slow polyfill.');
26
28
  }
27
- let uintArray = new Uint8Array(buf);
28
- uintArray.set(initialData);
29
- let view = new DataView(uintArray.buffer);
29
+ buf.uintarray.set(initialData);
30
+ let view = new DataView(buf.uintarray.buffer);
30
31
  const destroy = () => {
31
- uintArray = new Uint8Array(0);
32
+ buf.uintarray = new Uint8Array(0);
32
33
  buf.resize(0);
33
34
  };
34
35
  const flushBytesRead = (force, mode) => {
@@ -43,11 +44,11 @@ const bufferManager = ({ initialData, maxBytes, counter, }) => {
43
44
  return { bytesRemoved: 0, removedData: null };
44
45
  }
45
46
  counter.discardBytes(bytesToRemove);
46
- const removedData = mode === 'download' ? uintArray.slice(0, bytesToRemove) : null;
47
- const newData = uintArray.slice(bytesToRemove);
48
- uintArray.set(newData);
47
+ const removedData = mode === 'download' ? buf.uintarray.slice(0, bytesToRemove) : null;
48
+ const newData = buf.uintarray.slice(bytesToRemove);
49
+ buf.uintarray.set(newData);
49
50
  buf.resize(newData.byteLength);
50
- view = new DataView(uintArray.buffer);
51
+ view = new DataView(buf.uintarray.buffer);
51
52
  return { bytesRemoved: bytesToRemove, removedData };
52
53
  };
53
54
  const skipTo = (offset) => {
@@ -63,7 +64,7 @@ const bufferManager = ({ initialData, maxBytes, counter, }) => {
63
64
  counter.increment(offset - currentOffset);
64
65
  };
65
66
  const addData = (newData) => {
66
- const oldLength = buf.byteLength;
67
+ const oldLength = buf.buffer.byteLength;
67
68
  const newLength = oldLength + newData.byteLength;
68
69
  if (newLength < oldLength) {
69
70
  throw new Error('Cannot decrement size');
@@ -72,15 +73,15 @@ const bufferManager = ({ initialData, maxBytes, counter, }) => {
72
73
  throw new Error(`Exceeded maximum byte length ${maxBytes} with ${newLength}`);
73
74
  }
74
75
  buf.resize(newLength);
75
- uintArray = new Uint8Array(buf);
76
- uintArray.set(newData, oldLength);
77
- view = new DataView(uintArray.buffer);
76
+ buf.uintarray = new Uint8Array(buf.buffer);
77
+ buf.uintarray.set(newData, oldLength);
78
+ view = new DataView(buf.uintarray.buffer);
78
79
  };
79
80
  const replaceData = (newData, seekTo) => {
80
81
  buf.resize(newData.byteLength);
81
- uintArray = new Uint8Array(buf);
82
- uintArray.set(newData);
83
- view = new DataView(uintArray.buffer);
82
+ buf.uintarray = new Uint8Array(buf.buffer);
83
+ buf.uintarray.set(newData);
84
+ view = new DataView(buf.uintarray.buffer);
84
85
  counter.setDiscardedOffset(seekTo);
85
86
  // reset counter to 0
86
87
  counter.decrement(counter.getOffset());
@@ -88,8 +89,8 @@ const bufferManager = ({ initialData, maxBytes, counter, }) => {
88
89
  counter.increment(seekTo);
89
90
  };
90
91
  return {
91
- view,
92
- uintArray,
92
+ getView: () => view,
93
+ getUint8Array: () => buf.uintarray,
93
94
  destroy,
94
95
  addData,
95
96
  skipTo,
@@ -0,0 +1,6 @@
1
+ export declare class ResizableBuffer {
2
+ buffer: ArrayBuffer;
3
+ uintarray: Uint8Array;
4
+ constructor(buffer: ArrayBuffer);
5
+ resize(newLength: number): void;
6
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResizableBuffer = void 0;
4
+ class ResizableBuffer {
5
+ constructor(buffer) {
6
+ this.buffer = buffer;
7
+ this.uintarray = new Uint8Array(buffer);
8
+ }
9
+ resize(newLength) {
10
+ if (typeof this.buffer.resize === 'function') {
11
+ this.buffer.resize(newLength);
12
+ }
13
+ else {
14
+ const newBuffer = new ArrayBuffer(newLength);
15
+ new Uint8Array(newBuffer).set(new Uint8Array(this.buffer).subarray(0, Math.min(this.buffer.byteLength, newLength)));
16
+ this.buffer = newBuffer;
17
+ this.uintarray = new Uint8Array(newBuffer);
18
+ }
19
+ }
20
+ }
21
+ exports.ResizableBuffer = ResizableBuffer;
@@ -82,6 +82,9 @@ const makeFetchRequest = async ({ range, src, controller, }) => {
82
82
  const parsedContentRange = contentRange
83
83
  ? parseContentRange(contentRange)
84
84
  : null;
85
+ if (!res.ok) {
86
+ throw new Error(`Server returned status code ${res.status} for ${resolvedUrl} and range ${requestedRange}`);
87
+ }
85
88
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported({
86
89
  requestedRange,
87
90
  parsedContentRange,
@@ -92,10 +95,6 @@ const makeFetchRequest = async ({ range, src, controller, }) => {
92
95
  ownController.abort(new errors_1.MediaParserAbortError('Aborted by user'));
93
96
  }, { once: true });
94
97
  }
95
- if (res.status.toString().startsWith('4') ||
96
- res.status.toString().startsWith('5')) {
97
- throw new Error(`Server returned status code ${res.status} for ${resolvedUrl} and range ${requestedRange}`);
98
- }
99
98
  const contentDisposition = res.headers.get('content-disposition');
100
99
  const name = (_a = contentDisposition === null || contentDisposition === void 0 ? void 0 : contentDisposition.match(/filename="([^"]+)"/)) === null || _a === void 0 ? void 0 : _a[1];
101
100
  const { contentLength, needsContentRange, reader } = await (0, get_body_and_reader_1.getLengthAndReader)({
@@ -11,7 +11,6 @@ const warnIfRemotionLicenseNotAcknowledged = ({ acknowledgeRemotionLicense, logL
11
11
  return;
12
12
  }
13
13
  warningShown = true;
14
- log_1.Log.warn(logLevel, 'Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license');
15
- log_1.Log.warn(logLevel, `Pass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
14
+ log_1.Log.warn(logLevel, `Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license\nPass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
16
15
  };
17
16
  exports.warnIfRemotionLicenseNotAcknowledged = warnIfRemotionLicenseNotAcknowledged;
@@ -26,7 +26,11 @@ const video_section_1 = require("./video-section");
26
26
  const makeParserState = ({ hasAudioTrackHandlers, hasVideoTrackHandlers, controller, onAudioTrack, onVideoTrack, contentLength, logLevel, mode, src, readerInterface, onDiscardedData, selectM3uStreamFn, selectM3uAssociatedPlaylistsFn, m3uPlaylistContext, contentType, name, callbacks, fieldsInReturnValue, mimeType, initialReaderInstance, makeSamplesStartAtZero, prefetchCache, }) => {
27
27
  let skippedBytes = 0;
28
28
  const returnValue = {};
29
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array([]), contentLength);
29
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
30
+ initialData: new Uint8Array([]),
31
+ maxBytes: contentLength,
32
+ logLevel,
33
+ });
30
34
  const increaseSkippedBytes = (bytes) => {
31
35
  skippedBytes += bytes;
32
36
  };
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.0.317";
1
+ export declare const VERSION = "4.0.319";
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Automatically generated on publish
5
- exports.VERSION = '4.0.317';
5
+ exports.VERSION = '4.0.319';
package/package.json CHANGED
@@ -3,15 +3,15 @@
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.317",
6
+ "version": "4.0.319",
7
7
  "main": "dist/index.js",
8
8
  "sideEffects": false,
9
9
  "devDependencies": {
10
10
  "@types/wicg-file-system-access": "2023.10.5",
11
11
  "eslint": "9.19.0",
12
12
  "@types/bun": "1.2.8",
13
- "@remotion/example-videos": "4.0.317",
14
- "@remotion/eslint-config-internal": "4.0.317"
13
+ "@remotion/example-videos": "4.0.319",
14
+ "@remotion/eslint-config-internal": "4.0.319"
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"
@@ -116,7 +116,7 @@
116
116
  "homepage": "https://www.remotion.dev/docs/media-parser",
117
117
  "description": "A pure JavaScript library for parsing video files",
118
118
  "scripts": {
119
- "formatting": "prettier src --check",
119
+ "formatting": "prettier --experimental-cli src --check",
120
120
  "lint": "eslint src",
121
121
  "test": "bun test src/test",
122
122
  "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts"