@remotion/media-parser 4.0.286 → 4.0.287

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 (225) hide show
  1. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  2. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +2 -2
  3. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +6 -3
  4. package/dist/containers/iso-base-media/get-keyframes.js +1 -1
  5. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -2
  6. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +15 -0
  7. package/dist/containers/iso-base-media/{get-seeking-from-mp4.js → get-seeking-byte.js} +16 -2
  8. package/dist/containers/iso-base-media/mdat/mdat.js +6 -3
  9. package/dist/containers/iso-base-media/process-box.js +5 -3
  10. package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts} +8 -3
  11. package/dist/containers/iso-base-media/seeking-hints.js +52 -0
  12. package/dist/containers/iso-base-media/traversal.d.ts +4 -2
  13. package/dist/containers/iso-base-media/traversal.js +6 -5
  14. package/dist/containers/m3u/iterate-over-segment-files.js +23 -20
  15. package/dist/containers/riff/parse-video-section.js +1 -1
  16. package/dist/containers/transport-stream/handle-aac-packet.js +4 -1
  17. package/dist/containers/transport-stream/handle-avc-packet.js +4 -1
  18. package/dist/containers/transport-stream/seeking-hints.d.ts +9 -0
  19. package/dist/containers/transport-stream/seeking-hints.js +26 -0
  20. package/dist/containers/wav/get-seeking-byte.d.ts +2 -2
  21. package/dist/containers/wav/get-seeking-byte.js +2 -2
  22. package/dist/containers/wav/seeking-hints.d.ts +12 -0
  23. package/dist/containers/wav/seeking-hints.js +25 -0
  24. package/dist/containers/webm/seek/get-seeking-byte.d.ts +3 -5
  25. package/dist/containers/webm/seek/get-seeking-byte.js +5 -5
  26. package/dist/containers/webm/seek/seeking-hints.d.ts +10 -0
  27. package/dist/containers/webm/seek/seeking-hints.js +28 -0
  28. package/dist/controller/media-parser-controller.d.ts +3 -0
  29. package/dist/controller/media-parser-controller.js +15 -0
  30. package/dist/download-and-parse-media.js +2 -1
  31. package/dist/emit-available-info.js +1 -1
  32. package/dist/esm/index.mjs +430 -197
  33. package/dist/esm/node-writer.mjs +1 -2
  34. package/dist/esm/node.mjs +1 -2
  35. package/dist/esm/server-worker.mjs +46 -1
  36. package/dist/esm/universal.mjs +2 -4
  37. package/dist/esm/web.mjs +1 -2
  38. package/dist/esm/worker-server-entry.mjs +466 -204
  39. package/dist/esm/worker-web-entry.mjs +465 -202
  40. package/dist/esm/worker.mjs +46 -1
  41. package/dist/{forward-controller.d.ts → forward-controller-pause-resume-abort.d.ts} +1 -1
  42. package/dist/{forward-controller.js → forward-controller-pause-resume-abort.js} +3 -3
  43. package/dist/get-audio-codec.js +2 -2
  44. package/dist/get-dimensions.js +1 -1
  45. package/dist/get-duration.js +3 -2
  46. package/dist/get-fps.js +1 -0
  47. package/dist/get-is-hdr.js +2 -2
  48. package/dist/get-keyframes.js +1 -1
  49. package/dist/get-seeking-byte.d.ts +7 -5
  50. package/dist/get-seeking-byte.js +13 -12
  51. package/dist/{get-seeking-info.d.ts → get-seeking-hints.d.ts} +7 -3
  52. package/dist/get-seeking-hints.js +35 -0
  53. package/dist/get-tracks.d.ts +4 -4
  54. package/dist/get-tracks.js +8 -6
  55. package/dist/get-video-codec.js +2 -2
  56. package/dist/has-all-info.js +1 -1
  57. package/dist/index.d.ts +31 -3
  58. package/dist/internal-parse-media.js +16 -1
  59. package/dist/iterator/buffer-iterator.js +3 -4
  60. package/dist/metadata/metadata-from-iso.js +1 -0
  61. package/dist/options.d.ts +2 -0
  62. package/dist/parse-media-on-worker-entry.js +51 -1
  63. package/dist/parse-media.js +2 -1
  64. package/dist/samples-from-moof.d.ts +2 -2
  65. package/dist/samples-from-moof.js +5 -8
  66. package/dist/seeking-hints.d.ts +39 -0
  67. package/dist/set-seeking-hints.d.ts +6 -0
  68. package/dist/set-seeking-hints.js +27 -0
  69. package/dist/state/has-tracks-section.js +3 -1
  70. package/dist/state/iso-base-media/cached-sample-positions.js +1 -1
  71. package/dist/state/iso-base-media/iso-state.d.ts +18 -2
  72. package/dist/state/iso-base-media/iso-state.js +4 -0
  73. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -0
  74. package/dist/state/iso-base-media/lazy-mfra-load.js +13 -0
  75. package/dist/state/iso-base-media/moov-box.d.ts +7 -2
  76. package/dist/state/iso-base-media/moov-box.js +1 -1
  77. package/dist/state/iso-base-media/precomputed-moof.d.ts +11 -0
  78. package/dist/state/iso-base-media/precomputed-moof.js +28 -0
  79. package/dist/state/iso-base-media/precomputed-tfra.d.ts +6 -0
  80. package/dist/state/iso-base-media/precomputed-tfra.js +17 -0
  81. package/dist/state/keyframes.d.ts +2 -0
  82. package/dist/state/keyframes.js +17 -9
  83. package/dist/state/matroska/lazy-cues-fetch.d.ts +7 -1
  84. package/dist/state/matroska/lazy-cues-fetch.js +21 -0
  85. package/dist/state/matroska/webm.d.ts +7 -0
  86. package/dist/state/matroska/webm.js +9 -1
  87. package/dist/state/parser-state.d.ts +31 -3
  88. package/dist/state/samples-observed/slow-duration-fps.js +0 -3
  89. package/dist/state/transport-stream/observed-pes-header.d.ts +2 -0
  90. package/dist/state/transport-stream/observed-pes-header.js +22 -12
  91. package/dist/state/transport-stream/pts-start-offset.d.ts +4 -1
  92. package/dist/state/transport-stream/pts-start-offset.js +1 -1
  93. package/dist/state/transport-stream/transport-stream.d.ts +5 -1
  94. package/dist/version.d.ts +1 -1
  95. package/dist/version.js +1 -1
  96. package/dist/with-resolvers.d.ts +5 -0
  97. package/dist/work-on-seek-request.js +8 -5
  98. package/dist/worker/{forward-controller.js → forward-controller-to-worker.js} +17 -0
  99. package/dist/worker/serialize-error.d.ts +6 -1
  100. package/dist/worker/serialize-error.js +2 -1
  101. package/dist/worker/worker-types.d.ts +12 -2
  102. package/dist/worker-server.js +16 -5
  103. package/package.json +3 -3
  104. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +0 -9
  105. package/dist/containers/iso-base-media/get-mfra-atom.js +0 -12
  106. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -11
  107. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +0 -25
  108. package/dist/containers/iso-base-media/mfra/mfra.d.ts +0 -2
  109. package/dist/containers/iso-base-media/mfra/mfra.js +0 -11
  110. package/dist/containers/transport-stream/get-seeking-info.d.ts +0 -4
  111. package/dist/containers/transport-stream/get-seeking-info.js +0 -17
  112. package/dist/containers/transport-stream/next-pes-header-store.d.ts +0 -6
  113. package/dist/containers/transport-stream/next-pes-header-store.js +0 -18
  114. package/dist/containers/transport-stream/start-offset.d.ts +0 -4
  115. package/dist/containers/transport-stream/start-offset.js +0 -13
  116. package/dist/containers/wav/get-seeking-info.d.ts +0 -7
  117. package/dist/containers/wav/get-seeking-info.js +0 -20
  118. package/dist/containers/wav/parse-video-section.d.ts +0 -5
  119. package/dist/containers/wav/parse-video-section.js +0 -41
  120. package/dist/containers/webm/cues/fetch-web-cues.d.ts +0 -12
  121. package/dist/containers/webm/cues/fetch-web-cues.js +0 -32
  122. package/dist/containers/webm/cues/format-cues.d.ts +0 -8
  123. package/dist/containers/webm/cues/format-cues.js +0 -41
  124. package/dist/containers/webm/cues/get-seeking-byte.d.ts +0 -14
  125. package/dist/containers/webm/cues/get-seeking-byte.js +0 -91
  126. package/dist/containers/webm/fetch-web-cues.d.ts +0 -12
  127. package/dist/containers/webm/fetch-web-cues.js +0 -29
  128. package/dist/containers/webm/get-seeking-byte.d.ts +0 -14
  129. package/dist/containers/webm/get-seeking-byte.js +0 -91
  130. package/dist/containers/webm/get-seeking-info.d.ts +0 -3
  131. package/dist/containers/webm/get-seeking-info.js +0 -17
  132. package/dist/containers/webm/seek/get-seeking-info.d.ts +0 -3
  133. package/dist/containers/webm/seek/get-seeking-info.js +0 -17
  134. package/dist/emitter.d.ts +0 -33
  135. package/dist/emitter.js +0 -65
  136. package/dist/get-sample-positions-from-lpcm.d.ts +0 -3
  137. package/dist/get-sample-positions-from-lpcm.js +0 -46
  138. package/dist/get-seeking-info.js +0 -35
  139. package/dist/media-parser-controller.d.ts +0 -21
  140. package/dist/media-parser-controller.js +0 -38
  141. package/dist/pause-signal.d.ts +0 -11
  142. package/dist/pause-signal.js +0 -38
  143. package/dist/readers/state/aac-state.d.ts +0 -13
  144. package/dist/readers/state/aac-state.js +0 -17
  145. package/dist/readers/state/can-skip-tracks.d.ts +0 -16
  146. package/dist/readers/state/can-skip-tracks.js +0 -60
  147. package/dist/readers/state/current-reader.d.ts +0 -6
  148. package/dist/readers/state/current-reader.js +0 -13
  149. package/dist/readers/state/emitted-fields.d.ts +0 -1
  150. package/dist/readers/state/emitted-fields.js +0 -37
  151. package/dist/readers/state/flac-state.d.ts +0 -4
  152. package/dist/readers/state/flac-state.js +0 -13
  153. package/dist/readers/state/has-tracks-section.d.ts +0 -14
  154. package/dist/readers/state/has-tracks-section.js +0 -37
  155. package/dist/readers/state/images.d.ts +0 -9
  156. package/dist/readers/state/images.js +0 -14
  157. package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +0 -12
  158. package/dist/readers/state/iso-base-media/cached-sample-positions.js +0 -46
  159. package/dist/readers/state/iso-base-media/iso-state.d.ts +0 -24
  160. package/dist/readers/state/iso-base-media/iso-state.js +0 -20
  161. package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +0 -13
  162. package/dist/readers/state/iso-base-media/lazy-mfra-load.js +0 -29
  163. package/dist/readers/state/iso-base-media/moov-box.d.ts +0 -5
  164. package/dist/readers/state/iso-base-media/moov-box.js +0 -13
  165. package/dist/readers/state/keyframes.d.ts +0 -6
  166. package/dist/readers/state/keyframes.js +0 -15
  167. package/dist/readers/state/m3u-state.d.ts +0 -44
  168. package/dist/readers/state/m3u-state.js +0 -124
  169. package/dist/readers/state/may-skip-video-data.d.ts +0 -4
  170. package/dist/readers/state/may-skip-video-data.js +0 -18
  171. package/dist/readers/state/mp3.d.ts +0 -15
  172. package/dist/readers/state/mp3.js +0 -19
  173. package/dist/readers/state/need-samples-for-fields.d.ts +0 -6
  174. package/dist/readers/state/need-samples-for-fields.js +0 -39
  175. package/dist/readers/state/parser-state.d.ts +0 -252
  176. package/dist/readers/state/parser-state.js +0 -124
  177. package/dist/readers/state/riff.d.ts +0 -10
  178. package/dist/readers/state/riff.js +0 -32
  179. package/dist/readers/state/sample-callbacks.d.ts +0 -44
  180. package/dist/readers/state/sample-callbacks.js +0 -118
  181. package/dist/readers/state/seek-infinite-loop.d.ts +0 -5
  182. package/dist/readers/state/seek-infinite-loop.js +0 -22
  183. package/dist/readers/state/slow-duration-fps.d.ts +0 -11
  184. package/dist/readers/state/slow-duration-fps.js +0 -86
  185. package/dist/readers/state/structure.d.ts +0 -15
  186. package/dist/readers/state/structure.js +0 -78
  187. package/dist/readers/state/timings.d.ts +0 -8
  188. package/dist/readers/state/timings.js +0 -13
  189. package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +0 -6
  190. package/dist/readers/state/transport-stream/last-emitted-sample.js +0 -16
  191. package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +0 -6
  192. package/dist/readers/state/transport-stream/next-pes-header-store.js +0 -18
  193. package/dist/readers/state/transport-stream/start-offset.d.ts +0 -4
  194. package/dist/readers/state/transport-stream/start-offset.js +0 -13
  195. package/dist/readers/state/transport-stream/transport-stream.d.ts +0 -19
  196. package/dist/readers/state/transport-stream/transport-stream.js +0 -25
  197. package/dist/readers/state/video-section.d.ts +0 -33
  198. package/dist/readers/state/video-section.js +0 -65
  199. package/dist/readers/state/webm.d.ts +0 -28
  200. package/dist/readers/state/webm.js +0 -109
  201. package/dist/seek-signal.d.ts +0 -19
  202. package/dist/seek-signal.js +0 -24
  203. package/dist/seeking-info.d.ts +0 -31
  204. package/dist/server-worker.module.d.ts +0 -2
  205. package/dist/server-worker.module.js +0 -12
  206. package/dist/state/matroska/lazy-seek-fetch.d.ts +0 -1
  207. package/dist/state/matroska/lazy-seek-fetch.js +0 -5
  208. package/dist/state/matroska.d.ts +0 -0
  209. package/dist/state/matroska.js +0 -1
  210. package/dist/state/slow-duration-fps.d.ts +0 -11
  211. package/dist/state/slow-duration-fps.js +0 -86
  212. package/dist/state/transport-stream/start-offset.d.ts +0 -5
  213. package/dist/state/transport-stream/start-offset.js +0 -13
  214. package/dist/state/transport-stream.d.ts +0 -8
  215. package/dist/state/transport-stream.js +0 -11
  216. package/dist/state/uml.d.ts +0 -32
  217. package/dist/state/uml.js +0 -52
  218. package/dist/state/webm.d.ts +0 -30
  219. package/dist/state/webm.js +0 -109
  220. package/dist/state/work-on-seek-request-options.d.ts +0 -3
  221. package/dist/state/work-on-seek-request-options.js +0 -26
  222. package/dist/worker.module.d.ts +0 -4
  223. package/dist/worker.module.js +0 -12
  224. /package/dist/{seeking-info.js → seeking-hints.js} +0 -0
  225. /package/dist/worker/{forward-controller.d.ts → forward-controller-to-worker.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
1
  import type { BufferIterator } from '../../iterator/buffer-iterator';
2
- export declare const getChannelCount: (iterator: BufferIterator) => 1 | 2 | 8 | 5 | 4 | 6 | 3 | 7;
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 2 | 8 | 1 | 7 | 3 | 4 | 5 | 6;
@@ -1,8 +1,8 @@
1
- import type { IsoBaseMediaBox } from './base-media-box';
1
+ import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
2
2
  import type { TfraBox } from './mfra/tfra';
3
3
  import type { TkhdBox } from './tkhd';
4
4
  export declare const collectSamplePositionsFromMoofBoxes: ({ moofBoxes, tfraBoxes, tkhdBox, }: {
5
- moofBoxes: IsoBaseMediaBox[];
5
+ moofBoxes: MoofBox[];
6
6
  tfraBoxes: TfraBox[];
7
7
  tkhdBox: TkhdBox;
8
8
  }) => {
@@ -5,9 +5,12 @@ const samples_from_moof_1 = require("../../samples-from-moof");
5
5
  const collectSamplePositionsFromMoofBoxes = ({ moofBoxes, tfraBoxes, tkhdBox, }) => {
6
6
  const isComplete = tfraBoxes.length > 0 &&
7
7
  tfraBoxes.every((t) => t.entries.length === moofBoxes.length);
8
- const samplePositions_ = moofBoxes.map((m) => {
9
- return (0, samples_from_moof_1.getSamplesFromMoof)({ moofBox: m, trackId: tkhdBox.trackId });
8
+ const samplePositions = moofBoxes.map((m) => {
9
+ return (0, samples_from_moof_1.getSamplesFromMoof)({
10
+ moofBox: m,
11
+ trackId: tkhdBox.trackId,
12
+ });
10
13
  });
11
- return { samplePositions: samplePositions_, isComplete };
14
+ return { samplePositions, isComplete };
12
15
  };
13
16
  exports.collectSamplePositionsFromMoofBoxes = collectSamplePositionsFromMoofBoxes;
@@ -5,7 +5,7 @@ const get_tracks_1 = require("../../get-tracks");
5
5
  const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
6
6
  const traversal_1 = require("./traversal");
7
7
  const getKeyframesFromIsoBaseMedia = (state) => {
8
- const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state);
8
+ const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state, true);
9
9
  const structure = state.structure.getIsoStructure();
10
10
  const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
11
11
  const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure);
@@ -1,10 +1,10 @@
1
1
  import type { SamplePosition } from '../../get-sample-positions';
2
- import type { IsoBaseMediaBox } from './base-media-box';
2
+ import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
3
3
  import type { TfraBox } from './mfra/tfra';
4
4
  import type { TrakBox } from './trak/trak';
5
5
  export declare const getSamplePositionsFromTrack: ({ trakBox, moofBoxes, tfraBoxes, }: {
6
6
  trakBox: TrakBox;
7
- moofBoxes: IsoBaseMediaBox[];
7
+ moofBoxes: MoofBox[];
8
8
  tfraBoxes: TfraBox[];
9
9
  }) => {
10
10
  samplePositions: SamplePosition[];
@@ -0,0 +1,15 @@
1
+ import type { LogLevel } from '../../log';
2
+ import type { IsoBaseMediaStructure } from '../../parse-result';
3
+ import type { IsoBaseMediaSeekingHints } from '../../seeking-hints';
4
+ import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
5
+ import type { StructureState } from '../../state/structure';
6
+ import type { SeekResolution } from '../../work-on-seek-request';
7
+ export declare const getSeekingByteFromIsoBaseMedia: ({ info, time, logLevel, currentPosition, isoState, mp4HeaderSegment, structure, }: {
8
+ info: IsoBaseMediaSeekingHints;
9
+ time: number;
10
+ logLevel: LogLevel;
11
+ currentPosition: number;
12
+ isoState: IsoBaseMediaState;
13
+ mp4HeaderSegment: IsoBaseMediaStructure | null;
14
+ structure: StructureState;
15
+ }) => Promise<SeekResolution>;
@@ -10,13 +10,25 @@ const get_sample_position_bounds_1 = require("./get-sample-position-bounds");
10
10
  const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
11
11
  const find_best_segment_from_tfra_1 = require("./mfra/find-best-segment-from-tfra");
12
12
  const traversal_1 = require("./traversal");
13
- const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPosition, isoState, }) => {
13
+ const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPosition, isoState, mp4HeaderSegment, structure, }) => {
14
14
  const tracks = (0, get_tracks_1.getTracksFromMoovBox)(info.moovBox);
15
15
  const allTracks = [
16
16
  ...tracks.videoTracks,
17
17
  ...tracks.audioTracks,
18
18
  ...tracks.otherTracks,
19
19
  ];
20
+ const hasMoov = Boolean((0, traversal_1.getMoovBoxFromState)({
21
+ mp4HeaderSegment,
22
+ structureState: structure,
23
+ isoState,
24
+ mayUsePrecomputed: false,
25
+ }));
26
+ if (!hasMoov) {
27
+ log_1.Log.trace(logLevel, 'No moov box found, must wait');
28
+ return {
29
+ type: 'valid-but-must-wait',
30
+ };
31
+ }
20
32
  const firstVideoTrack = allTracks.find((t) => t.type === 'video');
21
33
  if (!firstVideoTrack) {
22
34
  throw new Error('No video track found');
@@ -52,7 +64,9 @@ const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPos
52
64
  }
53
65
  }
54
66
  }
55
- const atom = await isoState.mfra.triggerLoad();
67
+ const atom = await (info.mfraAlreadyLoaded
68
+ ? Promise.resolve(info.mfraAlreadyLoaded)
69
+ : isoState.mfra.triggerLoad());
56
70
  if (atom) {
57
71
  const moofOffset = (0, find_best_segment_from_tfra_1.findBestSegmentFromTfra)({
58
72
  mfra: atom,
@@ -22,13 +22,16 @@ const parseMdatSection = async (state) => {
22
22
  if ((0, may_skip_video_data_1.maySkipVideoData)({ state })) {
23
23
  return (0, skip_1.makeSkip)(endOfMdat);
24
24
  }
25
- const alreadyHas = (0, get_tracks_1.getHasTracks)(state);
26
- if (!alreadyHas) {
25
+ const alreadyHasMoov = (0, get_tracks_1.getHasTracks)(state, true);
26
+ if (!alreadyHasMoov) {
27
27
  const moov = await (0, get_moov_atom_1.getMoovAtom)({
28
28
  endOfMdat,
29
29
  state,
30
30
  });
31
- state.iso.moov.setMoovBox(moov);
31
+ state.iso.moov.setMoovBox({
32
+ moovBox: moov,
33
+ precomputed: false,
34
+ });
32
35
  state.callbacks.tracks.setIsDone(state.logLevel);
33
36
  state.structure.getIsoStructure().boxes.push(moov);
34
37
  return (0, exports.parseMdatSection)(state);
@@ -33,7 +33,7 @@ const tkhd_1 = require("./tkhd");
33
33
  const trak_1 = require("./trak/trak");
34
34
  const trun_1 = require("./trun");
35
35
  const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMdatAtomExpected, }) => {
36
- var _a;
36
+ var _a, _b;
37
37
  const fileOffset = iterator.counter.getOffset();
38
38
  const { returnToCheckpoint } = iterator.startCheckpoint();
39
39
  const bytesRemaining = iterator.bytesRemaining();
@@ -179,7 +179,9 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
179
179
  iterator.discard(boxSize - 8);
180
180
  return null;
181
181
  }
182
- if (isoState && isoState.moov.getMoovBox()) {
182
+ if (isoState &&
183
+ isoState.moov.getMoovBoxAndPrecomputed() &&
184
+ !((_a = isoState.moov.getMoovBoxAndPrecomputed()) === null || _a === void 0 ? void 0 : _a.precomputed)) {
183
185
  log_1.Log.verbose(logLevel, 'Moov box already parsed, skipping');
184
186
  iterator.discard(boxSize - 8);
185
187
  return null;
@@ -276,7 +278,7 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
276
278
  });
277
279
  }
278
280
  if (boxType === 'moof') {
279
- (_a = onlyIfMoovAtomExpected === null || onlyIfMoovAtomExpected === void 0 ? void 0 : onlyIfMoovAtomExpected.isoState) === null || _a === void 0 ? void 0 : _a.mfra.triggerLoad();
281
+ (_b = onlyIfMoovAtomExpected === null || onlyIfMoovAtomExpected === void 0 ? void 0 : onlyIfMoovAtomExpected.isoState) === null || _b === void 0 ? void 0 : _b.mfra.triggerLoad();
280
282
  }
281
283
  if (boxType === 'mdia' ||
282
284
  boxType === 'minf' ||
@@ -1,11 +1,16 @@
1
1
  import type { IsoBaseMediaStructure } from '../../parse-result';
2
- import type { IsoBaseMediaSeekingInfo } from '../../seeking-info';
2
+ import type { IsoBaseMediaSeekingHints } from '../../seeking-hints';
3
3
  import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
4
+ import type { ParserState } from '../../state/parser-state';
4
5
  import type { StructureState } from '../../state/structure';
5
6
  import type { MediaSectionState } from '../../state/video-section';
6
- export declare const getSeekingInfoFromMp4: ({ structureState, isoState, mp4HeaderSegment, mediaSectionState, }: {
7
+ export declare const getSeekingHintsFromMp4: ({ structureState, isoState, mp4HeaderSegment, mediaSectionState, }: {
7
8
  structureState: StructureState;
8
9
  isoState: IsoBaseMediaState;
9
10
  mp4HeaderSegment: IsoBaseMediaStructure | null;
10
11
  mediaSectionState: MediaSectionState;
11
- }) => IsoBaseMediaSeekingInfo | null;
12
+ }) => IsoBaseMediaSeekingHints | null;
13
+ export declare const setSeekingHintsForMp4: ({ hints, state, }: {
14
+ hints: IsoBaseMediaSeekingHints;
15
+ state: ParserState;
16
+ }) => void;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForMp4 = exports.getSeekingHintsFromMp4 = void 0;
4
+ const precomputed_moof_1 = require("../../state/iso-base-media/precomputed-moof");
5
+ const precomputed_tfra_1 = require("../../state/iso-base-media/precomputed-tfra");
6
+ const traversal_1 = require("./traversal");
7
+ const getSeekingHintsFromMp4 = ({ structureState, isoState, mp4HeaderSegment, mediaSectionState, }) => {
8
+ const structure = structureState.getIsoStructure();
9
+ const moovAtom = (0, traversal_1.getMoovBoxFromState)({
10
+ isoState,
11
+ mp4HeaderSegment,
12
+ structureState,
13
+ mayUsePrecomputed: true,
14
+ });
15
+ const moofBoxes = (0, precomputed_moof_1.deduplicateMoofBoxesByOffset)([
16
+ ...isoState.moof.getMoofBoxes(),
17
+ ...(0, traversal_1.getMoofBoxes)(structure.boxes),
18
+ ]);
19
+ const tfraBoxes = (0, precomputed_tfra_1.deduplicateTfraBoxesByOffset)([
20
+ ...isoState.tfra.getTfraBoxes(),
21
+ ...(0, traversal_1.getTfraBoxes)(structure),
22
+ ]);
23
+ if (!moovAtom) {
24
+ return null;
25
+ }
26
+ return {
27
+ type: 'iso-base-media-seeking-hints',
28
+ moovBox: moovAtom,
29
+ moofBoxes,
30
+ tfraBoxes,
31
+ mediaSections: mediaSectionState.getMediaSections(),
32
+ mfraAlreadyLoaded: isoState.mfra.getIfAlreadyLoaded(),
33
+ };
34
+ };
35
+ exports.getSeekingHintsFromMp4 = getSeekingHintsFromMp4;
36
+ const setSeekingHintsForMp4 = ({ hints, state, }) => {
37
+ state.iso.moov.setMoovBox({
38
+ moovBox: hints.moovBox,
39
+ precomputed: true,
40
+ });
41
+ // state.iso.mfra.setFromSeekingHints(hints);
42
+ // state.iso.moof.setMoofBoxes(hints.moofBoxes);
43
+ // TODO: Make use of these seeking hints and make tests pass
44
+ /*
45
+ // state.iso.tfra.setTfraBoxes(hints.tfraBoxes);
46
+
47
+ for (const mediaSection of hints.mediaSections) {
48
+ // state.mediaSection.addMediaSection(mediaSection);
49
+ }
50
+ */
51
+ };
52
+ exports.setSeekingHintsForMp4 = setSeekingHintsForMp4;
@@ -1,5 +1,6 @@
1
1
  import type { AnySegment, IsoBaseMediaStructure } from '../../parse-result';
2
2
  import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
3
+ import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
3
4
  import type { StructureState } from '../../state/structure';
4
5
  import type { IsoBaseMediaBox, RegularBox } from './base-media-box';
5
6
  import type { FtypBox } from './ftyp';
@@ -21,12 +22,13 @@ import type { TrakBox } from './trak/trak';
21
22
  import type { TrunBox } from './trun';
22
23
  export declare const getFtypBox: (segments: AnySegment[]) => FtypBox | null;
23
24
  export declare const getMoovFromFromIsoStructure: (structure: IsoBaseMediaStructure) => MoovBox | null;
24
- export declare const getMoovBoxFromState: ({ structureState, isoState, mp4HeaderSegment, }: {
25
+ export declare const getMoovBoxFromState: ({ structureState, isoState, mp4HeaderSegment, mayUsePrecomputed, }: {
25
26
  structureState: StructureState;
26
27
  isoState: IsoBaseMediaState;
27
28
  mp4HeaderSegment: IsoBaseMediaStructure | null;
29
+ mayUsePrecomputed: boolean;
28
30
  }) => MoovBox | null;
29
- export declare const getMoofBoxes: (main: AnySegment[]) => IsoBaseMediaBox[];
31
+ export declare const getMoofBoxes: (main: AnySegment[]) => MoofBox[];
30
32
  export declare const getMvhdBox: (moovBox: MoovBox) => MvhdBox | null;
31
33
  export declare const getTraks: (moovBox: MoovBox) => TrakBox[];
32
34
  export declare const getTkhdBox: (trakBox: TrakBox) => TkhdBox | null;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTfraBoxes = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBoxes = exports.getMoovBoxFromState = exports.getMoovFromFromIsoStructure = exports.getFtypBox = void 0;
4
+ const precomputed_moof_1 = require("../../state/iso-base-media/precomputed-moof");
4
5
  const getFtypBox = (segments) => {
5
6
  const ftypBox = segments.find((s) => s.type === 'ftyp-box');
6
7
  if (!ftypBox || ftypBox.type !== 'ftyp-box') {
@@ -17,10 +18,10 @@ const getMoovFromFromIsoStructure = (structure) => {
17
18
  return moovBox;
18
19
  };
19
20
  exports.getMoovFromFromIsoStructure = getMoovFromFromIsoStructure;
20
- const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, }) => {
21
- const got = isoState.moov.getMoovBox();
22
- if (got) {
23
- return got;
21
+ const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, mayUsePrecomputed, }) => {
22
+ const got = isoState.moov.getMoovBoxAndPrecomputed();
23
+ if (got && (mayUsePrecomputed || !got.precomputed)) {
24
+ return got.moovBox;
24
25
  }
25
26
  if (mp4HeaderSegment) {
26
27
  return (0, exports.getMoovFromFromIsoStructure)(mp4HeaderSegment);
@@ -31,7 +32,7 @@ const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, }) =>
31
32
  exports.getMoovBoxFromState = getMoovBoxFromState;
32
33
  const getMoofBoxes = (main) => {
33
34
  const moofBoxes = main.filter((s) => s.type === 'regular-box' && s.boxType === 'moof');
34
- return moofBoxes;
35
+ return moofBoxes.map((m) => (0, precomputed_moof_1.toMoofBox)(m));
35
36
  };
36
37
  exports.getMoofBoxes = getMoofBoxes;
37
38
  const getMvhdBox = (moovBox) => {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.iteratorOverSegmentFiles = void 0;
4
4
  const media_parser_controller_1 = require("../../controller/media-parser-controller");
5
- const forward_controller_1 = require("../../forward-controller");
5
+ const forward_controller_pause_resume_abort_1 = require("../../forward-controller-pause-resume-abort");
6
6
  const parse_media_1 = require("../../parse-media");
7
7
  const with_resolvers_1 = require("../../with-resolvers");
8
8
  const get_chunks_1 = require("./get-chunks");
@@ -13,26 +13,29 @@ const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uState, onA
13
13
  let resolver = onInitialProgress;
14
14
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
15
  let rejector = (_e) => { };
16
- const childController = (0, media_parser_controller_1.mediaParserController)();
17
- const forwarded = (0, forward_controller_1.forwardMediaParserController)({
18
- childController,
19
- parentController,
20
- });
21
- const makeContinuationFn = () => {
22
- return {
23
- continue() {
24
- const { promise, reject, resolve } = (0, with_resolvers_1.withResolvers)();
25
- resolver = resolve;
26
- rejector = reject;
27
- childController.resume();
28
- return promise;
29
- },
30
- abort() {
31
- childController.abort();
32
- },
33
- };
34
- };
35
16
  for (const chunk of chunks) {
17
+ resolver = onInitialProgress;
18
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
+ rejector = (_e) => { };
20
+ const childController = (0, media_parser_controller_1.mediaParserController)();
21
+ const forwarded = (0, forward_controller_pause_resume_abort_1.forwardMediaParserControllerPauseResume)({
22
+ childController,
23
+ parentController,
24
+ });
25
+ const makeContinuationFn = () => {
26
+ return {
27
+ continue() {
28
+ const { promise, reject, resolve } = (0, with_resolvers_1.withResolvers)();
29
+ resolver = resolve;
30
+ rejector = reject;
31
+ childController.resume();
32
+ return promise;
33
+ },
34
+ abort() {
35
+ childController.abort();
36
+ },
37
+ };
38
+ };
36
39
  const isLastChunk = chunk === chunks[chunks.length - 1];
37
40
  await childController._internals.checkForAbortAndPause();
38
41
  const src = readerInterface.createAdjacentFileSource(chunk.url, playlistUrl);
@@ -8,7 +8,7 @@ const parseMediaSection = async (state) => {
8
8
  await (0, parse_movi_1.parseMovi)({
9
9
  state,
10
10
  });
11
- const tracks = (0, get_tracks_1.getTracks)(state);
11
+ const tracks = (0, get_tracks_1.getTracks)(state, false);
12
12
  if (!tracks.videoTracks.some((t) => t.codec === get_tracks_from_avi_1.TO_BE_OVERRIDDEN_LATER) &&
13
13
  !state.callbacks.tracks.getIsDone()) {
14
14
  state.callbacks.tracks.setIsDone(state.logLevel);
@@ -21,7 +21,10 @@ const handleAacPacket = async ({ streamBuffer, programId, offset, sampleCallback
21
21
  const startOffset = makeSamplesStartAtZero
22
22
  ? Math.min(streamBuffer.pesHeader.pts, (_a = streamBuffer.pesHeader.dts) !== null && _a !== void 0 ? _a : Infinity)
23
23
  : 0;
24
- transportStream.startOffset.setOffset(programId, startOffset);
24
+ transportStream.startOffset.setOffset({
25
+ trackId: programId,
26
+ newOffset: startOffset,
27
+ });
25
28
  const track = {
26
29
  type: 'audio',
27
30
  codecPrivate,
@@ -24,7 +24,10 @@ const handleAvcPacket = async ({ streamBuffer, programId, offset, sampleCallback
24
24
  const startOffset = makeSamplesStartAtZero
25
25
  ? Math.min(streamBuffer.pesHeader.pts, (_a = streamBuffer.pesHeader.dts) !== null && _a !== void 0 ? _a : Infinity)
26
26
  : 0;
27
- transportStream.startOffset.setOffset(programId, startOffset);
27
+ transportStream.startOffset.setOffset({
28
+ trackId: programId,
29
+ newOffset: startOffset,
30
+ });
28
31
  const track = {
29
32
  m3uStreamFormat: null,
30
33
  rotation: 0,
@@ -0,0 +1,9 @@
1
+ import type { TransportStreamSeekingHints } from '../../seeking-hints';
2
+ import type { TracksState } from '../../state/has-tracks-section';
3
+ import type { ParserState } from '../../state/parser-state';
4
+ import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
+ export declare const getSeekingHintsFromTransportStream: (transportStream: TransportStreamState, tracksState: TracksState) => TransportStreamSeekingHints | null;
6
+ export declare const setSeekingHintsForTransportStream: ({ hints, state, }: {
7
+ hints: TransportStreamSeekingHints;
8
+ state: ParserState;
9
+ }) => void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForTransportStream = exports.getSeekingHintsFromTransportStream = void 0;
4
+ const getSeekingHintsFromTransportStream = (transportStream, tracksState) => {
5
+ const firstVideoTrack = tracksState
6
+ .getTracks()
7
+ .find((t) => t.type === 'video');
8
+ if (!firstVideoTrack) {
9
+ return null;
10
+ }
11
+ return {
12
+ type: 'transport-stream-seeking-hints',
13
+ observedPesHeaders: transportStream.observedPesHeaders.getPesKeyframeHeaders(),
14
+ ptsStartOffset: transportStream.startOffset.getOffset(firstVideoTrack.trackId),
15
+ firstVideoTrackId: firstVideoTrack.trackId,
16
+ };
17
+ };
18
+ exports.getSeekingHintsFromTransportStream = getSeekingHintsFromTransportStream;
19
+ const setSeekingHintsForTransportStream = ({ hints, state, }) => {
20
+ state.transportStream.observedPesHeaders.setPesKeyframesFromSeekingHints(hints);
21
+ state.transportStream.startOffset.setOffset({
22
+ trackId: hints.firstVideoTrackId,
23
+ newOffset: hints.ptsStartOffset,
24
+ });
25
+ };
26
+ exports.setSeekingHintsForTransportStream = setSeekingHintsForTransportStream;
@@ -1,7 +1,7 @@
1
- import type { WavSeekingInfo } from '../../seeking-info';
1
+ import type { WavSeekingHints } from '../../seeking-hints';
2
2
  import type { SeekResolution } from '../../work-on-seek-request';
3
3
  export declare const WAVE_SAMPLES_PER_SECOND = 25;
4
4
  export declare const getSeekingByteFromWav: ({ info, time, }: {
5
- info: WavSeekingInfo;
5
+ info: WavSeekingHints;
6
6
  time: number;
7
7
  }) => Promise<SeekResolution>;
@@ -4,12 +4,12 @@ exports.getSeekingByteFromWav = exports.WAVE_SAMPLES_PER_SECOND = void 0;
4
4
  exports.WAVE_SAMPLES_PER_SECOND = 25;
5
5
  const getSeekingByteFromWav = ({ info, time, }) => {
6
6
  const bytesPerSecond = info.sampleRate * info.blockAlign;
7
- const durationInSeconds = info.mediaSections.size / bytesPerSecond;
7
+ const durationInSeconds = info.mediaSection.size / bytesPerSecond;
8
8
  const timeRoundedDown = Math.floor(Math.min(time, durationInSeconds - 0.0000001) * exports.WAVE_SAMPLES_PER_SECOND) / exports.WAVE_SAMPLES_PER_SECOND;
9
9
  const byteOffset = bytesPerSecond * timeRoundedDown;
10
10
  return Promise.resolve({
11
11
  type: 'do-seek',
12
- byte: byteOffset + info.mediaSections.start,
12
+ byte: byteOffset + info.mediaSection.start,
13
13
  });
14
14
  };
15
15
  exports.getSeekingByteFromWav = getSeekingByteFromWav;
@@ -0,0 +1,12 @@
1
+ import type { WavSeekingHints } from '../../seeking-hints';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ import type { MediaSectionState } from '../../state/video-section';
4
+ import type { WavStructure } from './types';
5
+ export declare const getSeekingHintsFromWav: ({ structure, mediaSectionState, }: {
6
+ structure: WavStructure;
7
+ mediaSectionState: MediaSectionState;
8
+ }) => WavSeekingHints | null;
9
+ export declare const setSeekingHintsForWav: ({ hints, state, }: {
10
+ hints: WavSeekingHints;
11
+ state: ParserState;
12
+ }) => void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForWav = exports.getSeekingHintsFromWav = void 0;
4
+ const getSeekingHintsFromWav = ({ structure, mediaSectionState, }) => {
5
+ const fmtBox = structure.boxes.find((box) => box.type === 'wav-fmt');
6
+ if (!fmtBox) {
7
+ return null;
8
+ }
9
+ const mediaSection = mediaSectionState.getMediaSections();
10
+ if (mediaSection.length !== 1) {
11
+ return null;
12
+ }
13
+ return {
14
+ type: 'wav-seeking-hints',
15
+ sampleRate: fmtBox.sampleRate,
16
+ blockAlign: fmtBox.blockAlign,
17
+ mediaSection: mediaSection[0],
18
+ };
19
+ };
20
+ exports.getSeekingHintsFromWav = getSeekingHintsFromWav;
21
+ const setSeekingHintsForWav = ({ hints, state, }) => {
22
+ // abstaining from setting fmt box, usually it is at the very beginning
23
+ state.mediaSection.addMediaSection(hints.mediaSection);
24
+ };
25
+ exports.setSeekingHintsForWav = setSeekingHintsForWav;
@@ -1,14 +1,12 @@
1
1
  import type { LogLevel } from '../../../log';
2
- import type { WebmSeekingInfo } from '../../../seeking-info';
3
- import type { KeyframesState } from '../../../state/keyframes';
2
+ import type { WebmSeekingHints } from '../../../seeking-hints';
4
3
  import type { WebmState } from '../../../state/matroska/webm';
5
4
  import type { MediaSectionState } from '../../../state/video-section';
6
5
  import type { SeekResolution } from '../../../work-on-seek-request';
7
- export declare const getSeekingByteFromMatroska: ({ time, webmState, info, logLevel, mediaSection, keyframes, }: {
6
+ export declare const getSeekingByteFromMatroska: ({ time, webmState, info, logLevel, mediaSection, }: {
8
7
  time: number;
9
8
  webmState: WebmState;
10
- info: WebmSeekingInfo;
9
+ info: WebmSeekingHints;
11
10
  logLevel: LogLevel;
12
11
  mediaSection: MediaSectionState;
13
- keyframes: KeyframesState;
14
12
  }) => Promise<SeekResolution>;
@@ -48,18 +48,18 @@ const getByteFromCues = ({ cuesResponse, time, info, logLevel, }) => {
48
48
  }
49
49
  return biggestCueBeforeTime.clusterPositionInSegment + segmentOffset;
50
50
  };
51
- const getSeekingByteFromMatroska = async ({ time, webmState, info, logLevel, mediaSection, keyframes, }) => {
52
- var _a, _b;
51
+ const getSeekingByteFromMatroska = async ({ time, webmState, info, logLevel, mediaSection, }) => {
52
+ var _a, _b, _c;
53
53
  if (!info.track) {
54
54
  log_1.Log.trace(logLevel, 'No video track found, cannot seek yet');
55
55
  return {
56
56
  type: 'valid-but-must-wait',
57
57
  };
58
58
  }
59
- const cuesResponse = (await webmState.cues.getLoadedCues());
59
+ const cuesResponse = (_a = info.loadedCues) !== null && _a !== void 0 ? _a : (await webmState.cues.getLoadedCues());
60
60
  // Check if we have already read keyframes
61
61
  const byteFromObservedKeyframe = findKeyframeBeforeTime({
62
- keyframes: keyframes.getKeyframes(),
62
+ keyframes: info.keyframes,
63
63
  time,
64
64
  });
65
65
  // Check if we have `Cues`
@@ -70,7 +70,7 @@ const getSeekingByteFromMatroska = async ({ time, webmState, info, logLevel, med
70
70
  logLevel,
71
71
  });
72
72
  // Fallback: back to the beginning
73
- const byteFromFirstMediaSection = (_b = (_a = webmState.getFirstCluster()) === null || _a === void 0 ? void 0 : _a.start) !== null && _b !== void 0 ? _b : null;
73
+ const byteFromFirstMediaSection = (_c = (_b = webmState.getFirstCluster()) === null || _b === void 0 ? void 0 : _b.start) !== null && _c !== void 0 ? _c : null;
74
74
  // Optimization possibility for later:
75
75
  // Don't seek back, if the last seen time is smaller than the time we want to seek to
76
76
  const seekPossibilities = [
@@ -0,0 +1,10 @@
1
+ import type { WebmSeekingHints } from '../../../seeking-hints';
2
+ import type { TracksState } from '../../../state/has-tracks-section';
3
+ import type { KeyframesState } from '../../../state/keyframes';
4
+ import type { WebmState } from '../../../state/matroska/webm';
5
+ import type { ParserState } from '../../../state/parser-state';
6
+ export declare const getSeekingHintsFromMatroska: (tracksState: TracksState, keyframesState: KeyframesState, webmState: WebmState) => WebmSeekingHints;
7
+ export declare const setSeekingHintsForWebm: ({ hints, state, }: {
8
+ hints: WebmSeekingHints;
9
+ state: ParserState;
10
+ }) => void;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForWebm = exports.getSeekingHintsFromMatroska = void 0;
4
+ const getSeekingHintsFromMatroska = (tracksState, keyframesState, webmState) => {
5
+ const tracks = tracksState.getTracks();
6
+ const firstVideoTrack = tracks.find((track) => track.type === 'video');
7
+ const keyframes = keyframesState.getKeyframes();
8
+ const loadedCues = webmState.cues.getIfAlreadyLoaded();
9
+ return {
10
+ type: 'webm-seeking-hints',
11
+ track: firstVideoTrack
12
+ ? {
13
+ timescale: firstVideoTrack.timescale,
14
+ trackId: firstVideoTrack.trackId,
15
+ }
16
+ : null,
17
+ keyframes,
18
+ loadedCues,
19
+ timestampMap: webmState.getTimeStampMapForSeekingHints(),
20
+ };
21
+ };
22
+ exports.getSeekingHintsFromMatroska = getSeekingHintsFromMatroska;
23
+ const setSeekingHintsForWebm = ({ hints, state, }) => {
24
+ state.webm.cues.setFromSeekingHints(hints);
25
+ state.keyframes.setFromSeekingHints(hints);
26
+ state.webm.setTimeStampMapForSeekingHints(hints.timestampMap);
27
+ };
28
+ exports.setSeekingHintsForWebm = setSeekingHintsForWebm;
@@ -1,3 +1,4 @@
1
+ import type { SeekingHints } from '../seeking-hints';
1
2
  import { MediaParserEmitter } from './emitter';
2
3
  import type { PauseSignal } from './pause-signal';
3
4
  import type { PerformedSeeksSignal } from './performed-seeks-stats';
@@ -9,6 +10,7 @@ export type MediaParserController = {
9
10
  _experimentalSeek: SeekSignal['seek'];
10
11
  addEventListener: MediaParserEmitter['addEventListener'];
11
12
  removeEventListener: MediaParserEmitter['removeEventListener'];
13
+ getSeekingHints: () => Promise<SeekingHints | null>;
12
14
  /**
13
15
  * @deprecated Not public API
14
16
  */
@@ -18,6 +20,7 @@ export type MediaParserController = {
18
20
  seekSignal: SeekSignal;
19
21
  markAsReadyToEmitEvents: () => void;
20
22
  performedSeeksSignal: PerformedSeeksSignal;
23
+ attachSeekingHintResolution: (callback: () => Promise<SeekingHints | null>) => void;
21
24
  };
22
25
  };
23
26
  export declare const mediaParserController: () => MediaParserController;