@remotion/media-parser 4.0.297 → 4.0.300

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 (180) hide show
  1. package/dist/add-avc-profile-to-track.d.ts +2 -2
  2. package/dist/add-avc-profile-to-track.js +7 -1
  3. package/dist/codec-data.d.ts +29 -0
  4. package/dist/codec-data.js +2 -0
  5. package/dist/containers/aac/parse-aac.js +2 -3
  6. package/dist/containers/avc/color.d.ts +6 -6
  7. package/dist/containers/avc/color.js +53 -27
  8. package/dist/containers/avc/create-avc-decoder-configuration-record.d.ts +2 -0
  9. package/dist/containers/avc/create-avc-decoder-configuration-record.js +35 -0
  10. package/dist/containers/avc/interpret-sps.d.ts +2 -2
  11. package/dist/containers/avc/interpret-sps.js +2 -2
  12. package/dist/containers/flac/parse-streaminfo.js +2 -3
  13. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +1 -1
  14. package/dist/containers/iso-base-media/color-to-webcodecs-colors.d.ts +2 -0
  15. package/dist/containers/iso-base-media/color-to-webcodecs-colors.js +12 -0
  16. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +2 -2
  17. package/dist/containers/iso-base-media/find-track-to-seek.d.ts +5 -5
  18. package/dist/containers/iso-base-media/find-track-to-seek.js +18 -2
  19. package/dist/containers/iso-base-media/get-actual-number-of-channels.d.ts +3 -2
  20. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +14 -3
  21. package/dist/containers/iso-base-media/get-children.d.ts +2 -2
  22. package/dist/containers/iso-base-media/get-keyframes.js +11 -2
  23. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +4 -4
  24. package/dist/containers/iso-base-media/get-moov-atom.js +1 -1
  25. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.d.ts +9 -5
  26. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +17 -4
  27. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +2 -2
  28. package/dist/containers/iso-base-media/get-seeking-byte.js +5 -8
  29. package/dist/containers/iso-base-media/make-track.d.ts +2 -2
  30. package/dist/containers/iso-base-media/make-track.js +18 -17
  31. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +2 -2
  32. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +4 -4
  33. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +4 -4
  34. package/dist/containers/iso-base-media/moov/moov.d.ts +2 -2
  35. package/dist/containers/iso-base-media/process-box.d.ts +5 -5
  36. package/dist/containers/iso-base-media/stsd/mebx.d.ts +2 -2
  37. package/dist/containers/iso-base-media/stsd/samples.d.ts +3 -3
  38. package/dist/containers/iso-base-media/stsd/stsd.d.ts +2 -2
  39. package/dist/containers/iso-base-media/trak/trak.d.ts +2 -2
  40. package/dist/containers/iso-base-media/traversal.d.ts +1 -0
  41. package/dist/containers/iso-base-media/traversal.js +13 -1
  42. package/dist/containers/m3u/after-manifest-fetch.d.ts +6 -6
  43. package/dist/containers/m3u/after-manifest-fetch.js +1 -1
  44. package/dist/containers/m3u/fetch-m3u8-stream.d.ts +2 -2
  45. package/dist/containers/m3u/first-sample-in-m3u-chunk.d.ts +3 -3
  46. package/dist/containers/m3u/first-sample-in-m3u-chunk.js +2 -8
  47. package/dist/containers/m3u/get-seeking-byte.d.ts +3 -3
  48. package/dist/containers/m3u/get-streams.d.ts +6 -6
  49. package/dist/containers/m3u/get-streams.js +9 -9
  50. package/dist/containers/m3u/parse-stream-inf.js +3 -3
  51. package/dist/containers/m3u/process-m3u-chunk.js +3 -3
  52. package/dist/containers/m3u/run-over-m3u.d.ts +2 -2
  53. package/dist/containers/m3u/sample-sorter.d.ts +7 -7
  54. package/dist/containers/m3u/types.d.ts +3 -3
  55. package/dist/containers/mp3/parse-mpeg-header.js +2 -3
  56. package/dist/containers/mp3/seek/audio-sample-from-cbr.d.ts +2 -2
  57. package/dist/containers/riff/get-tracks-from-avi.d.ts +4 -9
  58. package/dist/containers/riff/get-tracks-from-avi.js +19 -20
  59. package/dist/containers/riff/parse-video-section.js +1 -1
  60. package/dist/containers/riff/seek/fetch-idx1.d.ts +4 -4
  61. package/dist/containers/transport-stream/get-tracks.d.ts +2 -2
  62. package/dist/containers/transport-stream/get-tracks.js +1 -5
  63. package/dist/containers/transport-stream/handle-aac-packet.d.ts +4 -4
  64. package/dist/containers/transport-stream/handle-aac-packet.js +5 -4
  65. package/dist/containers/transport-stream/handle-avc-packet.d.ts +4 -4
  66. package/dist/containers/transport-stream/handle-avc-packet.js +10 -4
  67. package/dist/containers/transport-stream/process-audio.d.ts +5 -5
  68. package/dist/containers/transport-stream/process-stream-buffers.d.ts +8 -8
  69. package/dist/containers/transport-stream/process-video.d.ts +5 -5
  70. package/dist/containers/wav/parse-fmt.js +2 -3
  71. package/dist/containers/webm/color.d.ts +2 -2
  72. package/dist/containers/webm/color.js +6 -25
  73. package/dist/containers/webm/get-ready-tracks.d.ts +3 -3
  74. package/dist/containers/webm/get-sample-from-block.d.ts +7 -7
  75. package/dist/containers/webm/make-track.d.ts +3 -3
  76. package/dist/containers/webm/make-track.js +53 -21
  77. package/dist/containers/webm/parse-webm-header.js +5 -0
  78. package/dist/containers/webm/seek/fetch-web-cues.d.ts +4 -4
  79. package/dist/containers/webm/seek/get-seeking-byte.d.ts +2 -2
  80. package/dist/containers/webm/segments.d.ts +2 -2
  81. package/dist/containers/webm/segments.js +1 -1
  82. package/dist/containers/webm/state-for-processing.d.ts +5 -5
  83. package/dist/containers/webm/traversal.js +2 -1
  84. package/dist/controller/emitter.d.ts +2 -3
  85. package/dist/controller/seek-signal.d.ts +3 -9
  86. package/dist/controller/seek-signal.js +2 -2
  87. package/dist/convert-audio-or-video-sample.d.ts +4 -4
  88. package/dist/download-and-parse-media.js +1 -1
  89. package/dist/emit-available-info.js +9 -9
  90. package/dist/errors.d.ts +4 -18
  91. package/dist/errors.js +1 -15
  92. package/dist/esm/index.mjs +654 -544
  93. package/dist/esm/node.mjs +63 -51
  94. package/dist/esm/server-worker.mjs +13 -34
  95. package/dist/esm/universal.mjs +63 -51
  96. package/dist/esm/worker-server-entry.mjs +500 -388
  97. package/dist/esm/worker-web-entry.mjs +437 -337
  98. package/dist/esm/worker.mjs +14 -35
  99. package/dist/fields.d.ts +2 -2
  100. package/dist/file-types/bmp.d.ts +2 -2
  101. package/dist/file-types/detect-file-type.d.ts +2 -1
  102. package/dist/file-types/detect-file-type.js +1 -6
  103. package/dist/file-types/gif.d.ts +2 -0
  104. package/dist/file-types/gif.js +18 -0
  105. package/dist/file-types/index.js +4 -2
  106. package/dist/file-types/png.d.ts +2 -2
  107. package/dist/file-types/webp.d.ts +2 -2
  108. package/dist/get-audio-codec.d.ts +3 -4
  109. package/dist/get-audio-codec.js +44 -23
  110. package/dist/get-dimensions.d.ts +2 -2
  111. package/dist/get-dimensions.js +6 -3
  112. package/dist/get-duration.js +6 -7
  113. package/dist/get-fields-from-callbacks.js +1 -1
  114. package/dist/get-is-hdr.js +6 -5
  115. package/dist/get-sample-aspect-ratio.d.ts +5 -5
  116. package/dist/get-seeking-byte.d.ts +2 -2
  117. package/dist/get-tracks.d.ts +34 -44
  118. package/dist/get-tracks.js +6 -46
  119. package/dist/get-video-codec.d.ts +4 -3
  120. package/dist/get-video-codec.js +6 -6
  121. package/dist/has-all-info.js +1 -1
  122. package/dist/index.d.ts +114 -55
  123. package/dist/index.js +6 -4
  124. package/dist/init-video.js +4 -11
  125. package/dist/internal-parse-media.js +1 -1
  126. package/dist/log.d.ts +6 -6
  127. package/dist/metadata/get-metadata.js +6 -4
  128. package/dist/options.d.ts +19 -23
  129. package/dist/parse-loop.js +2 -2
  130. package/dist/parse-media-on-worker-entry.js +13 -5
  131. package/dist/parse-media.js +1 -1
  132. package/dist/perform-seek.d.ts +4 -4
  133. package/dist/readers/from-fetch.d.ts +2 -2
  134. package/dist/readers/from-node.d.ts +2 -2
  135. package/dist/readers/from-node.js +64 -55
  136. package/dist/readers/from-web-file.d.ts +2 -2
  137. package/dist/readers/reader.d.ts +5 -5
  138. package/dist/readers/universal.d.ts +2 -2
  139. package/dist/readers/web.d.ts +2 -2
  140. package/dist/register-track.d.ts +12 -12
  141. package/dist/remotion-license-acknowledge.d.ts +2 -2
  142. package/dist/seek-backwards.d.ts +4 -4
  143. package/dist/seek-forwards.d.ts +4 -4
  144. package/dist/server-worker.module.d.ts +2 -0
  145. package/dist/server-worker.module.js +12 -0
  146. package/dist/state/can-skip-tracks.js +1 -1
  147. package/dist/state/emitted-fields.js +1 -1
  148. package/dist/state/has-tracks-section.d.ts +5 -5
  149. package/dist/state/iso-base-media/cached-sample-positions.d.ts +3 -3
  150. package/dist/state/iso-base-media/cached-sample-positions.js +16 -7
  151. package/dist/state/iso-base-media/iso-state.d.ts +4 -4
  152. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +4 -4
  153. package/dist/state/m3u-state.d.ts +11 -11
  154. package/dist/state/matroska/lazy-cues-fetch.d.ts +4 -4
  155. package/dist/state/matroska/webm.d.ts +4 -4
  156. package/dist/state/matroska/webm.js +1 -1
  157. package/dist/state/may-skip-video-data.d.ts +1 -0
  158. package/dist/state/may-skip-video-data.js +23 -2
  159. package/dist/state/need-samples-for-fields.js +1 -1
  160. package/dist/state/parser-state.d.ts +67 -38
  161. package/dist/state/riff/lazy-idx1-fetch.d.ts +4 -4
  162. package/dist/state/riff/sample-counter.d.ts +3 -3
  163. package/dist/state/riff.d.ts +6 -6
  164. package/dist/state/sample-callbacks.d.ts +12 -12
  165. package/dist/state/sample-callbacks.js +2 -2
  166. package/dist/state/samples-observed/slow-duration-fps.d.ts +3 -3
  167. package/dist/state/transport-stream/last-emitted-sample.d.ts +3 -3
  168. package/dist/state/transport-stream/transport-stream.d.ts +2 -2
  169. package/dist/version.d.ts +1 -1
  170. package/dist/version.js +1 -1
  171. package/dist/webcodec-sample-types.d.ts +21 -10
  172. package/dist/work-on-seek-request.d.ts +4 -4
  173. package/dist/work-on-seek-request.js +40 -43
  174. package/dist/worker/serialize-error.d.ts +2 -2
  175. package/dist/worker/serialize-error.js +7 -25
  176. package/dist/worker/worker-types.d.ts +22 -24
  177. package/dist/worker-server.d.ts +2 -2
  178. package/dist/worker-server.js +5 -5
  179. package/dist/writers/writer.d.ts +2 -2
  180. package/package.json +3 -3
package/dist/options.d.ts CHANGED
@@ -2,17 +2,17 @@ import type { M3uStream } from './containers/m3u/get-streams';
2
2
  import type { SelectM3uAssociatedPlaylistsFn, SelectM3uStreamFn } from './containers/m3u/select-stream';
3
3
  import type { MediaParserController } from './controller/media-parser-controller';
4
4
  import type { Options, ParseMediaFields } from './fields';
5
- import type { Dimensions } from './get-dimensions';
5
+ import type { MediaParserDimensions } from './get-dimensions';
6
6
  import type { MediaParserLocation } from './get-location';
7
- import type { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, VideoTrack } from './get-tracks';
8
- import type { LogLevel } from './log';
7
+ import type { MediaParserAudioCodec, MediaParserTrack, MediaParserVideoCodec } from './get-tracks';
8
+ import type { MediaParserLogLevel } from './log';
9
9
  import type { MediaParserMetadataEntry } from './metadata/get-metadata';
10
10
  import type { IsoBaseMediaStructure, MediaParserStructureUnstable } from './parse-result';
11
- import type { ReaderInterface } from './readers/reader';
11
+ import type { MediaParserReaderInterface } from './readers/reader';
12
12
  import type { SeekingHints } from './seeking-hints';
13
13
  import type { MediaParserEmbeddedImage } from './state/images';
14
14
  import type { InternalStats } from './state/parser-state';
15
- import type { OnAudioTrack, OnVideoTrack } from './webcodec-sample-types';
15
+ import type { MediaParserOnAudioTrack, MediaParserOnVideoTrack } from './webcodec-sample-types';
16
16
  import type { WriterInterface } from './writers/writer';
17
17
  export type KnownAudioCodecs = 'aac' | 'mp3' | 'aiff' | 'opus' | 'pcm' | 'vorbis' | 'unknown';
18
18
  export type AllParseMediaFields = {
@@ -21,7 +21,7 @@ export type AllParseMediaFields = {
21
21
  slowDurationInSeconds: true;
22
22
  slowNumberOfFrames: true;
23
23
  slowFps: true;
24
- structure: true;
24
+ slowStructure: true;
25
25
  fps: true;
26
26
  videoCodec: true;
27
27
  audioCodec: true;
@@ -45,10 +45,6 @@ export type AllParseMediaFields = {
45
45
  slowAudioBitrate: true;
46
46
  m3uStreams: true;
47
47
  };
48
- export type MediaParserTracks = {
49
- videoTracks: VideoTrack[];
50
- audioTracks: AudioTrack[];
51
- };
52
48
  export type MediaParserContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3' | 'aac' | 'flac' | 'm3u8' | 'wav';
53
49
  export type MediaParserKeyframe = {
54
50
  positionInBytes: number;
@@ -58,17 +54,17 @@ export type MediaParserKeyframe = {
58
54
  trackId: number;
59
55
  };
60
56
  export type ParseMediaCallbacksMandatory = {
61
- onDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
57
+ onDimensions: null | ((dimensions: MediaParserDimensions | null) => unknown | Promise<unknown>);
62
58
  onDurationInSeconds: null | ((durationInSeconds: number | null) => unknown | Promise<unknown>);
63
59
  onSlowDurationInSeconds: null | ((durationInSeconds: number) => unknown | Promise<unknown>);
64
60
  onSlowFps: null | ((fps: number) => unknown | Promise<unknown>);
65
- onStructure: null | ((structure: MediaParserStructureUnstable) => unknown | Promise<unknown>);
61
+ onSlowStructure: null | ((structure: MediaParserStructureUnstable) => unknown | Promise<unknown>);
66
62
  onFps: null | ((fps: number | null) => unknown | Promise<unknown>);
67
63
  onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => unknown | Promise<unknown>);
68
64
  onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => unknown | Promise<unknown>);
69
- onTracks: null | ((tracks: MediaParserTracks) => unknown | Promise<unknown>);
65
+ onTracks: null | ((tracks: MediaParserTrack[]) => unknown | Promise<unknown>);
70
66
  onRotation: null | ((rotation: number | null) => unknown | Promise<unknown>);
71
- onUnrotatedDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
67
+ onUnrotatedDimensions: null | ((dimensions: MediaParserDimensions | null) => unknown | Promise<unknown>);
72
68
  onInternalStats: null | ((internalStats: InternalStats) => unknown | Promise<unknown>);
73
69
  onSize: null | ((size: number | null) => unknown | Promise<unknown>);
74
70
  onName: null | ((name: string) => unknown | Promise<unknown>);
@@ -89,17 +85,17 @@ export type ParseMediaCallbacksMandatory = {
89
85
  };
90
86
  export type ParseMediaCallbacks = Partial<ParseMediaCallbacksMandatory>;
91
87
  export interface ParseMediaData {
92
- dimensions: Dimensions | null;
88
+ dimensions: MediaParserDimensions | null;
93
89
  durationInSeconds: number | null;
94
90
  slowDurationInSeconds: number;
95
91
  slowFps: number;
96
- structure: MediaParserStructureUnstable;
92
+ slowStructure: MediaParserStructureUnstable;
97
93
  fps: number | null;
98
94
  videoCodec: MediaParserVideoCodec | null;
99
95
  audioCodec: MediaParserAudioCodec | null;
100
- tracks: MediaParserTracks;
96
+ tracks: MediaParserTrack[];
101
97
  rotation: number | null;
102
- unrotatedDimensions: Dimensions | null;
98
+ unrotatedDimensions: MediaParserDimensions | null;
103
99
  isHdr: boolean;
104
100
  internalStats: InternalStats;
105
101
  size: number | null;
@@ -118,7 +114,7 @@ export interface ParseMediaData {
118
114
  slowAudioBitrate: number | null;
119
115
  m3uStreams: M3uStream[] | null;
120
116
  }
121
- export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {
117
+ export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {} extends T ? Record<never, never> : {
122
118
  [K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
123
119
  };
124
120
  export type ParseMediaProgress = {
@@ -128,14 +124,14 @@ export type ParseMediaProgress = {
128
124
  };
129
125
  export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
130
126
  type ReaderParams = {
131
- reader: ReaderInterface;
127
+ reader: MediaParserReaderInterface;
132
128
  };
133
129
  export type M3uPlaylistContext = {
134
130
  mp4HeaderSegment: IsoBaseMediaStructure | null;
135
131
  isLastChunkInPlaylist: boolean;
136
132
  };
137
133
  export type SerializeableOptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
138
- logLevel: LogLevel;
134
+ logLevel: MediaParserLogLevel;
139
135
  progressIntervalInMs: number | null;
140
136
  fields: F | null;
141
137
  acknowledgeRemotionLicense: boolean;
@@ -150,8 +146,8 @@ type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = Serializeab
150
146
  selectM3uAssociatedPlaylists: SelectM3uAssociatedPlaylistsFn;
151
147
  };
152
148
  type ParseMediaSampleCallbacks = {
153
- onAudioTrack: OnAudioTrack | null;
154
- onVideoTrack: OnVideoTrack | null;
149
+ onAudioTrack: MediaParserOnAudioTrack | null;
150
+ onVideoTrack: MediaParserOnVideoTrack | null;
155
151
  };
156
152
  export type ParseMediaMode = 'query' | 'download';
157
153
  export type ParseMediaSrc = string | Blob | URL;
@@ -118,10 +118,10 @@ const parseLoop = async ({ state, throttledState, onError, }) => {
118
118
  }
119
119
  state.samplesObserved.setLastSampleObserved();
120
120
  // After the last sample, you might queue a last seek again.
121
- if (state.controller._internals.seekSignal.getSeek()) {
121
+ if (state.controller._internals.seekSignal.getSeek() !== null) {
122
122
  log_1.Log.verbose(state.logLevel, 'Reached end of samples, but there is a pending seek. Trying to seek...');
123
123
  await (0, work_on_seek_request_1.workOnSeekRequest)((0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state));
124
- if (state.controller._internals.seekSignal.getSeek()) {
124
+ if (state.controller._internals.seekSignal.getSeek() !== null) {
125
125
  throw new Error('Reached the end of the file even though a seek was requested. This is likely a bug in the parser. You can report this at https://remotion.dev/report and we will fix it as soon as possible.');
126
126
  }
127
127
  await (0, exports.parseLoop)({
@@ -6,7 +6,7 @@ const serialize_error_1 = require("./worker/serialize-error");
6
6
  const convertToWorkerPayload = (
7
7
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
8
  payload) => {
9
- const { onAudioCodec, onContainer, onDimensions, onUnrotatedDimensions, onVideoCodec, onFps, onAudioTrack, onDurationInSeconds, onImages, onInternalStats, onIsHdr, onKeyframes, onLocation, onM3uStreams, onMetadata, onMimeType, onName, onNumberOfAudioChannels, onParseProgress, onRotation, onSampleRate, onSlowAudioBitrate, onSize, onSlowDurationInSeconds, onSlowFps, onSlowKeyframes, onSlowNumberOfFrames, onSlowVideoBitrate, onStructure, onTracks, onVideoTrack, selectM3uStream, selectM3uAssociatedPlaylists, src, ...others } = payload;
9
+ const { onAudioCodec, onContainer, onDimensions, onUnrotatedDimensions, onVideoCodec, onFps, onAudioTrack, onDurationInSeconds, onImages, onInternalStats, onIsHdr, onKeyframes, onLocation, onM3uStreams, onMetadata, onMimeType, onName, onNumberOfAudioChannels, onParseProgress, onRotation, onSampleRate, onSlowAudioBitrate, onSize, onSlowDurationInSeconds, onSlowFps, onSlowKeyframes, onSlowNumberOfFrames, onSlowVideoBitrate, onSlowStructure, onTracks, onVideoTrack, selectM3uStream, selectM3uAssociatedPlaylists, src, ...others } = payload;
10
10
  return {
11
11
  type: 'request-worker',
12
12
  payload: others,
@@ -33,7 +33,7 @@ payload) => {
33
33
  postSlowKeyframes: Boolean(onSlowKeyframes),
34
34
  postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
35
35
  postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
36
- postStructure: Boolean(onStructure),
36
+ postSlowStructure: Boolean(onSlowStructure),
37
37
  postTracks: Boolean(onTracks),
38
38
  postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
39
39
  postVideoCodec: Boolean(onVideoCodec),
@@ -179,8 +179,8 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
179
179
  await ((_p = params.onSlowVideoBitrate) === null || _p === void 0 ? void 0 : _p.call(params, data.payload.value));
180
180
  return { payloadType: 'void' };
181
181
  }
182
- if (data.payload.callbackType === 'structure') {
183
- await ((_q = params.onStructure) === null || _q === void 0 ? void 0 : _q.call(params, data.payload.value));
182
+ if (data.payload.callbackType === 'slow-structure') {
183
+ await ((_q = params.onSlowStructure) === null || _q === void 0 ? void 0 : _q.call(params, data.payload.value));
184
184
  return { payloadType: 'void' };
185
185
  }
186
186
  if (data.payload.callbackType === 'fps') {
@@ -270,7 +270,15 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
270
270
  registeredCallback: Boolean(possibleCallback),
271
271
  };
272
272
  }
273
- if (data.payload.callbackType === 'on-audio-video-sample') {
273
+ if (data.payload.callbackType === 'on-audio-sample') {
274
+ const callback = callbacks[data.payload.trackId];
275
+ if (!callback) {
276
+ throw new Error(`No callback registered for track ${data.payload.trackId}`);
277
+ }
278
+ await callback(data.payload.value);
279
+ return { payloadType: 'void' };
280
+ }
281
+ if (data.payload.callbackType === 'on-video-sample') {
274
282
  const callback = callbacks[data.payload.trackId];
275
283
  if (!callback) {
276
284
  throw new Error(`No callback registered for track ${data.payload.trackId}`);
@@ -34,7 +34,7 @@ const parseMedia = (options) => {
34
34
  onSlowKeyframes: (_0 = options.onSlowKeyframes) !== null && _0 !== void 0 ? _0 : null,
35
35
  onSlowNumberOfFrames: (_1 = options.onSlowNumberOfFrames) !== null && _1 !== void 0 ? _1 : null,
36
36
  onSlowVideoBitrate: (_2 = options.onSlowVideoBitrate) !== null && _2 !== void 0 ? _2 : null,
37
- onStructure: (_3 = options.onStructure) !== null && _3 !== void 0 ? _3 : null,
37
+ onSlowStructure: (_3 = options.onSlowStructure) !== null && _3 !== void 0 ? _3 : null,
38
38
  onM3uStreams: (_4 = options.onM3uStreams) !== null && _4 !== void 0 ? _4 : null,
39
39
  onTracks: (_5 = options.onTracks) !== null && _5 !== void 0 ? _5 : null,
40
40
  onUnrotatedDimensions: (_6 = options.onUnrotatedDimensions) !== null && _6 !== void 0 ? _6 : null,
@@ -2,9 +2,9 @@ import type { MediaParserController } from './controller/media-parser-controller
2
2
  import type { PrefetchCache } from './fetch';
3
3
  import type { AllOptions, ParseMediaFields } from './fields';
4
4
  import type { BufferIterator } from './iterator/buffer-iterator';
5
- import type { LogLevel } from './log';
5
+ import type { MediaParserLogLevel } from './log';
6
6
  import type { ParseMediaMode, ParseMediaSrc } from './options';
7
- import type { ReaderInterface } from './readers/reader';
7
+ import type { MediaParserReaderInterface } from './readers/reader';
8
8
  import type { CurrentReader } from './state/current-reader';
9
9
  import type { SeekInfiniteLoop } from './state/seek-infinite-loop';
10
10
  import type { MediaSectionState } from './state/video-section';
@@ -14,12 +14,12 @@ export declare const performSeek: ({ seekTo, userInitiated, controller, mediaSec
14
14
  controller: MediaParserController;
15
15
  mediaSection: MediaSectionState;
16
16
  iterator: BufferIterator;
17
- logLevel: LogLevel;
17
+ logLevel: MediaParserLogLevel;
18
18
  mode: ParseMediaMode;
19
19
  contentLength: number;
20
20
  seekInfiniteLoop: SeekInfiniteLoop;
21
21
  currentReader: CurrentReader;
22
- readerInterface: ReaderInterface;
22
+ readerInterface: MediaParserReaderInterface;
23
23
  fields: Partial<AllOptions<ParseMediaFields>>;
24
24
  src: ParseMediaSrc;
25
25
  discardReadBytes: (force: boolean) => Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import type { MediaParserController } from '../controller/media-parser-controller';
2
2
  import type { ParseMediaRange } from '../options';
3
- import type { CreateAdjacentFileSource, PreloadContent, ReadContent, ReaderInterface, ReadWholeAsText } from './reader';
3
+ import type { CreateAdjacentFileSource, MediaParserReaderInterface, PreloadContent, ReadContent, ReadWholeAsText } from './reader';
4
4
  interface ParsedContentRange {
5
5
  unit: string;
6
6
  start?: number | null;
@@ -29,5 +29,5 @@ export declare const fetchReadContent: ReadContent;
29
29
  export declare const fetchPreload: PreloadContent;
30
30
  export declare const fetchReadWholeAsText: ReadWholeAsText;
31
31
  export declare const fetchCreateAdjacentFileSource: CreateAdjacentFileSource;
32
- export declare const fetchReader: ReaderInterface;
32
+ export declare const fetchReader: MediaParserReaderInterface;
33
33
  export {};
@@ -1,5 +1,5 @@
1
- import type { CreateAdjacentFileSource, ReadContent, ReadWholeAsText, ReaderInterface } from './reader';
1
+ import type { CreateAdjacentFileSource, MediaParserReaderInterface, ReadContent, ReadWholeAsText } from './reader';
2
2
  export declare const nodeReadContent: ReadContent;
3
3
  export declare const nodeReadWholeAsText: ReadWholeAsText;
4
4
  export declare const nodeCreateAdjacentFileSource: CreateAdjacentFileSource;
5
- export declare const nodeReader: ReaderInterface;
5
+ export declare const nodeReader: MediaParserReaderInterface;
@@ -3,70 +3,79 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.nodeReader = exports.nodeCreateAdjacentFileSource = exports.nodeReadWholeAsText = exports.nodeReadContent = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
- const nodeReadContent = ({ src, range, controller }) => {
6
+ const nodeReadContent = async ({ src, range, controller, }) => {
7
7
  if (typeof src !== 'string') {
8
8
  throw new Error('src must be a string when using `nodeReader`');
9
9
  }
10
+ await Promise.resolve();
10
11
  const ownController = new AbortController();
11
- const stream = (0, fs_1.createReadStream)(src, {
12
- start: range === null ? 0 : typeof range === 'number' ? range : range[0],
13
- end: range === null
14
- ? Infinity
15
- : typeof range === 'number'
12
+ try {
13
+ if (!(0, fs_1.existsSync)(src)) {
14
+ throw new Error(`File does not exist: ${src}`);
15
+ }
16
+ const stream = (0, fs_1.createReadStream)(src, {
17
+ start: range === null ? 0 : typeof range === 'number' ? range : range[0],
18
+ end: range === null
16
19
  ? Infinity
17
- : range[1],
18
- });
19
- controller._internals.signal.addEventListener('abort', () => {
20
- ownController.abort();
21
- }, { once: true });
22
- const stats = (0, fs_1.statSync)(src);
23
- let readerCancelled = false;
24
- const reader = new ReadableStream({
25
- start(c) {
26
- if (readerCancelled) {
27
- return;
28
- }
29
- stream.on('data', (chunk) => {
30
- c.enqueue(chunk);
31
- });
32
- stream.on('end', () => {
33
- if (readerCancelled) {
34
- return;
35
- }
36
- c.close();
37
- });
38
- stream.on('error', (err) => {
39
- c.error(err);
40
- });
41
- },
42
- cancel() {
43
- readerCancelled = true;
44
- stream.destroy();
45
- },
46
- }).getReader();
47
- if (controller) {
20
+ : typeof range === 'number'
21
+ ? Infinity
22
+ : range[1],
23
+ });
48
24
  controller._internals.signal.addEventListener('abort', () => {
49
- reader.cancel().catch(() => { });
25
+ ownController.abort();
50
26
  }, { once: true });
51
- }
52
- return Promise.resolve({
53
- reader: {
54
- reader,
55
- abort: async () => {
56
- try {
57
- stream.destroy();
58
- ownController.abort();
59
- await reader.cancel();
27
+ const stats = (0, fs_1.statSync)(src);
28
+ let readerCancelled = false;
29
+ const reader = new ReadableStream({
30
+ start(c) {
31
+ if (readerCancelled) {
32
+ return;
60
33
  }
61
- catch (_a) { }
34
+ stream.on('data', (chunk) => {
35
+ c.enqueue(chunk);
36
+ });
37
+ stream.on('end', () => {
38
+ if (readerCancelled) {
39
+ return;
40
+ }
41
+ c.close();
42
+ });
43
+ stream.on('error', (err) => {
44
+ c.error(err);
45
+ });
46
+ },
47
+ cancel() {
48
+ readerCancelled = true;
49
+ stream.destroy();
50
+ },
51
+ }).getReader();
52
+ if (controller) {
53
+ controller._internals.signal.addEventListener('abort', () => {
54
+ reader.cancel().catch(() => { });
55
+ }, { once: true });
56
+ }
57
+ return Promise.resolve({
58
+ reader: {
59
+ reader,
60
+ abort: async () => {
61
+ try {
62
+ stream.destroy();
63
+ ownController.abort();
64
+ await reader.cancel();
65
+ }
66
+ catch (_a) { }
67
+ },
62
68
  },
63
- },
64
- contentLength: stats.size,
65
- contentType: null,
66
- name: src.split(path_1.sep).pop(),
67
- supportsContentRange: true,
68
- needsContentRange: true,
69
- });
69
+ contentLength: stats.size,
70
+ contentType: null,
71
+ name: src.split(path_1.sep).pop(),
72
+ supportsContentRange: true,
73
+ needsContentRange: true,
74
+ });
75
+ }
76
+ catch (err) {
77
+ return Promise.reject(err);
78
+ }
70
79
  };
71
80
  exports.nodeReadContent = nodeReadContent;
72
81
  const nodeReadWholeAsText = (src) => {
@@ -1,5 +1,5 @@
1
- import type { CreateAdjacentFileSource, ReadContent, ReaderInterface, ReadWholeAsText } from './reader';
1
+ import type { CreateAdjacentFileSource, MediaParserReaderInterface, ReadContent, ReadWholeAsText } from './reader';
2
2
  export declare const webFileReadContent: ReadContent;
3
3
  export declare const webFileReadWholeAsText: ReadWholeAsText;
4
4
  export declare const webFileCreateAdjacentFileSource: CreateAdjacentFileSource;
5
- export declare const webFileReader: ReaderInterface;
5
+ export declare const webFileReader: MediaParserReaderInterface;
@@ -1,5 +1,5 @@
1
1
  import type { MediaParserController } from '../controller/media-parser-controller';
2
- import type { LogLevel } from '../log';
2
+ import type { MediaParserLogLevel } from '../log';
3
3
  import type { ParseMediaRange, ParseMediaSrc } from '../options';
4
4
  import type { PrefetchCache } from './from-fetch';
5
5
  export type Reader = {
@@ -18,24 +18,24 @@ export type ReadContent = (options: {
18
18
  src: ParseMediaSrc;
19
19
  range: ParseMediaRange;
20
20
  controller: MediaParserController;
21
- logLevel: LogLevel;
21
+ logLevel: MediaParserLogLevel;
22
22
  prefetchCache: PrefetchCache;
23
23
  }) => Promise<ReadResult>;
24
24
  export type ReadWholeAsText = (src: ParseMediaSrc) => Promise<string>;
25
25
  export type PreloadContent = (options: {
26
26
  src: ParseMediaSrc;
27
27
  range: ParseMediaRange;
28
- logLevel: LogLevel;
28
+ logLevel: MediaParserLogLevel;
29
29
  prefetchCache: PrefetchCache;
30
30
  }) => void;
31
31
  export type ClearPreloadCache = (options: {
32
32
  src: ParseMediaSrc;
33
33
  range: ParseMediaRange;
34
- logLevel: LogLevel;
34
+ logLevel: MediaParserLogLevel;
35
35
  prefetchCache: PrefetchCache;
36
36
  }) => void;
37
37
  export type CreateAdjacentFileSource = (relativePath: string, src: ParseMediaSrc) => string;
38
- export type ReaderInterface = {
38
+ export type MediaParserReaderInterface = {
39
39
  read: ReadContent;
40
40
  readWholeAsText: ReadWholeAsText;
41
41
  createAdjacentFileSource: CreateAdjacentFileSource;
@@ -1,2 +1,2 @@
1
- import type { ReaderInterface } from './reader';
2
- export declare const universalReader: ReaderInterface;
1
+ import type { MediaParserReaderInterface } from './reader';
2
+ export declare const universalReader: MediaParserReaderInterface;
@@ -1,2 +1,2 @@
1
- import type { ReaderInterface } from './reader';
2
- export declare const webReader: ReaderInterface;
1
+ import type { MediaParserReaderInterface } from './reader';
2
+ export declare const webReader: MediaParserReaderInterface;
@@ -1,28 +1,28 @@
1
- import type { AudioTrack, Track, VideoTrack } from './get-tracks';
2
- import type { LogLevel } from './log';
1
+ import type { MediaParserAudioTrack, MediaParserTrack, MediaParserVideoTrack } from './get-tracks';
2
+ import type { MediaParserLogLevel } from './log';
3
3
  import type { MediaParserContainer } from './options';
4
4
  import type { TracksState } from './state/has-tracks-section';
5
5
  import type { ParserState } from './state/parser-state';
6
6
  import type { CallbacksState } from './state/sample-callbacks';
7
- import type { OnAudioTrack, OnVideoTrack } from './webcodec-sample-types';
7
+ import type { MediaParserOnAudioTrack, MediaParserOnVideoTrack } from './webcodec-sample-types';
8
8
  export declare const registerVideoTrack: ({ track, container, logLevel, onVideoTrack, registerVideoSampleCallback, tracks, }: {
9
- track: Track;
9
+ track: MediaParserTrack;
10
10
  container: MediaParserContainer;
11
- logLevel: LogLevel;
12
- onVideoTrack: OnVideoTrack | null;
11
+ logLevel: MediaParserLogLevel;
12
+ onVideoTrack: MediaParserOnVideoTrack | null;
13
13
  registerVideoSampleCallback: CallbacksState["registerVideoSampleCallback"];
14
14
  tracks: TracksState;
15
- }) => Promise<import("./webcodec-sample-types").OnVideoSample | null>;
15
+ }) => Promise<import("./webcodec-sample-types").MediaParserOnVideoSample | null>;
16
16
  export declare const registerAudioTrack: ({ track, container, tracks, logLevel, onAudioTrack, registerAudioSampleCallback, }: {
17
- track: AudioTrack;
17
+ track: MediaParserAudioTrack;
18
18
  container: MediaParserContainer;
19
19
  tracks: TracksState;
20
- logLevel: LogLevel;
21
- onAudioTrack: OnAudioTrack | null;
20
+ logLevel: MediaParserLogLevel;
21
+ onAudioTrack: MediaParserOnAudioTrack | null;
22
22
  registerAudioSampleCallback: CallbacksState["registerAudioSampleCallback"];
23
- }) => Promise<import("./webcodec-sample-types").OnAudioSample | null>;
23
+ }) => Promise<import("./webcodec-sample-types").MediaParserOnAudioSample | null>;
24
24
  export declare const registerVideoTrackWhenProfileIsAvailable: ({ state, track, container, }: {
25
25
  state: ParserState;
26
- track: VideoTrack;
26
+ track: MediaParserVideoTrack;
27
27
  container: MediaParserContainer;
28
28
  }) => void;
@@ -1,6 +1,6 @@
1
- import type { LogLevel } from './log';
1
+ import type { MediaParserLogLevel } from './log';
2
2
  export declare const warnIfRemotionLicenseNotAcknowledged: ({ acknowledgeRemotionLicense, logLevel, apiName, }: {
3
3
  acknowledgeRemotionLicense: boolean;
4
- logLevel: LogLevel;
4
+ logLevel: MediaParserLogLevel;
5
5
  apiName: string;
6
6
  }) => void;
@@ -1,17 +1,17 @@
1
1
  import type { MediaParserController } from './controller/media-parser-controller';
2
2
  import type { PrefetchCache } from './fetch';
3
3
  import type { BufferIterator } from './iterator/buffer-iterator';
4
- import type { LogLevel } from './log';
4
+ import type { MediaParserLogLevel } from './log';
5
5
  import type { ParseMediaSrc } from './options';
6
- import type { ReaderInterface } from './readers/reader';
6
+ import type { MediaParserReaderInterface } from './readers/reader';
7
7
  import type { CurrentReader } from './state/current-reader';
8
8
  export declare const seekBackwards: ({ iterator, seekTo, readerInterface, src, controller, logLevel, currentReader, prefetchCache, }: {
9
9
  iterator: BufferIterator;
10
10
  seekTo: number;
11
- readerInterface: ReaderInterface;
11
+ readerInterface: MediaParserReaderInterface;
12
12
  src: ParseMediaSrc;
13
13
  controller: MediaParserController;
14
- logLevel: LogLevel;
14
+ logLevel: MediaParserLogLevel;
15
15
  currentReader: CurrentReader;
16
16
  prefetchCache: PrefetchCache;
17
17
  }) => Promise<void>;
@@ -2,18 +2,18 @@ import type { MediaParserController } from './controller/media-parser-controller
2
2
  import type { PrefetchCache } from './fetch';
3
3
  import type { AllOptions, ParseMediaFields } from './fields';
4
4
  import type { BufferIterator } from './iterator/buffer-iterator';
5
- import type { LogLevel } from './log';
5
+ import type { MediaParserLogLevel } from './log';
6
6
  import type { ParseMediaSrc } from './options';
7
- import type { ReaderInterface } from './readers/reader';
7
+ import type { MediaParserReaderInterface } from './readers/reader';
8
8
  import type { CurrentReader } from './state/current-reader';
9
9
  export declare const seekForward: ({ seekTo, userInitiated, iterator, fields, logLevel, currentReader, readerInterface, src, controller, discardReadBytes, prefetchCache, }: {
10
10
  seekTo: number;
11
11
  userInitiated: boolean;
12
12
  iterator: BufferIterator;
13
13
  fields: Partial<AllOptions<ParseMediaFields>>;
14
- logLevel: LogLevel;
14
+ logLevel: MediaParserLogLevel;
15
15
  currentReader: CurrentReader;
16
- readerInterface: ReaderInterface;
16
+ readerInterface: MediaParserReaderInterface;
17
17
  src: ParseMediaSrc;
18
18
  controller: MediaParserController;
19
19
  discardReadBytes: (force: boolean) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { ParseMediaOnWorker } from './options';
2
+ export declare const parseMediaOnServerWorker: ParseMediaOnWorker;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMediaOnServerWorker = void 0;
4
+ const parse_media_on_worker_entry_1 = require("./parse-media-on-worker-entry");
5
+ const parseMediaOnServerWorker = (params) => {
6
+ if (typeof Worker === 'undefined') {
7
+ throw new Error('"Worker" is not available. Cannot call parseMediaOnServerWorker()');
8
+ }
9
+ const worker = new Worker(new URL('./worker-server-entry', import.meta.url));
10
+ return (0, parse_media_on_worker_entry_1.parseMediaOnWorkerImplementation)(params, worker, 'parseMediaOnServerWorker');
11
+ };
12
+ exports.parseMediaOnServerWorker = parseMediaOnServerWorker;
@@ -15,7 +15,7 @@ const needsTracksForField = ({ field, structure, }) => {
15
15
  field === 'fps' ||
16
16
  field === 'isHdr' ||
17
17
  field === 'rotation' ||
18
- field === 'structure' ||
18
+ field === 'slowStructure' ||
19
19
  field === 'tracks' ||
20
20
  field === 'unrotatedDimensions' ||
21
21
  field === 'videoCodec' ||
@@ -16,7 +16,7 @@ const emittedState = () => {
16
16
  name: false,
17
17
  rotation: false,
18
18
  size: false,
19
- structure: false,
19
+ slowStructure: false,
20
20
  tracks: false,
21
21
  videoCodec: false,
22
22
  unrotatedDimensions: false,
@@ -1,14 +1,14 @@
1
1
  import type { Options, ParseMediaFields } from '../fields';
2
- import type { Track } from '../get-tracks';
3
- import type { LogLevel } from '../log';
2
+ import type { MediaParserTrack } from '../get-tracks';
3
+ import type { MediaParserLogLevel } from '../log';
4
4
  import type { ParseMediaSrc } from '../options';
5
5
  import type { CanSkipTracksState } from './can-skip-tracks';
6
6
  export declare const makeTracksSectionState: (canSkipTracksState: CanSkipTracksState, src: ParseMediaSrc) => {
7
7
  hasAllTracks: () => boolean;
8
8
  getIsDone: () => boolean;
9
- setIsDone: (logLevel: LogLevel) => void;
10
- addTrack: (track: Track) => void;
11
- getTracks: () => Track[];
9
+ setIsDone: (logLevel: MediaParserLogLevel) => void;
10
+ addTrack: (track: MediaParserTrack) => void;
11
+ getTracks: () => MediaParserTrack[];
12
12
  ensureHasTracksAtEnd: (fields: Options<ParseMediaFields>) => void;
13
13
  };
14
14
  export type TracksState = ReturnType<typeof makeTracksSectionState>;
@@ -1,9 +1,9 @@
1
1
  import type { JumpMark } from '../../containers/iso-base-media/mdat/calculate-jump-marks';
2
2
  import type { SamplePosition } from '../../get-sample-positions';
3
- import type { AudioTrack, OtherTrack, VideoTrack } from '../../get-tracks';
3
+ import type { MediaParserAudioTrack, MediaParserOtherTrack, MediaParserVideoTrack } from '../../get-tracks';
4
4
  import type { ParserState } from '../parser-state';
5
5
  export type FlatSample = {
6
- track: VideoTrack | AudioTrack | OtherTrack;
6
+ track: MediaParserVideoTrack | MediaParserAudioTrack | MediaParserOtherTrack;
7
7
  samplePosition: SamplePosition;
8
8
  };
9
9
  export type MinimalFlatSampleForTesting = {
@@ -21,7 +21,7 @@ export declare const calculateFlatSamples: ({ state, mediaSectionStart, }: {
21
21
  state: ParserState;
22
22
  mediaSectionStart: number;
23
23
  }) => {
24
- track: VideoTrack | AudioTrack | OtherTrack;
24
+ track: import("../../get-tracks").MediaParserTrack;
25
25
  samplePosition: SamplePosition;
26
26
  }[][];
27
27
  export declare const cachedSamplePositionsState: () => {