@remotion/media-parser 4.0.227 → 4.0.228

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.
@@ -1,2 +1,2 @@
1
- export declare const measureEBMLVarInt: (value: number) => 2 | 1 | 4 | 3 | 5 | 6;
1
+ export declare const measureEBMLVarInt: (value: number) => 1 | 2 | 5 | 3 | 6 | 4;
2
2
  export declare const getVariableInt: (value: number, minWidth: number | null) => Uint8Array;
@@ -12,4 +12,8 @@ export type MediaFn = {
12
12
  addWaitForFinishPromise: (promise: () => Promise<void>) => void;
13
13
  waitForFinish: () => Promise<void>;
14
14
  };
15
- export declare const createMedia: (writer: WriterInterface) => Promise<MediaFn>;
15
+ export declare const createMedia: ({ writer, onBytesProgress, onMillisecondsProgress, }: {
16
+ writer: WriterInterface;
17
+ onBytesProgress: (totalBytes: number) => void;
18
+ onMillisecondsProgress: (totalMilliseconds: number) => void;
19
+ }) => Promise<MediaFn>;
@@ -13,7 +13,7 @@ const matroska_seek_1 = require("./matroska-seek");
13
13
  const matroska_segment_1 = require("./matroska-segment");
14
14
  const matroska_trackentry_1 = require("./matroska-trackentry");
15
15
  const timescale_1 = require("./timescale");
16
- const createMedia = async (writer) => {
16
+ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, }) => {
17
17
  var _a, _b, _c, _d, _e, _f, _g;
18
18
  const header = (0, matroska_header_1.makeMatroskaHeader)();
19
19
  const w = await writer.createContent();
@@ -59,11 +59,13 @@ const createMedia = async (writer) => {
59
59
  const updateSeekWrite = async () => {
60
60
  const updatedSeek = (0, matroska_seek_1.createMatroskaSeekHead)(seeks);
61
61
  await w.updateDataAt(seekHeadOffset, (0, make_header_1.combineUint8Arrays)(updatedSeek.map((b) => b.bytes)));
62
+ onBytesProgress(w.getWrittenByteCount());
62
63
  };
63
64
  const segmentOffset = w.getWrittenByteCount();
64
65
  const updateSegmentSize = async (size) => {
65
66
  const data = (0, ebml_1.getVariableInt)(size, matroska_segment_1.MATROSKA_SEGMENT_MIN_VINT_WIDTH);
66
67
  await w.updateDataAt(segmentOffset + (0, make_header_1.matroskaToHex)(all_segments_1.matroskaElements.Segment).byteLength, data);
68
+ onBytesProgress(w.getWrittenByteCount());
67
69
  };
68
70
  await w.write(matroskaSegment.bytes);
69
71
  const clusterOffset = w.getWrittenByteCount();
@@ -88,6 +90,7 @@ const createMedia = async (writer) => {
88
90
  const updateDuration = async (newDuration) => {
89
91
  const blocks = (0, make_duration_with_padding_1.makeDurationWithPadding)(newDuration);
90
92
  await w.updateDataAt(durationOffset, blocks.bytes);
93
+ onBytesProgress(w.getWrittenByteCount());
91
94
  };
92
95
  const addSample = async (chunk, trackNumber, isVideo) => {
93
96
  var _a;
@@ -108,6 +111,8 @@ const createMedia = async (writer) => {
108
111
  trackNumber,
109
112
  });
110
113
  }
114
+ onBytesProgress(w.getWrittenByteCount());
115
+ onMillisecondsProgress(newDuration);
111
116
  };
112
117
  const addTrack = async (track) => {
113
118
  currentTracks.push(track);
@@ -55,7 +55,7 @@ var fetchReader = {
55
55
  const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
56
56
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported(actualRange, parsedContentRange, res.status);
57
57
  signal?.addEventListener("abort", () => {
58
- controller.abort();
58
+ controller.abort(new Error("Aborted by user"));
59
59
  }, { once: true });
60
60
  if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
61
61
  throw new Error(`Server returned status code ${res.status} for ${src} and range ${actualRange}`);
@@ -55,7 +55,7 @@ var fetchReader = {
55
55
  const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
56
56
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported(actualRange, parsedContentRange, res.status);
57
57
  signal?.addEventListener("abort", () => {
58
- controller.abort();
58
+ controller.abort(new Error("Aborted by user"));
59
59
  }, { once: true });
60
60
  if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
61
61
  throw new Error(`Server returned status code ${res.status} for ${src} and range ${actualRange}`);
@@ -1815,7 +1815,11 @@ var makeMatroskaTracks = (tracks2) => {
1815
1815
  };
1816
1816
 
1817
1817
  // src/create/create-media.ts
1818
- var createMedia = async (writer) => {
1818
+ var createMedia = async ({
1819
+ writer,
1820
+ onBytesProgress,
1821
+ onMillisecondsProgress
1822
+ }) => {
1819
1823
  const header = makeMatroskaHeader();
1820
1824
  const w = await writer.createContent();
1821
1825
  await w.write(header.bytes);
@@ -1859,11 +1863,13 @@ var createMedia = async (writer) => {
1859
1863
  const updateSeekWrite = async () => {
1860
1864
  const updatedSeek = createMatroskaSeekHead(seeks);
1861
1865
  await w.updateDataAt(seekHeadOffset, combineUint8Arrays(updatedSeek.map((b) => b.bytes)));
1866
+ onBytesProgress(w.getWrittenByteCount());
1862
1867
  };
1863
1868
  const segmentOffset = w.getWrittenByteCount();
1864
1869
  const updateSegmentSize = async (size) => {
1865
1870
  const data = getVariableInt(size, MATROSKA_SEGMENT_MIN_VINT_WIDTH);
1866
1871
  await w.updateDataAt(segmentOffset + matroskaToHex(matroskaElements.Segment).byteLength, data);
1872
+ onBytesProgress(w.getWrittenByteCount());
1867
1873
  };
1868
1874
  await w.write(matroskaSegment.bytes);
1869
1875
  const clusterOffset = w.getWrittenByteCount();
@@ -1891,6 +1897,7 @@ var createMedia = async (writer) => {
1891
1897
  const updateDuration = async (newDuration) => {
1892
1898
  const blocks = makeDurationWithPadding(newDuration);
1893
1899
  await w.updateDataAt(durationOffset, blocks.bytes);
1900
+ onBytesProgress(w.getWrittenByteCount());
1894
1901
  };
1895
1902
  const addSample = async (chunk, trackNumber2, isVideo) => {
1896
1903
  trackNumberProgresses[trackNumber2] = chunk.timestamp;
@@ -1909,6 +1916,8 @@ var createMedia = async (writer) => {
1909
1916
  trackNumber: trackNumber2
1910
1917
  });
1911
1918
  }
1919
+ onBytesProgress(w.getWrittenByteCount());
1920
+ onMillisecondsProgress(newDuration);
1912
1921
  };
1913
1922
  const addTrack = async (track) => {
1914
1923
  currentTracks.push(track);
@@ -1959,6 +1968,40 @@ var createMedia = async (writer) => {
1959
1968
  };
1960
1969
  };
1961
1970
 
1971
+ // src/log.ts
1972
+ var logLevels = ["trace", "verbose", "info", "warn", "error"];
1973
+ var getNumberForLogLevel = (level) => {
1974
+ return logLevels.indexOf(level);
1975
+ };
1976
+ var isEqualOrBelowLogLevel = (currentLevel, level) => {
1977
+ return getNumberForLogLevel(currentLevel) <= getNumberForLogLevel(level);
1978
+ };
1979
+ var Log = {
1980
+ trace: (logLevel, ...args) => {
1981
+ if (isEqualOrBelowLogLevel(logLevel, "trace")) {
1982
+ return console.log(...args);
1983
+ }
1984
+ },
1985
+ verbose: (logLevel, ...args) => {
1986
+ if (isEqualOrBelowLogLevel(logLevel, "verbose")) {
1987
+ return console.log(...args);
1988
+ }
1989
+ },
1990
+ info: (logLevel, ...args) => {
1991
+ if (isEqualOrBelowLogLevel(logLevel, "info")) {
1992
+ return console.log(...args);
1993
+ }
1994
+ },
1995
+ warn: (logLevel, ...args) => {
1996
+ if (isEqualOrBelowLogLevel(logLevel, "warn")) {
1997
+ return console.warn(...args);
1998
+ }
1999
+ },
2000
+ error: (...args) => {
2001
+ return console.error(...args);
2002
+ }
2003
+ };
2004
+
1962
2005
  // src/boxes/iso-base-media/traversal.ts
1963
2006
  var getMoovBox = (segments) => {
1964
2007
  const moovBox = segments.find((s) => s.type === "moov-box");
@@ -6818,7 +6861,8 @@ var parseMedia = async ({
6818
6861
  };
6819
6862
  // src/index.ts
6820
6863
  var MediaParserInternals = {
6821
- createMedia
6864
+ createMedia,
6865
+ Log
6822
6866
  };
6823
6867
  export {
6824
6868
  parseMedia,
@@ -54,6 +54,12 @@ var webFsWriter = {
54
54
  createContent
55
55
  };
56
56
  var canUseWebFsWriter = async () => {
57
+ if (!("storage" in navigator)) {
58
+ return false;
59
+ }
60
+ if (!("getDirectory" in navigator.storage)) {
61
+ return false;
62
+ }
57
63
  const directoryHandle = await navigator.storage.getDirectory();
58
64
  const fileHandle = await directoryHandle.getFileHandle("remotion-probe-web-fs-support", {
59
65
  create: true
package/dist/index.d.ts CHANGED
@@ -1,10 +1,24 @@
1
+ import type { LogLevel } from './log';
2
+ export { WriterInterface } from './writers/writer';
1
3
  export { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
2
- export type { Options, ParseMediaContainer, ParseMediaFields, ParseMediaResult, TracksField, } from './options';
4
+ export type { Options, ParseMediaContainer, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOptions, ParseMediaResult, TracksField, } from './options';
3
5
  export { parseMedia } from './parse-media';
4
6
  export { AudioSample, OnAudioSample, OnAudioTrack, OnVideoSample, OnVideoTrack, VideoSample, } from './webcodec-sample-types';
5
7
  export type { MediaFn } from './create/create-media';
6
8
  export { Dimensions } from './get-dimensions';
7
9
  export type { ReaderInterface } from './readers/reader';
10
+ export type { LogLevel };
8
11
  export declare const MediaParserInternals: {
9
- createMedia: (writer: import("./writers/writer").WriterInterface) => Promise<import("./create/create-media").MediaFn>;
12
+ createMedia: ({ writer, onBytesProgress, onMillisecondsProgress, }: {
13
+ writer: import("./writers/writer").WriterInterface;
14
+ onBytesProgress: (totalBytes: number) => void;
15
+ onMillisecondsProgress: (totalMilliseconds: number) => void;
16
+ }) => Promise<import("./create/create-media").MediaFn>;
17
+ Log: {
18
+ trace: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
19
+ verbose: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
20
+ info: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
21
+ warn: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
22
+ error: (...args: Parameters<typeof console.log>) => void;
23
+ };
10
24
  };
package/dist/index.js CHANGED
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediaParserInternals = exports.parseMedia = void 0;
4
4
  const create_media_1 = require("./create/create-media");
5
+ const log_1 = require("./log");
5
6
  var parse_media_1 = require("./parse-media");
6
7
  Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
7
8
  exports.MediaParserInternals = {
8
9
  createMedia: create_media_1.createMedia,
10
+ Log: log_1.Log,
9
11
  };
package/dist/log.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export declare const logLevels: readonly ["trace", "verbose", "info", "warn", "error"];
2
+ export type LogLevel = (typeof logLevels)[number];
3
+ export declare const isEqualOrBelowLogLevel: (currentLevel: LogLevel, level: LogLevel) => boolean;
4
+ export declare const Log: {
5
+ trace: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
6
+ verbose: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
7
+ info: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
8
+ warn: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
9
+ error: (...args: Parameters<typeof console.log>) => void;
10
+ };
package/dist/log.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Log = exports.isEqualOrBelowLogLevel = exports.logLevels = void 0;
4
+ /* eslint-disable no-console */
5
+ exports.logLevels = ['trace', 'verbose', 'info', 'warn', 'error'];
6
+ const getNumberForLogLevel = (level) => {
7
+ return exports.logLevels.indexOf(level);
8
+ };
9
+ const isEqualOrBelowLogLevel = (currentLevel, level) => {
10
+ return getNumberForLogLevel(currentLevel) <= getNumberForLogLevel(level);
11
+ };
12
+ exports.isEqualOrBelowLogLevel = isEqualOrBelowLogLevel;
13
+ exports.Log = {
14
+ trace: (logLevel, ...args) => {
15
+ if ((0, exports.isEqualOrBelowLogLevel)(logLevel, 'trace')) {
16
+ return console.log(...args);
17
+ }
18
+ },
19
+ verbose: (logLevel, ...args) => {
20
+ if ((0, exports.isEqualOrBelowLogLevel)(logLevel, 'verbose')) {
21
+ return console.log(...args);
22
+ }
23
+ },
24
+ info: (logLevel, ...args) => {
25
+ if ((0, exports.isEqualOrBelowLogLevel)(logLevel, 'info')) {
26
+ return console.log(...args);
27
+ }
28
+ },
29
+ warn: (logLevel, ...args) => {
30
+ if ((0, exports.isEqualOrBelowLogLevel)(logLevel, 'warn')) {
31
+ return console.warn(...args);
32
+ }
33
+ },
34
+ error: (...args) => {
35
+ return console.error(...args);
36
+ },
37
+ };
package/dist/options.d.ts CHANGED
@@ -107,11 +107,14 @@ export type ParseMediaResult<Fields extends Options<ParseMediaFields>> = (Fields
107
107
  } : {}) & (Fields['container'] extends true ? {
108
108
  container: ParseMediaContainer | null;
109
109
  } : {});
110
- export type ParseMedia = <F extends Options<ParseMediaFields>>(options: {
111
- src: string | File;
110
+ export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
112
111
  fields?: F;
112
+ } & ParseMediaCallbacks<F>;
113
+ export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
114
+ src: string | File;
113
115
  reader?: ReaderInterface;
114
116
  onAudioTrack?: OnAudioTrack;
115
117
  onVideoTrack?: OnVideoTrack;
116
118
  signal?: AbortSignal;
117
- } & ParseMediaCallbacks<F>) => Promise<ParseMediaResult<F>>;
119
+ } & ParseMediaDynamicOptions<F>;
120
+ export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
@@ -80,7 +80,7 @@ exports.fetchReader = {
80
80
  : null;
81
81
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported(actualRange, parsedContentRange, res.status);
82
82
  signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', () => {
83
- controller.abort();
83
+ controller.abort(new Error('Aborted by user'));
84
84
  }, { once: true });
85
85
  if (res.status.toString().startsWith('4') ||
86
86
  res.status.toString().startsWith('5')) {
@@ -58,6 +58,12 @@ exports.webFsWriter = {
58
58
  createContent,
59
59
  };
60
60
  const canUseWebFsWriter = async () => {
61
+ if (!('storage' in navigator)) {
62
+ return false;
63
+ }
64
+ if (!('getDirectory' in navigator.storage)) {
65
+ return false;
66
+ }
61
67
  const directoryHandle = await navigator.storage.getDirectory();
62
68
  const fileHandle = await directoryHandle.getFileHandle('remotion-probe-web-fs-support', {
63
69
  create: true,
package/package.json CHANGED
@@ -3,14 +3,14 @@
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.227",
6
+ "version": "4.0.228",
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.14.0",
12
- "@remotion/renderer": "4.0.227",
13
- "@remotion/eslint-config-internal": "4.0.227"
12
+ "@remotion/renderer": "4.0.228",
13
+ "@remotion/eslint-config-internal": "4.0.228"
14
14
  },
15
15
  "publishConfig": {
16
16
  "access": "public"