@remotion/media-parser 4.0.286 → 4.0.288

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 (243) hide show
  1. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  2. package/dist/containers/flac/get-seeking-byte.d.ts +6 -0
  3. package/dist/containers/flac/get-seeking-byte.js +26 -0
  4. package/dist/containers/flac/parse-meta.d.ts +6 -0
  5. package/dist/containers/flac/parse-meta.js +31 -0
  6. package/dist/containers/flac/seeking-hints.d.ts +15 -0
  7. package/dist/containers/flac/seeking-hints.js +19 -0
  8. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +2 -2
  9. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +6 -3
  10. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +7 -5
  11. package/dist/containers/iso-base-media/get-keyframes.js +1 -1
  12. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -2
  13. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +15 -0
  14. package/dist/containers/iso-base-media/{get-seeking-from-mp4.js → get-seeking-byte.js} +16 -2
  15. package/dist/containers/iso-base-media/mdat/mdat.js +13 -5
  16. package/dist/containers/iso-base-media/mdat/postprocess-bytes.d.ts +5 -0
  17. package/dist/containers/iso-base-media/mdat/postprocess-bytes.js +25 -0
  18. package/dist/containers/iso-base-media/process-box.js +5 -3
  19. package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts} +8 -3
  20. package/dist/containers/iso-base-media/seeking-hints.js +53 -0
  21. package/dist/containers/iso-base-media/should-group-audio-samples.d.ts +6 -0
  22. package/dist/containers/iso-base-media/should-group-audio-samples.js +16 -0
  23. package/dist/containers/iso-base-media/traversal.d.ts +4 -2
  24. package/dist/containers/iso-base-media/traversal.js +6 -5
  25. package/dist/containers/m3u/iterate-over-segment-files.js +23 -20
  26. package/dist/containers/riff/parse-video-section.js +1 -1
  27. package/dist/containers/transport-stream/handle-aac-packet.js +4 -1
  28. package/dist/containers/transport-stream/handle-avc-packet.js +4 -1
  29. package/dist/containers/transport-stream/seeking-hints.d.ts +9 -0
  30. package/dist/containers/transport-stream/seeking-hints.js +26 -0
  31. package/dist/containers/wav/get-seeking-byte.d.ts +2 -2
  32. package/dist/containers/wav/get-seeking-byte.js +2 -2
  33. package/dist/containers/wav/seeking-hints.d.ts +12 -0
  34. package/dist/containers/wav/seeking-hints.js +25 -0
  35. package/dist/containers/webm/seek/get-seeking-byte.d.ts +3 -5
  36. package/dist/containers/webm/seek/get-seeking-byte.js +5 -5
  37. package/dist/containers/webm/seek/seeking-hints.d.ts +10 -0
  38. package/dist/containers/webm/seek/seeking-hints.js +28 -0
  39. package/dist/controller/media-parser-controller.d.ts +3 -0
  40. package/dist/controller/media-parser-controller.js +15 -0
  41. package/dist/download-and-parse-media.js +2 -1
  42. package/dist/emit-available-info.js +1 -1
  43. package/dist/esm/index.mjs +491 -208
  44. package/dist/esm/node-writer.mjs +1 -2
  45. package/dist/esm/node.mjs +1 -2
  46. package/dist/esm/server-worker.mjs +46 -1
  47. package/dist/esm/universal.mjs +2 -4
  48. package/dist/esm/web.mjs +1 -2
  49. package/dist/esm/worker-server-entry.mjs +527 -215
  50. package/dist/esm/worker-web-entry.mjs +526 -213
  51. package/dist/esm/worker.mjs +46 -1
  52. package/dist/{forward-controller.d.ts → forward-controller-pause-resume-abort.d.ts} +1 -1
  53. package/dist/{forward-controller.js → forward-controller-pause-resume-abort.js} +3 -3
  54. package/dist/get-audio-codec.d.ts +1 -0
  55. package/dist/get-audio-codec.js +15 -4
  56. package/dist/get-dimensions.js +1 -1
  57. package/dist/get-duration.js +3 -2
  58. package/dist/get-fps.js +1 -0
  59. package/dist/get-is-hdr.js +2 -2
  60. package/dist/get-keyframes.js +1 -1
  61. package/dist/get-sample-positions-from-mp4.d.ts +4 -1
  62. package/dist/get-sample-positions-from-mp4.js +3 -1
  63. package/dist/get-sample-positions.d.ts +2 -0
  64. package/dist/get-sample-positions.js +2 -0
  65. package/dist/get-seeking-byte.d.ts +7 -5
  66. package/dist/get-seeking-byte.js +13 -12
  67. package/dist/{get-seeking-info.d.ts → get-seeking-hints.d.ts} +7 -3
  68. package/dist/get-seeking-hints.js +35 -0
  69. package/dist/get-tracks.d.ts +4 -4
  70. package/dist/get-tracks.js +8 -6
  71. package/dist/get-video-codec.js +2 -2
  72. package/dist/has-all-info.js +1 -1
  73. package/dist/index.d.ts +31 -3
  74. package/dist/internal-parse-media.js +16 -1
  75. package/dist/iterator/buffer-iterator.js +3 -4
  76. package/dist/metadata/metadata-from-iso.js +1 -0
  77. package/dist/options.d.ts +2 -0
  78. package/dist/parse-media-on-worker-entry.js +51 -1
  79. package/dist/parse-media.js +2 -1
  80. package/dist/samples-from-moof.d.ts +2 -2
  81. package/dist/samples-from-moof.js +7 -8
  82. package/dist/seeking-hints.d.ts +39 -0
  83. package/dist/set-seeking-hints.d.ts +6 -0
  84. package/dist/set-seeking-hints.js +27 -0
  85. package/dist/state/audio-sample-map.d.ts +11 -0
  86. package/dist/state/audio-sample-map.js +21 -0
  87. package/dist/state/has-tracks-section.js +3 -1
  88. package/dist/state/iso-base-media/cached-sample-positions.js +1 -1
  89. package/dist/state/iso-base-media/iso-state.d.ts +18 -2
  90. package/dist/state/iso-base-media/iso-state.js +4 -0
  91. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -0
  92. package/dist/state/iso-base-media/lazy-mfra-load.js +13 -0
  93. package/dist/state/iso-base-media/moov-box.d.ts +7 -2
  94. package/dist/state/iso-base-media/moov-box.js +1 -1
  95. package/dist/state/iso-base-media/precomputed-moof.d.ts +11 -0
  96. package/dist/state/iso-base-media/precomputed-moof.js +28 -0
  97. package/dist/state/iso-base-media/precomputed-tfra.d.ts +6 -0
  98. package/dist/state/iso-base-media/precomputed-tfra.js +17 -0
  99. package/dist/state/keyframes.d.ts +2 -0
  100. package/dist/state/keyframes.js +17 -9
  101. package/dist/state/matroska/lazy-cues-fetch.d.ts +7 -1
  102. package/dist/state/matroska/lazy-cues-fetch.js +21 -0
  103. package/dist/state/matroska/webm.d.ts +7 -0
  104. package/dist/state/matroska/webm.js +9 -1
  105. package/dist/state/parser-state.d.ts +31 -3
  106. package/dist/state/samples-observed/slow-duration-fps.js +0 -3
  107. package/dist/state/transport-stream/observed-pes-header.d.ts +2 -0
  108. package/dist/state/transport-stream/observed-pes-header.js +22 -12
  109. package/dist/state/transport-stream/pts-start-offset.d.ts +4 -1
  110. package/dist/state/transport-stream/pts-start-offset.js +1 -1
  111. package/dist/state/transport-stream/transport-stream.d.ts +5 -1
  112. package/dist/version.d.ts +1 -1
  113. package/dist/version.js +1 -1
  114. package/dist/with-resolvers.d.ts +5 -0
  115. package/dist/work-on-seek-request.js +8 -5
  116. package/dist/worker/{forward-controller.js → forward-controller-to-worker.js} +17 -0
  117. package/dist/worker/serialize-error.d.ts +6 -1
  118. package/dist/worker/serialize-error.js +2 -1
  119. package/dist/worker/worker-types.d.ts +12 -2
  120. package/dist/worker-server.js +16 -5
  121. package/package.json +3 -3
  122. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +0 -9
  123. package/dist/containers/iso-base-media/get-mfra-atom.js +0 -12
  124. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -11
  125. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +0 -25
  126. package/dist/containers/iso-base-media/mfra/mfra.d.ts +0 -2
  127. package/dist/containers/iso-base-media/mfra/mfra.js +0 -11
  128. package/dist/containers/transport-stream/get-seeking-info.d.ts +0 -4
  129. package/dist/containers/transport-stream/get-seeking-info.js +0 -17
  130. package/dist/containers/transport-stream/next-pes-header-store.d.ts +0 -6
  131. package/dist/containers/transport-stream/next-pes-header-store.js +0 -18
  132. package/dist/containers/transport-stream/start-offset.d.ts +0 -4
  133. package/dist/containers/transport-stream/start-offset.js +0 -13
  134. package/dist/containers/wav/get-seeking-info.d.ts +0 -7
  135. package/dist/containers/wav/get-seeking-info.js +0 -20
  136. package/dist/containers/wav/parse-video-section.d.ts +0 -5
  137. package/dist/containers/wav/parse-video-section.js +0 -41
  138. package/dist/containers/webm/cues/fetch-web-cues.d.ts +0 -12
  139. package/dist/containers/webm/cues/fetch-web-cues.js +0 -32
  140. package/dist/containers/webm/cues/format-cues.d.ts +0 -8
  141. package/dist/containers/webm/cues/format-cues.js +0 -41
  142. package/dist/containers/webm/cues/get-seeking-byte.d.ts +0 -14
  143. package/dist/containers/webm/cues/get-seeking-byte.js +0 -91
  144. package/dist/containers/webm/fetch-web-cues.d.ts +0 -12
  145. package/dist/containers/webm/fetch-web-cues.js +0 -29
  146. package/dist/containers/webm/get-seeking-byte.d.ts +0 -14
  147. package/dist/containers/webm/get-seeking-byte.js +0 -91
  148. package/dist/containers/webm/get-seeking-info.d.ts +0 -3
  149. package/dist/containers/webm/get-seeking-info.js +0 -17
  150. package/dist/containers/webm/seek/get-seeking-info.d.ts +0 -3
  151. package/dist/containers/webm/seek/get-seeking-info.js +0 -17
  152. package/dist/emitter.d.ts +0 -33
  153. package/dist/emitter.js +0 -65
  154. package/dist/get-sample-positions-from-lpcm.d.ts +0 -3
  155. package/dist/get-sample-positions-from-lpcm.js +0 -46
  156. package/dist/get-seeking-info.js +0 -35
  157. package/dist/media-parser-controller.d.ts +0 -21
  158. package/dist/media-parser-controller.js +0 -38
  159. package/dist/pause-signal.d.ts +0 -11
  160. package/dist/pause-signal.js +0 -38
  161. package/dist/readers/state/aac-state.d.ts +0 -13
  162. package/dist/readers/state/aac-state.js +0 -17
  163. package/dist/readers/state/can-skip-tracks.d.ts +0 -16
  164. package/dist/readers/state/can-skip-tracks.js +0 -60
  165. package/dist/readers/state/current-reader.d.ts +0 -6
  166. package/dist/readers/state/current-reader.js +0 -13
  167. package/dist/readers/state/emitted-fields.d.ts +0 -1
  168. package/dist/readers/state/emitted-fields.js +0 -37
  169. package/dist/readers/state/flac-state.d.ts +0 -4
  170. package/dist/readers/state/flac-state.js +0 -13
  171. package/dist/readers/state/has-tracks-section.d.ts +0 -14
  172. package/dist/readers/state/has-tracks-section.js +0 -37
  173. package/dist/readers/state/images.d.ts +0 -9
  174. package/dist/readers/state/images.js +0 -14
  175. package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +0 -12
  176. package/dist/readers/state/iso-base-media/cached-sample-positions.js +0 -46
  177. package/dist/readers/state/iso-base-media/iso-state.d.ts +0 -24
  178. package/dist/readers/state/iso-base-media/iso-state.js +0 -20
  179. package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +0 -13
  180. package/dist/readers/state/iso-base-media/lazy-mfra-load.js +0 -29
  181. package/dist/readers/state/iso-base-media/moov-box.d.ts +0 -5
  182. package/dist/readers/state/iso-base-media/moov-box.js +0 -13
  183. package/dist/readers/state/keyframes.d.ts +0 -6
  184. package/dist/readers/state/keyframes.js +0 -15
  185. package/dist/readers/state/m3u-state.d.ts +0 -44
  186. package/dist/readers/state/m3u-state.js +0 -124
  187. package/dist/readers/state/may-skip-video-data.d.ts +0 -4
  188. package/dist/readers/state/may-skip-video-data.js +0 -18
  189. package/dist/readers/state/mp3.d.ts +0 -15
  190. package/dist/readers/state/mp3.js +0 -19
  191. package/dist/readers/state/need-samples-for-fields.d.ts +0 -6
  192. package/dist/readers/state/need-samples-for-fields.js +0 -39
  193. package/dist/readers/state/parser-state.d.ts +0 -252
  194. package/dist/readers/state/parser-state.js +0 -124
  195. package/dist/readers/state/riff.d.ts +0 -10
  196. package/dist/readers/state/riff.js +0 -32
  197. package/dist/readers/state/sample-callbacks.d.ts +0 -44
  198. package/dist/readers/state/sample-callbacks.js +0 -118
  199. package/dist/readers/state/seek-infinite-loop.d.ts +0 -5
  200. package/dist/readers/state/seek-infinite-loop.js +0 -22
  201. package/dist/readers/state/slow-duration-fps.d.ts +0 -11
  202. package/dist/readers/state/slow-duration-fps.js +0 -86
  203. package/dist/readers/state/structure.d.ts +0 -15
  204. package/dist/readers/state/structure.js +0 -78
  205. package/dist/readers/state/timings.d.ts +0 -8
  206. package/dist/readers/state/timings.js +0 -13
  207. package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +0 -6
  208. package/dist/readers/state/transport-stream/last-emitted-sample.js +0 -16
  209. package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +0 -6
  210. package/dist/readers/state/transport-stream/next-pes-header-store.js +0 -18
  211. package/dist/readers/state/transport-stream/start-offset.d.ts +0 -4
  212. package/dist/readers/state/transport-stream/start-offset.js +0 -13
  213. package/dist/readers/state/transport-stream/transport-stream.d.ts +0 -19
  214. package/dist/readers/state/transport-stream/transport-stream.js +0 -25
  215. package/dist/readers/state/video-section.d.ts +0 -33
  216. package/dist/readers/state/video-section.js +0 -65
  217. package/dist/readers/state/webm.d.ts +0 -28
  218. package/dist/readers/state/webm.js +0 -109
  219. package/dist/seek-signal.d.ts +0 -19
  220. package/dist/seek-signal.js +0 -24
  221. package/dist/seeking-info.d.ts +0 -31
  222. package/dist/server-worker.module.d.ts +0 -2
  223. package/dist/server-worker.module.js +0 -12
  224. package/dist/state/matroska/lazy-seek-fetch.d.ts +0 -1
  225. package/dist/state/matroska/lazy-seek-fetch.js +0 -5
  226. package/dist/state/matroska.d.ts +0 -0
  227. package/dist/state/matroska.js +0 -1
  228. package/dist/state/slow-duration-fps.d.ts +0 -11
  229. package/dist/state/slow-duration-fps.js +0 -86
  230. package/dist/state/transport-stream/start-offset.d.ts +0 -5
  231. package/dist/state/transport-stream/start-offset.js +0 -13
  232. package/dist/state/transport-stream.d.ts +0 -8
  233. package/dist/state/transport-stream.js +0 -11
  234. package/dist/state/uml.d.ts +0 -32
  235. package/dist/state/uml.js +0 -52
  236. package/dist/state/webm.d.ts +0 -30
  237. package/dist/state/webm.js +0 -109
  238. package/dist/state/work-on-seek-request-options.d.ts +0 -3
  239. package/dist/state/work-on-seek-request-options.js +0 -26
  240. package/dist/worker.module.d.ts +0 -4
  241. package/dist/worker.module.js +0 -12
  242. /package/dist/{seeking-info.js → seeking-hints.js} +0 -0
  243. /package/dist/worker/{forward-controller.d.ts → forward-controller-to-worker.d.ts} +0 -0
@@ -235,6 +235,7 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
235
235
  throw new Error(`\`reader\` should not be provided to \`${apiName}\`. If you want to use it in the browser, use parseMediaOnWorker(). If you also want to read files from the file system, use parseMediaOnServerWorker().`);
236
236
  }
237
237
  post(worker, convertToWorkerPayload(params));
238
+ let workerTerminated = false;
238
239
  const { promise, resolve, reject } = withResolvers();
239
240
  const onAbort = () => {
240
241
  post(worker, { type: "request-abort" });
@@ -249,15 +250,48 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
249
250
  post(worker, { type: "request-seek", payload: seek });
250
251
  controller?._internals.seekSignal.clearSeekIfStillSame(seek);
251
252
  };
253
+ const seekingHintPromises = [];
254
+ let finalSeekingHints = null;
255
+ controller?._internals.attachSeekingHintResolution(() => {
256
+ if (finalSeekingHints) {
257
+ return Promise.resolve(finalSeekingHints);
258
+ }
259
+ if (workerTerminated) {
260
+ return Promise.reject(new Error("Worker terminated"));
261
+ }
262
+ const prom = withResolvers();
263
+ post(worker, { type: "request-get-seeking-hints" });
264
+ seekingHintPromises.push(prom);
265
+ return prom.promise;
266
+ });
252
267
  const callbacks = {};
253
268
  function onMessage(message) {
254
269
  const data = message.data;
255
270
  if (data.type === "response-done") {
256
271
  resolve(data.payload);
272
+ if (data.seekingHints) {
273
+ finalSeekingHints = data.seekingHints;
274
+ for (const prom of seekingHintPromises) {
275
+ prom.resolve(finalSeekingHints);
276
+ }
277
+ }
278
+ return;
257
279
  }
258
280
  if (data.type === "response-error") {
259
281
  cleanup();
260
- reject(deserializeError(data));
282
+ const error = deserializeError(data);
283
+ reject(error);
284
+ if (data.errorName === "MediaParserAbortError") {
285
+ finalSeekingHints = data.seekingHints;
286
+ for (const prom of seekingHintPromises) {
287
+ prom.resolve(finalSeekingHints);
288
+ }
289
+ } else {
290
+ for (const prom of seekingHintPromises) {
291
+ prom.reject(error);
292
+ }
293
+ }
294
+ return;
261
295
  }
262
296
  if (data.type === "response-on-callback-request") {
263
297
  Promise.resolve().then(async () => {
@@ -430,7 +464,17 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
430
464
  nonce: data.nonce
431
465
  });
432
466
  });
467
+ return;
468
+ }
469
+ if (data.type === "response-get-seeking-hints") {
470
+ const firstPromise = seekingHintPromises.shift();
471
+ if (!firstPromise) {
472
+ throw new Error("No seeking hint promise found");
473
+ }
474
+ firstPromise.resolve(data.payload);
475
+ return;
433
476
  }
477
+ throw new Error(`Unknown response type: ${JSON.stringify(data)}`);
434
478
  }
435
479
  worker.addEventListener("message", onMessage);
436
480
  controller?.addEventListener("abort", onAbort);
@@ -443,6 +487,7 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
443
487
  controller?.removeEventListener("resume", onResume);
444
488
  controller?.removeEventListener("pause", onPause);
445
489
  controller?.removeEventListener("seek", onSeek);
490
+ workerTerminated = true;
446
491
  worker.terminate();
447
492
  }
448
493
  controller?._internals.markAsReadyToEmitEvents();
@@ -1,5 +1,5 @@
1
1
  import type { MediaParserController } from './controller/media-parser-controller';
2
- export declare const forwardMediaParserController: ({ parentController, childController, }: {
2
+ export declare const forwardMediaParserControllerPauseResume: ({ parentController, childController, }: {
3
3
  parentController: MediaParserController;
4
4
  childController: MediaParserController;
5
5
  }) => {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.forwardMediaParserController = void 0;
4
- const forwardMediaParserController = ({ parentController, childController, }) => {
3
+ exports.forwardMediaParserControllerPauseResume = void 0;
4
+ const forwardMediaParserControllerPauseResume = ({ parentController, childController, }) => {
5
5
  const onAbort = ({ detail }) => {
6
6
  childController.abort(detail.reason);
7
7
  };
@@ -22,4 +22,4 @@ const forwardMediaParserController = ({ parentController, childController, }) =>
22
22
  },
23
23
  };
24
24
  };
25
- exports.forwardMediaParserController = forwardMediaParserController;
25
+ exports.forwardMediaParserControllerPauseResume = forwardMediaParserControllerPauseResume;
@@ -16,6 +16,7 @@ export declare const getSampleRate: (trak: TrakBox) => number | null;
16
16
  export declare const getAudioCodecFromTrak: (trak: TrakBox) => AudioCodecInfo | null;
17
17
  export declare const isLpcmAudioCodec: (trak: TrakBox) => boolean;
18
18
  export declare const isIn24AudioCodec: (trak: TrakBox) => boolean;
19
+ export declare const isTwosAudioCodec: (trak: TrakBox) => boolean;
19
20
  export declare const getAudioCodecFromIso: (moov: MoovBox) => AudioCodecInfo | null;
20
21
  export declare const getAudioCodecStringFromTrak: (trak: TrakBox) => {
21
22
  codecString: string;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.isIn24AudioCodec = exports.isLpcmAudioCodec = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
3
+ exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.isTwosAudioCodec = exports.isIn24AudioCodec = exports.isLpcmAudioCodec = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
4
4
  const traversal_1 = require("./containers/iso-base-media/traversal");
5
5
  const get_fps_1 = require("./get-fps");
6
6
  const get_tracks_1 = require("./get-tracks");
7
7
  const getAudioCodec = (parserState) => {
8
- const tracks = (0, get_tracks_1.getTracks)(parserState);
8
+ const tracks = (0, get_tracks_1.getTracks)(parserState, true);
9
9
  const allTracks = tracks.audioTracks.length +
10
10
  tracks.otherTracks.length +
11
11
  tracks.videoTracks.length;
@@ -23,7 +23,7 @@ const getAudioCodec = (parserState) => {
23
23
  };
24
24
  exports.getAudioCodec = getAudioCodec;
25
25
  const hasAudioCodec = (state) => {
26
- return (0, get_tracks_1.getHasTracks)(state);
26
+ return (0, get_tracks_1.getHasTracks)(state, true);
27
27
  };
28
28
  exports.hasAudioCodec = hasAudioCodec;
29
29
  const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
@@ -153,6 +153,11 @@ const isIn24AudioCodec = (trak) => {
153
153
  return ((_a = (0, exports.getAudioCodecFromTrak)(trak)) === null || _a === void 0 ? void 0 : _a.format) === 'in24';
154
154
  };
155
155
  exports.isIn24AudioCodec = isIn24AudioCodec;
156
+ const isTwosAudioCodec = (trak) => {
157
+ var _a;
158
+ return ((_a = (0, exports.getAudioCodecFromTrak)(trak)) === null || _a === void 0 ? void 0 : _a.format) === 'twos';
159
+ };
160
+ exports.isTwosAudioCodec = isTwosAudioCodec;
156
161
  const getAudioCodecFromIso = (moov) => {
157
162
  const traks = (0, traversal_1.getTraks)(moov);
158
163
  const trakBox = traks.find((b) => b.type === 'trak-box' && (0, get_fps_1.trakBoxContainsAudio)(b));
@@ -173,10 +178,16 @@ const getAudioCodecStringFromTrak = (trak) => {
173
178
  description: codec.description,
174
179
  };
175
180
  }
181
+ if (codec.format === 'twos') {
182
+ return {
183
+ codecString: 'pcm-s16',
184
+ description: codec.description,
185
+ };
186
+ }
176
187
  if (codec.format === 'in24') {
177
188
  return {
178
189
  codecString: 'pcm-s24',
179
- description: undefined,
190
+ description: codec.description,
180
191
  };
181
192
  }
182
193
  const codecStringWithoutMp3Exception = [
@@ -8,7 +8,7 @@ const getDimensions = (state) => {
8
8
  if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
9
9
  return null;
10
10
  }
11
- const { videoTracks } = (0, get_tracks_1.getTracks)(state);
11
+ const { videoTracks } = (0, get_tracks_1.getTracks)(state, true);
12
12
  if (!videoTracks.length) {
13
13
  return null;
14
14
  }
@@ -44,6 +44,7 @@ const getDurationFromIsoBaseMedia = (parserState) => {
44
44
  structureState: parserState.structure,
45
45
  isoState: parserState.iso,
46
46
  mp4HeaderSegment: parserState.mp4HeaderSegment,
47
+ mayUsePrecomputed: true,
47
48
  });
48
49
  if (!moovBox) {
49
50
  return null;
@@ -60,7 +61,7 @@ const getDurationFromIsoBaseMedia = (parserState) => {
60
61
  if (mvhdBox.durationInSeconds > 0) {
61
62
  return mvhdBox.durationInSeconds;
62
63
  }
63
- const tracks = (0, get_tracks_1.getTracks)(parserState);
64
+ const tracks = (0, get_tracks_1.getTracks)(parserState, true);
64
65
  const allTracks = [
65
66
  ...tracks.videoTracks,
66
67
  ...tracks.audioTracks,
@@ -127,7 +128,7 @@ const hasDuration = (parserState) => {
127
128
  if (structure === null) {
128
129
  return false;
129
130
  }
130
- return (0, get_tracks_1.getHasTracks)(parserState);
131
+ return (0, get_tracks_1.getHasTracks)(parserState, true);
131
132
  };
132
133
  exports.hasDuration = hasDuration;
133
134
  // `slowDuration` goes through everything, and therefore is false
package/dist/get-fps.js CHANGED
@@ -69,6 +69,7 @@ const getFpsFromIsoMaseMedia = (state) => {
69
69
  structureState: state.structure,
70
70
  isoState: state.iso,
71
71
  mp4HeaderSegment: state.mp4HeaderSegment,
72
+ mayUsePrecomputed: true,
72
73
  });
73
74
  if (!moovBox) {
74
75
  return null;
@@ -8,11 +8,11 @@ const isVideoTrackHdr = (track) => {
8
8
  track.color.primaries === 'bt2020');
9
9
  };
10
10
  const getIsHdr = (state) => {
11
- const { videoTracks } = (0, get_tracks_1.getTracks)(state);
11
+ const { videoTracks } = (0, get_tracks_1.getTracks)(state, true);
12
12
  return videoTracks.some((track) => isVideoTrackHdr(track));
13
13
  };
14
14
  exports.getIsHdr = getIsHdr;
15
15
  const hasHdr = (state) => {
16
- return (0, get_tracks_1.getHasTracks)(state);
16
+ return (0, get_tracks_1.getHasTracks)(state, true);
17
17
  };
18
18
  exports.hasHdr = hasHdr;
@@ -14,7 +14,7 @@ exports.getKeyframes = getKeyframes;
14
14
  const hasKeyframes = (parserState) => {
15
15
  const structure = parserState.structure.getStructure();
16
16
  if (structure.type === 'iso-base-media') {
17
- return (0, get_tracks_1.getHasTracks)(parserState);
17
+ return (0, get_tracks_1.getHasTracks)(parserState, true);
18
18
  }
19
19
  // Has, but will be null
20
20
  return true;
@@ -1,3 +1,6 @@
1
1
  import type { TrakBox } from './containers/iso-base-media/trak/trak';
2
2
  import type { SamplePosition } from './get-sample-positions';
3
- export declare const getGroupedSamplesPositionsFromMp4: (trakBox: TrakBox) => SamplePosition[];
3
+ export declare const getGroupedSamplesPositionsFromMp4: ({ trakBox, bigEndian, }: {
4
+ trakBox: TrakBox;
5
+ bigEndian: boolean;
6
+ }) => SamplePosition[];
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.getGroupedSamplesPositionsFromMp4 = void 0;
6
6
  const traversal_1 = require("./containers/iso-base-media/traversal");
7
7
  // example video: mehmet.mov
8
- const getGroupedSamplesPositionsFromMp4 = (trakBox) => {
8
+ const getGroupedSamplesPositionsFromMp4 = ({ trakBox, bigEndian, }) => {
9
9
  const stscBox = (0, traversal_1.getStscBox)(trakBox);
10
10
  const stszBox = (0, traversal_1.getStszBox)(trakBox);
11
11
  const stcoBox = (0, traversal_1.getStcoBox)(trakBox);
@@ -38,6 +38,8 @@ const getGroupedSamplesPositionsFromMp4 = (trakBox) => {
38
38
  size: stszBox.sampleSize * stscEntry.samplesPerChunk,
39
39
  duration: stscEntry.samplesPerChunk,
40
40
  isKeyframe: true,
41
+ bigEndian,
42
+ chunkSize: stszBox.sampleSize,
41
43
  });
42
44
  timestamp += stscEntry.samplesPerChunk;
43
45
  }
@@ -12,6 +12,8 @@ export type SamplePosition = {
12
12
  cts: number;
13
13
  duration: number;
14
14
  chunk: number;
15
+ bigEndian: boolean;
16
+ chunkSize: number | null;
15
17
  };
16
18
  export declare const getSamplePositions: ({ stcoBox, stszBox, stscBox, stssBox, sttsBox, cttsBox, }: {
17
19
  stcoBox: StcoBox;
@@ -45,6 +45,8 @@ const getSamplePositions = ({ stcoBox, stszBox, stscBox, stssBox, sttsBox, cttsB
45
45
  cts,
46
46
  duration: delta,
47
47
  chunk: i,
48
+ bigEndian: false,
49
+ chunkSize: null,
48
50
  });
49
51
  dts += delta;
50
52
  offsetInThisChunk += size;
@@ -1,13 +1,14 @@
1
1
  import type { LogLevel } from './log';
2
- import type { SeekingInfo } from './seeking-info';
2
+ import type { IsoBaseMediaStructure } from './parse-result';
3
+ import type { SeekingHints } from './seeking-hints';
3
4
  import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
4
- import type { KeyframesState } from './state/keyframes';
5
5
  import type { WebmState } from './state/matroska/webm';
6
+ import type { StructureState } from './state/structure';
6
7
  import type { TransportStreamState } from './state/transport-stream/transport-stream';
7
8
  import type { MediaSectionState } from './state/video-section';
8
9
  import type { SeekResolution } from './work-on-seek-request';
9
- export declare const getSeekingByte: ({ info, time, logLevel, currentPosition, isoState, transportStream, webmState, mediaSection, keyframes, }: {
10
- info: SeekingInfo;
10
+ export declare const getSeekingByte: ({ info, time, logLevel, currentPosition, isoState, transportStream, webmState, mediaSection, mp4HeaderSegment, structure, }: {
11
+ info: SeekingHints;
11
12
  time: number;
12
13
  logLevel: LogLevel;
13
14
  currentPosition: number;
@@ -15,5 +16,6 @@ export declare const getSeekingByte: ({ info, time, logLevel, currentPosition, i
15
16
  transportStream: TransportStreamState;
16
17
  webmState: WebmState;
17
18
  mediaSection: MediaSectionState;
18
- keyframes: KeyframesState;
19
+ structure: StructureState;
20
+ mp4HeaderSegment: IsoBaseMediaStructure | null;
19
21
  }) => Promise<SeekResolution>;
@@ -1,38 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSeekingByte = void 0;
4
- const get_seeking_from_mp4_1 = require("./containers/iso-base-media/get-seeking-from-mp4");
5
- const get_seeking_byte_1 = require("./containers/wav/get-seeking-byte");
6
- const get_seeking_byte_2 = require("./containers/webm/seek/get-seeking-byte");
4
+ const get_seeking_byte_1 = require("./containers/iso-base-media/get-seeking-byte");
5
+ const get_seeking_byte_2 = require("./containers/wav/get-seeking-byte");
6
+ const get_seeking_byte_3 = require("./containers/webm/seek/get-seeking-byte");
7
7
  const observed_pes_header_1 = require("./state/transport-stream/observed-pes-header");
8
- const getSeekingByte = ({ info, time, logLevel, currentPosition, isoState, transportStream, webmState, mediaSection, keyframes, }) => {
8
+ const getSeekingByte = ({ info, time, logLevel, currentPosition, isoState, transportStream, webmState, mediaSection, mp4HeaderSegment, structure, }) => {
9
9
  var _a;
10
- if (info.type === 'iso-base-media-seeking-info') {
11
- return (0, get_seeking_from_mp4_1.getSeekingByteFromIsoBaseMedia)({
10
+ if (info.type === 'iso-base-media-seeking-hints') {
11
+ return (0, get_seeking_byte_1.getSeekingByteFromIsoBaseMedia)({
12
12
  info,
13
13
  time,
14
14
  logLevel,
15
15
  currentPosition,
16
16
  isoState,
17
+ mp4HeaderSegment,
18
+ structure,
17
19
  });
18
20
  }
19
- if (info.type === 'wav-seeking-info') {
20
- return (0, get_seeking_byte_1.getSeekingByteFromWav)({
21
+ if (info.type === 'wav-seeking-hints') {
22
+ return (0, get_seeking_byte_2.getSeekingByteFromWav)({
21
23
  info,
22
24
  time,
23
25
  });
24
26
  }
25
- if (info.type === 'webm-seeking-info') {
26
- return (0, get_seeking_byte_2.getSeekingByteFromMatroska)({
27
+ if (info.type === 'webm-seeking-hints') {
28
+ return (0, get_seeking_byte_3.getSeekingByteFromMatroska)({
27
29
  info,
28
30
  time,
29
31
  webmState,
30
32
  logLevel,
31
33
  mediaSection,
32
- keyframes,
33
34
  });
34
35
  }
35
- if (info.type === 'transport-stream-seeking-info') {
36
+ if (info.type === 'transport-stream-seeking-hints') {
36
37
  const lastKeyframeBeforeTimeInSeconds = (0, observed_pes_header_1.getLastKeyFrameBeforeTimeInSeconds)({
37
38
  observedPesHeaders: info.observedPesHeaders,
38
39
  timeInSeconds: time,
@@ -1,15 +1,19 @@
1
1
  import type { IsoBaseMediaStructure } from './parse-result';
2
- import type { SeekingInfo } from './seeking-info';
2
+ import type { SeekingHints } from './seeking-hints';
3
3
  import type { TracksState } from './state/has-tracks-section';
4
4
  import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
5
+ import type { KeyframesState } from './state/keyframes';
6
+ import type { WebmState } from './state/matroska/webm';
5
7
  import type { StructureState } from './state/structure';
6
8
  import type { TransportStreamState } from './state/transport-stream/transport-stream';
7
9
  import type { MediaSectionState } from './state/video-section';
8
- export declare const getSeekingInfo: ({ structureState, mp4HeaderSegment, mediaSectionState, isoState, transportStream, tracksState, }: {
10
+ export declare const getSeekingHints: ({ structureState, mp4HeaderSegment, mediaSectionState, isoState, transportStream, tracksState, keyframesState, webmState, }: {
9
11
  structureState: StructureState;
10
12
  mp4HeaderSegment: IsoBaseMediaStructure | null;
11
13
  mediaSectionState: MediaSectionState;
12
14
  isoState: IsoBaseMediaState;
13
15
  transportStream: TransportStreamState;
14
16
  tracksState: TracksState;
15
- }) => SeekingInfo | null;
17
+ keyframesState: KeyframesState;
18
+ webmState: WebmState;
19
+ }) => SeekingHints | null;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSeekingHints = void 0;
4
+ const seeking_hints_1 = require("./containers/iso-base-media/seeking-hints");
5
+ const seeking_hints_2 = require("./containers/transport-stream/seeking-hints");
6
+ const seeking_hints_3 = require("./containers/wav/seeking-hints");
7
+ const seeking_hints_4 = require("./containers/webm/seek/seeking-hints");
8
+ const getSeekingHints = ({ structureState, mp4HeaderSegment, mediaSectionState, isoState, transportStream, tracksState, keyframesState, webmState, }) => {
9
+ const structure = structureState.getStructureOrNull();
10
+ if (!structure) {
11
+ return null;
12
+ }
13
+ if (structure.type === 'iso-base-media') {
14
+ return (0, seeking_hints_1.getSeekingHintsFromMp4)({
15
+ structureState,
16
+ isoState,
17
+ mp4HeaderSegment,
18
+ mediaSectionState,
19
+ });
20
+ }
21
+ if (structure.type === 'wav') {
22
+ return (0, seeking_hints_3.getSeekingHintsFromWav)({
23
+ structure,
24
+ mediaSectionState,
25
+ });
26
+ }
27
+ if (structure.type === 'matroska') {
28
+ return (0, seeking_hints_4.getSeekingHintsFromMatroska)(tracksState, keyframesState, webmState);
29
+ }
30
+ if (structure.type === 'transport-stream') {
31
+ return (0, seeking_hints_2.getSeekingHintsFromTransportStream)(transportStream, tracksState);
32
+ }
33
+ throw new Error(`Seeking is not supported for this format: ${structure.type}`);
34
+ };
35
+ exports.getSeekingHints = getSeekingHints;
@@ -56,19 +56,19 @@ export type OtherTrack = {
56
56
  };
57
57
  export type Track = VideoTrack | AudioTrack | OtherTrack;
58
58
  export declare const getNumberOfTracks: (moovBox: MoovBox) => number;
59
- export declare const isoBaseMediaHasTracks: (state: ParserState) => boolean;
60
- export declare const getHasTracks: (state: ParserState) => boolean;
59
+ export declare const isoBaseMediaHasTracks: (state: ParserState, mayUsePrecomputed: boolean) => boolean;
60
+ export declare const getHasTracks: (state: ParserState, mayUsePrecomputed: boolean) => boolean;
61
61
  export declare const getTracksFromMoovBox: (moovBox: MoovBox) => {
62
62
  videoTracks: VideoTrack[];
63
63
  audioTracks: AudioTrack[];
64
64
  otherTracks: OtherTrack[];
65
65
  };
66
- export declare const getTracksFromIsoBaseMedia: (state: ParserState) => {
66
+ export declare const getTracksFromIsoBaseMedia: (state: ParserState, mayUsePrecomputed: boolean) => {
67
67
  videoTracks: VideoTrack[];
68
68
  audioTracks: AudioTrack[];
69
69
  otherTracks: OtherTrack[];
70
70
  };
71
71
  export declare const defaultGetTracks: (parserState: ParserState) => AllTracks;
72
72
  export declare const defaultHasallTracks: (parserState: ParserState) => boolean;
73
- export declare const getTracks: (state: ParserState) => AllTracks;
73
+ export declare const getTracks: (state: ParserState, mayUsePrecomputed: boolean) => AllTracks;
74
74
  export {};
@@ -14,15 +14,16 @@ const getNumberOfTracks = (moovBox) => {
14
14
  return mvHdBox.nextTrackId - 1;
15
15
  };
16
16
  exports.getNumberOfTracks = getNumberOfTracks;
17
- const isoBaseMediaHasTracks = (state) => {
17
+ const isoBaseMediaHasTracks = (state, mayUsePrecomputed) => {
18
18
  return Boolean((0, traversal_1.getMoovBoxFromState)({
19
19
  structureState: state.structure,
20
20
  isoState: state.iso,
21
21
  mp4HeaderSegment: state.mp4HeaderSegment,
22
+ mayUsePrecomputed,
22
23
  }));
23
24
  };
24
25
  exports.isoBaseMediaHasTracks = isoBaseMediaHasTracks;
25
- const getHasTracks = (state) => {
26
+ const getHasTracks = (state, mayUsePrecomputed) => {
26
27
  const structure = state.structure.getStructure();
27
28
  if (structure.type === 'matroska') {
28
29
  return (0, get_ready_tracks_1.matroskaHasTracks)({
@@ -31,7 +32,7 @@ const getHasTracks = (state) => {
31
32
  });
32
33
  }
33
34
  if (structure.type === 'iso-base-media') {
34
- return (0, exports.isoBaseMediaHasTracks)(state);
35
+ return (0, exports.isoBaseMediaHasTracks)(state, mayUsePrecomputed);
35
36
  }
36
37
  if (structure.type === 'riff') {
37
38
  return (0, get_tracks_from_avi_1.hasAllTracksFromAvi)(state);
@@ -109,11 +110,12 @@ const getTracksFromMoovBox = (moovBox) => {
109
110
  };
110
111
  };
111
112
  exports.getTracksFromMoovBox = getTracksFromMoovBox;
112
- const getTracksFromIsoBaseMedia = (state) => {
113
+ const getTracksFromIsoBaseMedia = (state, mayUsePrecomputed) => {
113
114
  const moovBox = (0, traversal_1.getMoovBoxFromState)({
114
115
  structureState: state.structure,
115
116
  isoState: state.iso,
116
117
  mp4HeaderSegment: state.mp4HeaderSegment,
118
+ mayUsePrecomputed,
117
119
  });
118
120
  if (!moovBox) {
119
121
  return {
@@ -147,13 +149,13 @@ const defaultHasallTracks = (parserState) => {
147
149
  }
148
150
  };
149
151
  exports.defaultHasallTracks = defaultHasallTracks;
150
- const getTracks = (state) => {
152
+ const getTracks = (state, mayUsePrecomputed) => {
151
153
  const structure = state.structure.getStructure();
152
154
  if (structure.type === 'matroska') {
153
155
  return getCategorizedTracksFromMatroska(state);
154
156
  }
155
157
  if (structure.type === 'iso-base-media') {
156
- return (0, exports.getTracksFromIsoBaseMedia)(state);
158
+ return (0, exports.getTracksFromIsoBaseMedia)(state, mayUsePrecomputed);
157
159
  }
158
160
  if (structure.type === 'riff') {
159
161
  return (0, get_tracks_from_avi_1.getTracksFromAvi)(structure, state);
@@ -7,12 +7,12 @@ const get_sample_aspect_ratio_1 = require("./get-sample-aspect-ratio");
7
7
  const get_tracks_1 = require("./get-tracks");
8
8
  const getVideoCodec = (state) => {
9
9
  var _a, _b;
10
- const track = (0, get_tracks_1.getTracks)(state);
10
+ const track = (0, get_tracks_1.getTracks)(state, true);
11
11
  return (_b = (_a = track.videoTracks[0]) === null || _a === void 0 ? void 0 : _a.codecWithoutConfig) !== null && _b !== void 0 ? _b : null;
12
12
  };
13
13
  exports.getVideoCodec = getVideoCodec;
14
14
  const hasVideoCodec = (state) => {
15
- return (0, get_tracks_1.getHasTracks)(state);
15
+ return (0, get_tracks_1.getHasTracks)(state, true);
16
16
  };
17
17
  exports.hasVideoCodec = hasVideoCodec;
18
18
  const getVideoPrivateData = (trakBox) => {
@@ -51,7 +51,7 @@ const getAvailableInfo = ({ state, }) => {
51
51
  return Boolean(structure && (0, get_audio_codec_1.hasAudioCodec)(state));
52
52
  }
53
53
  if (key === 'tracks') {
54
- return Boolean(structure && (0, get_tracks_1.getHasTracks)(state));
54
+ return Boolean(structure && (0, get_tracks_1.getHasTracks)(state, true));
55
55
  }
56
56
  if (key === 'keyframes') {
57
57
  return Boolean(structure && (0, get_keyframes_1.hasKeyframes)(state));
package/dist/index.d.ts CHANGED
@@ -778,11 +778,15 @@ export declare const MediaParserInternals: {
778
778
  addPesHeader: (pesHeader: import("./containers/transport-stream/parse-pes").PacketPes) => void;
779
779
  markPtsAsKeyframe: (pts: number) => void;
780
780
  getPesKeyframeHeaders: () => import("./containers/transport-stream/parse-pes").PacketPes[];
781
+ setPesKeyframesFromSeekingHints: (hints: import("./seeking-hints").TransportStreamSeekingHints) => void;
781
782
  };
782
783
  streamBuffers: Map<number, import("./containers/transport-stream/process-stream-buffers").TransportStreamPacketBuffer>;
783
784
  startOffset: {
784
785
  getOffset: (trackId: number) => number;
785
- setOffset: (trackId: number, newOffset: number) => void;
786
+ setOffset: ({ newOffset, trackId }: {
787
+ trackId: number;
788
+ newOffset: number;
789
+ }) => void;
786
790
  };
787
791
  resetBeforeSeek: () => void;
788
792
  lastEmittedSample: {
@@ -798,11 +802,18 @@ export declare const MediaParserInternals: {
798
802
  cues: import("./containers/webm/seek/format-cues").MatroskaCue[];
799
803
  segmentOffset: number;
800
804
  } | null>;
805
+ getIfAlreadyLoaded: () => {
806
+ cues: import("./containers/webm/seek/format-cues").MatroskaCue[];
807
+ segmentOffset: number;
808
+ } | null;
809
+ setFromSeekingHints: (hints: import("./seeking-hints").WebmSeekingHints) => void;
801
810
  };
802
811
  onTrackEntrySegment: import("./containers/webm/segments").OnTrackEntrySegment;
803
812
  getTrackInfoByNumber: (id: number) => import("./containers/webm/segments/track-entry").TrackInfo;
804
813
  setTimestampOffset: (byteOffset: number, timestamp: number) => void;
805
814
  getTimestampOffsetForByteOffset: (byteOffset: number) => number | undefined;
815
+ getTimeStampMapForSeekingHints: () => Map<number, number>;
816
+ setTimeStampMapForSeekingHints: (newTimestampMap: Map<number, number>) => void;
806
817
  getTimescale: () => number;
807
818
  setTimescale: (newTimescale: number) => void;
808
819
  addSegment: (seg: Omit<import("./state/matroska/webm").SegmentSection, "index">) => void;
@@ -819,11 +830,27 @@ export declare const MediaParserInternals: {
819
830
  setSamples: (mdatStart: number, samples: import("./state/iso-base-media/cached-sample-positions").FlatSample[]) => void;
820
831
  };
821
832
  moov: {
822
- setMoovBox: (moov: import("./containers/iso-base-media/moov/moov").MoovBox) => void;
823
- getMoovBox: () => import("./containers/iso-base-media/moov/moov").MoovBox | null;
833
+ setMoovBox: (moov: {
834
+ moovBox: import("./containers/iso-base-media/moov/moov").MoovBox;
835
+ precomputed: boolean;
836
+ }) => void;
837
+ getMoovBoxAndPrecomputed: () => {
838
+ moovBox: import("./containers/iso-base-media/moov/moov").MoovBox;
839
+ precomputed: boolean;
840
+ } | null;
824
841
  };
825
842
  mfra: {
826
843
  triggerLoad: () => Promise<import("./containers/iso-base-media/base-media-box").IsoBaseMediaBox[] | null>;
844
+ getIfAlreadyLoaded: () => import("./containers/iso-base-media/base-media-box").IsoBaseMediaBox[] | null;
845
+ setFromSeekingHints: (hints: import("./seeking-hints").IsoBaseMediaSeekingHints) => void;
846
+ };
847
+ moof: {
848
+ getMoofBoxes: () => import("./state/iso-base-media/precomputed-moof").MoofBox[];
849
+ setMoofBoxes: (boxes: import("./state/iso-base-media/precomputed-moof").MoofBox[]) => void;
850
+ };
851
+ tfra: {
852
+ getTfraBoxes: () => import("./containers/iso-base-media/mfra/tfra").TfraBox[];
853
+ setTfraBoxes: (boxes: import("./containers/iso-base-media/mfra/tfra").TfraBox[]) => void;
827
854
  };
828
855
  };
829
856
  mp3Info: {
@@ -923,6 +950,7 @@ export declare const MediaParserInternals: {
923
950
  keyframes: {
924
951
  addKeyframe: (keyframe: import("./options").MediaParserKeyframe) => void;
925
952
  getKeyframes: () => import("./options").MediaParserKeyframe[];
953
+ setFromSeekingHints: (hints: import("./seeking-hints").WebmSeekingHints) => void;
926
954
  };
927
955
  structure: {
928
956
  getStructureOrNull: () => import("./parse-result").MediaParserStructureUnstable | null;