@remotion/media-parser 4.0.280 → 4.0.284

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 (269) hide show
  1. package/dist/check-if-done.js +1 -1
  2. package/dist/containers/aac/parse-aac.js +21 -12
  3. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  4. package/dist/containers/flac/get-duration-from-flac.js +1 -1
  5. package/dist/containers/flac/get-sample-rate.js +1 -1
  6. package/dist/containers/flac/parse-flac-frame.js +18 -13
  7. package/dist/containers/flac/parse-flac.js +3 -3
  8. package/dist/containers/flac/parse-header.js +1 -1
  9. package/dist/containers/flac/parse-metadata.js +1 -1
  10. package/dist/containers/flac/parse-streaminfo.js +7 -2
  11. package/dist/containers/flac/parse-unknown-block.js +1 -1
  12. package/dist/containers/iso-base-media/base-media-box.d.ts +2 -1
  13. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +11 -0
  14. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +13 -0
  15. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.d.ts +2 -0
  16. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +46 -0
  17. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +10 -0
  18. package/dist/containers/iso-base-media/find-keyframe-before-time.js +28 -0
  19. package/dist/containers/iso-base-media/get-children.d.ts +7 -3
  20. package/dist/containers/iso-base-media/get-children.js +7 -3
  21. package/dist/containers/iso-base-media/get-keyframes.js +9 -4
  22. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +9 -0
  23. package/dist/containers/iso-base-media/get-mfra-atom.js +12 -0
  24. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +13 -0
  25. package/dist/containers/iso-base-media/get-mfra-seeking-box.js +32 -0
  26. package/dist/containers/iso-base-media/get-moov-atom.js +58 -42
  27. package/dist/containers/iso-base-media/get-sample-position-bounds.d.ts +5 -0
  28. package/dist/containers/iso-base-media/get-sample-position-bounds.js +19 -0
  29. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +7 -2
  30. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +18 -48
  31. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +11 -5
  32. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +100 -36
  33. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.d.ts +11 -0
  34. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +25 -0
  35. package/dist/containers/iso-base-media/mdat/mdat.js +42 -26
  36. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +11 -0
  37. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.js +27 -0
  38. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +81 -0
  39. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +23 -0
  40. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +9 -0
  41. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +38 -0
  42. package/dist/containers/iso-base-media/mfra/mfra.d.ts +2 -0
  43. package/dist/containers/iso-base-media/mfra/mfra.js +11 -0
  44. package/dist/containers/iso-base-media/mfra/tfra.d.ts +19 -0
  45. package/dist/containers/iso-base-media/mfra/tfra.js +100 -0
  46. package/dist/containers/iso-base-media/moov/moov.d.ts +7 -3
  47. package/dist/containers/iso-base-media/moov/moov.js +4 -2
  48. package/dist/containers/iso-base-media/parse-boxes.js +20 -4
  49. package/dist/containers/iso-base-media/process-box.d.ts +26 -2
  50. package/dist/containers/iso-base-media/process-box.js +54 -15
  51. package/dist/containers/iso-base-media/stsd/mebx.d.ts +5 -3
  52. package/dist/containers/iso-base-media/stsd/mebx.js +6 -4
  53. package/dist/containers/iso-base-media/stsd/samples.d.ts +8 -5
  54. package/dist/containers/iso-base-media/stsd/samples.js +16 -9
  55. package/dist/containers/iso-base-media/stsd/stsd.d.ts +5 -3
  56. package/dist/containers/iso-base-media/stsd/stsd.js +3 -3
  57. package/dist/containers/iso-base-media/trak/trak.d.ts +5 -3
  58. package/dist/containers/iso-base-media/trak/trak.js +4 -2
  59. package/dist/containers/iso-base-media/traversal.d.ts +9 -2
  60. package/dist/containers/iso-base-media/traversal.js +15 -7
  61. package/dist/containers/m3u/get-duration-from-m3u.js +1 -1
  62. package/dist/containers/m3u/get-streams.js +1 -1
  63. package/dist/containers/m3u/iterate-over-segment-files.d.ts +1 -1
  64. package/dist/containers/m3u/iterate-over-segment-files.js +3 -2
  65. package/dist/containers/m3u/parse-m3u.js +1 -1
  66. package/dist/containers/m3u/run-over-m3u.js +11 -2
  67. package/dist/containers/mp3/id3.js +1 -1
  68. package/dist/containers/mp3/parse-mpeg-header.js +8 -2
  69. package/dist/containers/riff/expect-riff-box.js +7 -2
  70. package/dist/containers/riff/get-tracks-from-avi.js +1 -1
  71. package/dist/containers/riff/parse-movi.js +35 -26
  72. package/dist/containers/riff/parse-riff-body.js +13 -5
  73. package/dist/containers/riff/parse-riff-header.js +1 -1
  74. package/dist/containers/riff/parse-video-section.d.ts +1 -1
  75. package/dist/containers/riff/parse-video-section.js +3 -3
  76. package/dist/containers/transport-stream/get-tracks.js +1 -1
  77. package/dist/containers/transport-stream/handle-aac-packet.js +12 -3
  78. package/dist/containers/transport-stream/handle-avc-packet.js +16 -3
  79. package/dist/containers/transport-stream/parse-packet.js +1 -1
  80. package/dist/containers/transport-stream/parse-transport-stream.js +1 -1
  81. package/dist/containers/transport-stream/process-audio.d.ts +21 -0
  82. package/dist/containers/transport-stream/process-audio.js +54 -0
  83. package/dist/containers/transport-stream/process-sample-if-possible.d.ts +2 -0
  84. package/dist/containers/transport-stream/process-sample-if-possible.js +62 -0
  85. package/dist/containers/transport-stream/process-video.d.ts +20 -0
  86. package/dist/containers/transport-stream/process-video.js +39 -0
  87. package/dist/containers/transport-stream/start-offset.d.ts +4 -0
  88. package/dist/containers/transport-stream/start-offset.js +13 -0
  89. package/dist/containers/wav/get-duration-from-wav.js +1 -1
  90. package/dist/containers/wav/get-seeking-byte.d.ts +7 -0
  91. package/dist/containers/wav/get-seeking-byte.js +15 -0
  92. package/dist/containers/wav/get-seeking-info.d.ts +7 -0
  93. package/dist/containers/wav/get-seeking-info.js +20 -0
  94. package/dist/containers/wav/parse-data.js +2 -2
  95. package/dist/containers/wav/parse-fmt.js +7 -2
  96. package/dist/containers/wav/parse-header.js +1 -1
  97. package/dist/containers/wav/parse-id3.js +1 -1
  98. package/dist/containers/wav/parse-list.js +1 -1
  99. package/dist/containers/wav/parse-media-section.d.ts +5 -0
  100. package/dist/containers/wav/parse-media-section.js +44 -0
  101. package/dist/containers/wav/parse-video-section.js +7 -5
  102. package/dist/containers/wav/parse-wav.js +4 -4
  103. package/dist/containers/webm/get-ready-tracks.js +2 -2
  104. package/dist/containers/webm/parse-ebml.js +17 -5
  105. package/dist/containers/webm/parse-webm-header.js +1 -1
  106. package/dist/controller/emitter.d.ts +33 -0
  107. package/dist/controller/emitter.js +66 -0
  108. package/dist/controller/media-parser-controller.d.ts +23 -0
  109. package/dist/controller/media-parser-controller.js +41 -0
  110. package/dist/controller/pause-signal.d.ts +11 -0
  111. package/dist/controller/pause-signal.js +38 -0
  112. package/dist/controller/performed-seeks-stats.d.ts +11 -0
  113. package/dist/controller/performed-seeks-stats.js +21 -0
  114. package/dist/controller/seek-signal.d.ts +19 -0
  115. package/dist/controller/seek-signal.js +24 -0
  116. package/dist/convert-audio-or-video-sample.d.ts +4 -1
  117. package/dist/convert-audio-or-video-sample.js +19 -6
  118. package/dist/disallow-forward-seek-if-samples-are-needed.d.ts +6 -0
  119. package/dist/disallow-forward-seek-if-samples-are-needed.js +14 -0
  120. package/dist/emit-audio-sample.d.ts +8 -5
  121. package/dist/emit-audio-sample.js +6 -6
  122. package/dist/emit-available-info.js +6 -6
  123. package/dist/emitter.d.ts +9 -0
  124. package/dist/emitter.js +35 -3
  125. package/dist/esm/index.mjs +5698 -4585
  126. package/dist/esm/server-worker.mjs +464 -0
  127. package/dist/esm/worker-server-entry.mjs +6554 -5438
  128. package/dist/esm/worker-web-entry.mjs +5498 -4382
  129. package/dist/esm/worker.mjs +26 -12
  130. package/dist/forward-controller.d.ts +1 -1
  131. package/dist/get-dimensions.js +2 -2
  132. package/dist/get-duration.js +21 -31
  133. package/dist/get-fps.js +7 -3
  134. package/dist/get-keyframes.js +2 -2
  135. package/dist/get-seeking-info.d.ts +19 -3
  136. package/dist/get-seeking-info.js +33 -7
  137. package/dist/get-tracks.js +12 -4
  138. package/dist/has-all-info.js +1 -1
  139. package/dist/index.d.ts +154 -135
  140. package/dist/index.js +3 -1
  141. package/dist/init-video.js +21 -12
  142. package/dist/internal-parse-media.js +6 -2
  143. package/dist/media-parser-controller.d.ts +2 -1
  144. package/dist/media-parser-controller.js +3 -2
  145. package/dist/metadata/get-metadata.js +1 -1
  146. package/dist/metadata/metadata-from-iso.js +5 -1
  147. package/dist/options.d.ts +1 -1
  148. package/dist/parse-loop.js +17 -4
  149. package/dist/parse-media-on-worker-entry.js +10 -6
  150. package/dist/perform-seek.d.ts +23 -3
  151. package/dist/perform-seek.js +44 -8
  152. package/dist/readers/reader.d.ts +1 -1
  153. package/dist/readers/state/aac-state.d.ts +13 -0
  154. package/dist/readers/state/aac-state.js +17 -0
  155. package/dist/readers/state/can-skip-tracks.d.ts +16 -0
  156. package/dist/readers/state/can-skip-tracks.js +60 -0
  157. package/dist/readers/state/current-reader.d.ts +6 -0
  158. package/dist/readers/state/current-reader.js +13 -0
  159. package/dist/readers/state/emitted-fields.d.ts +1 -0
  160. package/dist/readers/state/emitted-fields.js +37 -0
  161. package/dist/readers/state/flac-state.d.ts +4 -0
  162. package/dist/readers/state/flac-state.js +13 -0
  163. package/dist/readers/state/has-tracks-section.d.ts +14 -0
  164. package/dist/readers/state/has-tracks-section.js +37 -0
  165. package/dist/readers/state/images.d.ts +9 -0
  166. package/dist/readers/state/images.js +14 -0
  167. package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +12 -0
  168. package/dist/readers/state/iso-base-media/cached-sample-positions.js +46 -0
  169. package/dist/readers/state/iso-base-media/iso-state.d.ts +24 -0
  170. package/dist/readers/state/iso-base-media/iso-state.js +20 -0
  171. package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +13 -0
  172. package/dist/readers/state/iso-base-media/lazy-mfra-load.js +29 -0
  173. package/dist/readers/state/iso-base-media/moov-box.d.ts +5 -0
  174. package/dist/readers/state/iso-base-media/moov-box.js +13 -0
  175. package/dist/readers/state/keyframes.d.ts +6 -0
  176. package/dist/readers/state/keyframes.js +15 -0
  177. package/dist/readers/state/m3u-state.d.ts +44 -0
  178. package/dist/readers/state/m3u-state.js +124 -0
  179. package/dist/readers/state/may-skip-video-data.d.ts +4 -0
  180. package/dist/readers/state/may-skip-video-data.js +18 -0
  181. package/dist/readers/state/mp3.d.ts +15 -0
  182. package/dist/readers/state/mp3.js +19 -0
  183. package/dist/readers/state/need-samples-for-fields.d.ts +6 -0
  184. package/dist/readers/state/need-samples-for-fields.js +39 -0
  185. package/dist/readers/state/parser-state.d.ts +252 -0
  186. package/dist/readers/state/parser-state.js +124 -0
  187. package/dist/readers/state/riff.d.ts +10 -0
  188. package/dist/readers/state/riff.js +32 -0
  189. package/dist/readers/state/sample-callbacks.d.ts +44 -0
  190. package/dist/readers/state/sample-callbacks.js +118 -0
  191. package/dist/readers/state/seek-infinite-loop.d.ts +5 -0
  192. package/dist/readers/state/seek-infinite-loop.js +22 -0
  193. package/dist/readers/state/slow-duration-fps.d.ts +11 -0
  194. package/dist/readers/state/slow-duration-fps.js +86 -0
  195. package/dist/readers/state/structure.d.ts +15 -0
  196. package/dist/readers/state/structure.js +78 -0
  197. package/dist/readers/state/timings.d.ts +8 -0
  198. package/dist/readers/state/timings.js +13 -0
  199. package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +6 -0
  200. package/dist/readers/state/transport-stream/last-emitted-sample.js +16 -0
  201. package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +6 -0
  202. package/dist/readers/state/transport-stream/next-pes-header-store.js +18 -0
  203. package/dist/readers/state/transport-stream/start-offset.d.ts +4 -0
  204. package/dist/readers/state/transport-stream/start-offset.js +13 -0
  205. package/dist/readers/state/transport-stream/transport-stream.d.ts +19 -0
  206. package/dist/readers/state/transport-stream/transport-stream.js +25 -0
  207. package/dist/readers/state/video-section.d.ts +33 -0
  208. package/dist/readers/state/video-section.js +65 -0
  209. package/dist/readers/state/webm.d.ts +28 -0
  210. package/dist/readers/state/webm.js +109 -0
  211. package/dist/register-track.d.ts +17 -4
  212. package/dist/register-track.js +31 -17
  213. package/dist/run-parse-iteration.js +1 -1
  214. package/dist/seek-backwards.d.ts +15 -2
  215. package/dist/seek-backwards.js +7 -8
  216. package/dist/seek-forwards.d.ts +19 -2
  217. package/dist/seek-forwards.js +19 -12
  218. package/dist/seek-signal.d.ts +3 -6
  219. package/dist/seek-signal.js +4 -6
  220. package/dist/seeking-info.d.ts +11 -1
  221. package/dist/server-worker.d.ts +3 -0
  222. package/dist/server-worker.js +7 -0
  223. package/dist/server-worker.module.d.ts +2 -0
  224. package/dist/server-worker.module.js +12 -0
  225. package/dist/state/current-reader.d.ts +6 -0
  226. package/dist/state/current-reader.js +13 -0
  227. package/dist/state/iso-base-media/cached-sample-positions.d.ts +1 -1
  228. package/dist/state/iso-base-media/cached-sample-positions.js +7 -9
  229. package/dist/state/iso-base-media/iso-state.d.ts +15 -1
  230. package/dist/state/iso-base-media/iso-state.js +9 -1
  231. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +14 -0
  232. package/dist/state/iso-base-media/lazy-mfra-load.js +29 -0
  233. package/dist/state/need-samples-for-fields.d.ts +1 -0
  234. package/dist/state/need-samples-for-fields.js +3 -3
  235. package/dist/state/parser-state.d.ts +146 -130
  236. package/dist/state/parser-state.js +15 -4
  237. package/dist/state/sample-callbacks.d.ts +3 -2
  238. package/dist/state/sample-callbacks.js +2 -4
  239. package/dist/state/seek-infinite-loop.d.ts +5 -0
  240. package/dist/state/seek-infinite-loop.js +22 -0
  241. package/dist/state/transport-stream/last-emitted-sample.d.ts +6 -0
  242. package/dist/state/transport-stream/last-emitted-sample.js +16 -0
  243. package/dist/state/transport-stream/next-pes-header-store.d.ts +6 -0
  244. package/dist/state/transport-stream/next-pes-header-store.js +18 -0
  245. package/dist/state/transport-stream/start-offset.d.ts +4 -0
  246. package/dist/state/transport-stream/start-offset.js +13 -0
  247. package/dist/state/transport-stream/transport-stream.d.ts +19 -0
  248. package/dist/state/transport-stream/transport-stream.js +24 -0
  249. package/dist/state/uml.d.ts +32 -0
  250. package/dist/state/uml.js +52 -0
  251. package/dist/state/video-section.d.ts +24 -6
  252. package/dist/state/video-section.js +51 -22
  253. package/dist/state/work-on-seek-request-options.d.ts +3 -0
  254. package/dist/state/work-on-seek-request-options.js +26 -0
  255. package/dist/throttled-progress.d.ts +1 -1
  256. package/dist/version.d.ts +1 -1
  257. package/dist/version.js +1 -1
  258. package/dist/with-resolvers.d.ts +5 -0
  259. package/dist/with-resolvers.js +13 -0
  260. package/dist/work-on-seek-request.d.ts +42 -1
  261. package/dist/work-on-seek-request.js +104 -15
  262. package/dist/worker/forward-controller.d.ts +1 -1
  263. package/dist/worker/forward-controller.js +4 -0
  264. package/dist/worker/worker-types.d.ts +6 -1
  265. package/dist/worker-server.js +3 -2
  266. package/dist/worker.js +1 -5
  267. package/dist/worker.module.d.ts +4 -0
  268. package/dist/worker.module.js +12 -0
  269. package/package.json +12 -3
@@ -15,7 +15,7 @@ const checkIfDone = async (state) => {
15
15
  return true;
16
16
  }
17
17
  if (state.iterator.counter.getOffset() === state.contentLength) {
18
- if (state.getStructure().type === 'm3u' &&
18
+ if (state.structure.getStructure().type === 'm3u' &&
19
19
  !state.m3u.getAllChunksProcessedOverall()) {
20
20
  return false;
21
21
  }
@@ -5,6 +5,7 @@ const aac_codecprivate_1 = require("../../aac-codecprivate");
5
5
  const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
6
6
  const emit_audio_sample_1 = require("../../emit-audio-sample");
7
7
  const register_track_1 = require("../../register-track");
8
+ const work_on_seek_request_1 = require("../../work-on-seek-request");
8
9
  const parseAac = async (state) => {
9
10
  const { iterator } = state;
10
11
  const startOffset = iterator.counter.getOffset();
@@ -48,7 +49,7 @@ const parseAac = async (state) => {
48
49
  const data = iterator.getSlice(frameLength);
49
50
  if (state.callbacks.tracks.getTracks().length === 0) {
50
51
  await (0, register_track_1.registerAudioTrack)({
51
- state,
52
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
52
53
  container: 'aac',
53
54
  track: {
54
55
  codec: (0, aac_codecprivate_1.mapAudioObjectTypeToCodecString)(audioObjectType),
@@ -62,6 +63,10 @@ const parseAac = async (state) => {
62
63
  trakBox: null,
63
64
  type: 'audio',
64
65
  },
66
+ registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
67
+ tracks: state.callbacks.tracks,
68
+ logLevel: state.logLevel,
69
+ onAudioTrack: state.onAudioTrack,
65
70
  });
66
71
  state.callbacks.tracks.setIsDone(state.logLevel);
67
72
  }
@@ -72,17 +77,21 @@ const parseAac = async (state) => {
72
77
  await (0, emit_audio_sample_1.emitAudioSample)({
73
78
  trackId: 0,
74
79
  audioSample: (0, convert_audio_or_video_sample_1.convertAudioOrVideoSampleToWebCodecsTimestamps)({
75
- duration,
76
- type: 'key',
77
- data,
78
- offset: startOffset,
79
- timescale: 1000000,
80
- trackId: 0,
81
- cts: timestamp,
82
- dts: timestamp,
83
- timestamp,
84
- }, 1),
85
- state,
80
+ sample: {
81
+ duration,
82
+ type: 'key',
83
+ data,
84
+ offset: startOffset,
85
+ timescale: 1000000,
86
+ trackId: 0,
87
+ cts: timestamp,
88
+ dts: timestamp,
89
+ timestamp,
90
+ },
91
+ timescale: 1,
92
+ }),
93
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
94
+ callbacks: state.callbacks,
86
95
  });
87
96
  return Promise.resolve(null);
88
97
  };
@@ -1,2 +1,2 @@
1
1
  import type { BufferIterator } from '../../iterator/buffer-iterator';
2
- export declare const getChannelCount: (iterator: BufferIterator) => 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 5 | 1 | 2 | 3 | 4 | 6 | 7 | 8;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDurationFromFlac = void 0;
4
4
  const getDurationFromFlac = (parserState) => {
5
- const structure = parserState.getFlacStructure();
5
+ const structure = parserState.structure.getFlacStructure();
6
6
  const streaminfo = structure.boxes.find((b) => b.type === 'flac-streaminfo');
7
7
  if (!streaminfo) {
8
8
  throw new Error('Streaminfo not found');
@@ -6,7 +6,7 @@ const getSampleRate = (iterator, state) => {
6
6
  var _a, _b;
7
7
  const mode = iterator.getBits(4);
8
8
  if (mode === 0b0000) {
9
- const structure = state.getFlacStructure();
9
+ const structure = state.structure.getFlacStructure();
10
10
  const sampleRate = (_b = (_a = structure.boxes.find((box) => box.type === 'flac-streaminfo')) === null || _a === void 0 ? void 0 : _a.sampleRate) !== null && _b !== void 0 ? _b : null;
11
11
  if (sampleRate === null) {
12
12
  throw new Error('Sample rate not found');
@@ -4,6 +4,7 @@ exports.parseFlacFrame = exports.parseFrameHeader = void 0;
4
4
  const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
5
5
  const emit_audio_sample_1 = require("../../emit-audio-sample");
6
6
  const buffer_iterator_1 = require("../../iterator/buffer-iterator");
7
+ const work_on_seek_request_1 = require("../../work-on-seek-request");
7
8
  const get_block_size_1 = require("./get-block-size");
8
9
  const get_channel_count_1 = require("./get-channel-count");
9
10
  const get_sample_rate_1 = require("./get-sample-rate");
@@ -72,7 +73,7 @@ const emitSample = async ({ state, data, offset, }) => {
72
73
  }
73
74
  const { blockSize, num, sampleRate } = parsed;
74
75
  const duration = blockSize / sampleRate;
75
- const structure = state.getFlacStructure();
76
+ const structure = state.structure.getFlacStructure();
76
77
  const streamInfo = structure.boxes.find((box) => box.type === 'flac-streaminfo');
77
78
  if (!streamInfo) {
78
79
  throw new Error('Stream info not found');
@@ -84,17 +85,21 @@ const emitSample = async ({ state, data, offset, }) => {
84
85
  await (0, emit_audio_sample_1.emitAudioSample)({
85
86
  trackId: 0,
86
87
  audioSample: (0, convert_audio_or_video_sample_1.convertAudioOrVideoSampleToWebCodecsTimestamps)({
87
- data,
88
- duration,
89
- cts: timestamp,
90
- dts: timestamp,
91
- timestamp,
92
- type: 'key',
93
- offset,
94
- timescale: 1000000,
95
- trackId: 0,
96
- }, 1),
97
- state,
88
+ sample: {
89
+ data,
90
+ duration,
91
+ cts: timestamp,
92
+ dts: timestamp,
93
+ timestamp,
94
+ type: 'key',
95
+ offset,
96
+ timescale: 1000000,
97
+ trackId: 0,
98
+ },
99
+ timescale: 1,
100
+ }),
101
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
102
+ callbacks: state.callbacks,
98
103
  });
99
104
  iterator.destroy();
100
105
  };
@@ -128,7 +133,7 @@ const parseFlacFrame = async ({ state, iterator, }) => {
128
133
  throw new Error('Blocking bit should be set');
129
134
  }
130
135
  iterator.stopReadingBits();
131
- const structure = state.getFlacStructure();
136
+ const structure = state.structure.getFlacStructure();
132
137
  const minimumFrameSize = (_b = (_a = structure.boxes.find((b) => b.type === 'flac-streaminfo')) === null || _a === void 0 ? void 0 : _a.minimumFrameSize) !== null && _b !== void 0 ? _b : null;
133
138
  if (minimumFrameSize === null) {
134
139
  throw new Error('Expected flac-streaminfo');
@@ -13,8 +13,8 @@ const flacTypes = {
13
13
  vorbisComment: 4,
14
14
  };
15
15
  const parseFlac = ({ iterator, state, }) => {
16
- const videoSectionState = state.videoSection.isInVideoSectionState(iterator);
17
- if (videoSectionState === 'in-section') {
16
+ const mediaSectionState = state.mediaSection.isCurrentByteInMediaSection(iterator);
17
+ if (mediaSectionState === 'in-section') {
18
18
  if ((0, may_skip_video_data_1.maySkipVideoData)({ state })) {
19
19
  return Promise.resolve((0, skip_1.makeSkip)(state.contentLength));
20
20
  }
@@ -33,7 +33,7 @@ const parseFlac = ({ iterator, state, }) => {
33
33
  iterator.stopReadingBits();
34
34
  const size = iterator.getUint24();
35
35
  if (isLastMetadata) {
36
- state.videoSection.setVideoSection({
36
+ state.mediaSection.addMediaSection({
37
37
  start: iterator.counter.getOffset() + size,
38
38
  size: state.contentLength - iterator.counter.getOffset() - size,
39
39
  });
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseFlacHeader = void 0;
4
4
  const parseFlacHeader = ({ state, }) => {
5
- state.getFlacStructure().boxes.push({
5
+ state.structure.getFlacStructure().boxes.push({
6
6
  type: 'flac-header',
7
7
  });
8
8
  return Promise.resolve(null);
@@ -17,7 +17,7 @@ const parseVorbisComment = ({ state, iterator, size, }) => {
17
17
  const [key, value] = field.split('=');
18
18
  box.fields.push({ key: key.toLowerCase(), value, trackId: null });
19
19
  }
20
- state.getFlacStructure().boxes.push(box);
20
+ state.structure.getFlacStructure().boxes.push(box);
21
21
  expectNoMoreBytes();
22
22
  return Promise.resolve(null);
23
23
  };
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseStreamInfo = void 0;
4
4
  const register_track_1 = require("../../register-track");
5
+ const work_on_seek_request_1 = require("../../work-on-seek-request");
5
6
  const parseStreamInfo = async ({ iterator, state, }) => {
6
7
  const counter = iterator.counter.getOffset();
7
8
  const minimumBlockSize = iterator.getUint16();
@@ -30,10 +31,10 @@ const parseStreamInfo = async ({ iterator, state, }) => {
30
31
  sampleRate,
31
32
  totalSamples,
32
33
  };
33
- state.getFlacStructure().boxes.push(flacStreamInfo);
34
+ state.structure.getFlacStructure().boxes.push(flacStreamInfo);
34
35
  await (0, register_track_1.registerAudioTrack)({
35
36
  container: 'flac',
36
- state,
37
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
37
38
  track: {
38
39
  codec: 'flac',
39
40
  type: 'audio',
@@ -46,6 +47,10 @@ const parseStreamInfo = async ({ iterator, state, }) => {
46
47
  trackId: 0,
47
48
  trakBox: null,
48
49
  },
50
+ registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
51
+ tracks: state.callbacks.tracks,
52
+ logLevel: state.logLevel,
53
+ onAudioTrack: state.onAudioTrack,
49
54
  });
50
55
  state.callbacks.tracks.setIsDone(state.logLevel);
51
56
  return Promise.resolve(null);
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseFlacUnkownBlock = void 0;
4
4
  const parseFlacUnkownBlock = ({ iterator, state, size, }) => {
5
5
  iterator.discard(size);
6
- state.getFlacStructure().boxes.push({
6
+ state.structure.getFlacStructure().boxes.push({
7
7
  type: 'flac-header',
8
8
  });
9
9
  return Promise.resolve(null);
@@ -4,6 +4,7 @@ import type { FtypBox } from './ftyp';
4
4
  import type { MdhdBox } from './mdhd';
5
5
  import type { HdlrBox } from './meta/hdlr';
6
6
  import type { IlstBox } from './meta/ilst';
7
+ import type { TfraBox } from './mfra/tfra';
7
8
  import type { MoovBox } from './moov/moov';
8
9
  import type { MvhdBox } from './mvhd';
9
10
  import type { Av1CBox } from './stsd/av1c';
@@ -34,4 +35,4 @@ export interface RegularBox extends BaseBox {
34
35
  type: 'regular-box';
35
36
  }
36
37
  export type BoxAndNext = IsoBaseMediaBox | null;
37
- export type IsoBaseMediaBox = RegularBox | FtypBox | MvhdBox | TkhdBox | StsdBox | MebxBox | KeysBox | MoovBox | TrakBox | SttsBox | MdhdBox | IlstBox | EsdsBox | StszBox | StcoBox | StscBox | AvccBox | HvccBox | VoidBox | StssBox | PaspBox | CttsBox | Av1CBox | TrunBox | HdlrBox | ColorParameterBox | TfdtBox | TfhdBox;
38
+ export type IsoBaseMediaBox = RegularBox | FtypBox | MvhdBox | TkhdBox | StsdBox | MebxBox | KeysBox | MoovBox | TrakBox | SttsBox | MdhdBox | IlstBox | EsdsBox | StszBox | StcoBox | StscBox | AvccBox | HvccBox | VoidBox | StssBox | PaspBox | CttsBox | Av1CBox | TrunBox | HdlrBox | ColorParameterBox | TfdtBox | TfhdBox | TfraBox;
@@ -0,0 +1,11 @@
1
+ import type { IsoBaseMediaBox } from './base-media-box';
2
+ import type { TfraBox } from './mfra/tfra';
3
+ import type { TkhdBox } from './tkhd';
4
+ export declare const collectSamplePositionsFromMoofBoxes: ({ moofBoxes, tfraBoxes, tkhdBox, }: {
5
+ moofBoxes: IsoBaseMediaBox[];
6
+ tfraBoxes: TfraBox[];
7
+ tkhdBox: TkhdBox;
8
+ }) => {
9
+ samplePositions: import("../..").SamplePosition[][];
10
+ isComplete: boolean;
11
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectSamplePositionsFromMoofBoxes = void 0;
4
+ const samples_from_moof_1 = require("../../samples-from-moof");
5
+ const collectSamplePositionsFromMoofBoxes = ({ moofBoxes, tfraBoxes, tkhdBox, }) => {
6
+ const isComplete = tfraBoxes.length > 0 &&
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 });
10
+ });
11
+ return { samplePositions: samplePositions_, isComplete };
12
+ };
13
+ exports.collectSamplePositionsFromMoofBoxes = collectSamplePositionsFromMoofBoxes;
@@ -0,0 +1,2 @@
1
+ import type { TrakBox } from './trak/trak';
2
+ export declare const collectSamplePositionsFromTrak: (trakBox: TrakBox) => import("../../get-sample-positions").SamplePosition[];
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectSamplePositionsFromTrak = void 0;
4
+ const get_audio_codec_1 = require("../../get-audio-codec");
5
+ const get_fps_1 = require("../../get-fps");
6
+ const get_sample_positions_1 = require("../../get-sample-positions");
7
+ const get_sample_positions_from_lpcm_1 = require("../../get-sample-positions-from-lpcm");
8
+ const traversal_1 = require("./traversal");
9
+ const collectSamplePositionsFromTrak = (trakBox) => {
10
+ const isLpcm = (0, get_audio_codec_1.isLpcmAudioCodec)(trakBox);
11
+ const timescaleAndDuration = (0, get_fps_1.getTimescaleAndDuration)(trakBox);
12
+ if (isLpcm) {
13
+ return (0, get_sample_positions_from_lpcm_1.getSamplePositionsFromLpcm)(trakBox);
14
+ }
15
+ const stszBox = (0, traversal_1.getStszBox)(trakBox);
16
+ const stcoBox = (0, traversal_1.getStcoBox)(trakBox);
17
+ const stscBox = (0, traversal_1.getStscBox)(trakBox);
18
+ const stssBox = (0, traversal_1.getStssBox)(trakBox);
19
+ const sttsBox = (0, traversal_1.getSttsBox)(trakBox);
20
+ const cttsBox = (0, traversal_1.getCttsBox)(trakBox);
21
+ if (!stszBox) {
22
+ throw new Error('Expected stsz box in trak box');
23
+ }
24
+ if (!stcoBox) {
25
+ throw new Error('Expected stco box in trak box');
26
+ }
27
+ if (!stscBox) {
28
+ throw new Error('Expected stsc box in trak box');
29
+ }
30
+ if (!sttsBox) {
31
+ throw new Error('Expected stts box in trak box');
32
+ }
33
+ if (!timescaleAndDuration) {
34
+ throw new Error('Expected timescale and duration in trak box');
35
+ }
36
+ const samplePositions = (0, get_sample_positions_1.getSamplePositions)({
37
+ stcoBox,
38
+ stscBox,
39
+ stszBox,
40
+ stssBox,
41
+ sttsBox,
42
+ cttsBox,
43
+ });
44
+ return samplePositions;
45
+ };
46
+ exports.collectSamplePositionsFromTrak = collectSamplePositionsFromTrak;
@@ -0,0 +1,10 @@
1
+ import type { SamplePosition } from '../../get-sample-positions';
2
+ import type { LogLevel } from '../../log';
3
+ import type { MediaSection } from '../../state/video-section';
4
+ export declare const findKeyframeBeforeTime: ({ samplePositions, time, timescale, mediaSections, logLevel, }: {
5
+ samplePositions: SamplePosition[];
6
+ time: number;
7
+ timescale: number;
8
+ mediaSections: MediaSection[];
9
+ logLevel: LogLevel;
10
+ }) => number | null;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findKeyframeBeforeTime = void 0;
4
+ const log_1 = require("../../log");
5
+ const findKeyframeBeforeTime = ({ samplePositions, time, timescale, mediaSections, logLevel, }) => {
6
+ let byte = 0;
7
+ let sam = null;
8
+ for (const sample of samplePositions) {
9
+ const ctsInSeconds = sample.cts / timescale;
10
+ const dtsInSeconds = sample.dts / timescale;
11
+ if ((ctsInSeconds <= time || dtsInSeconds <= time) &&
12
+ byte <= sample.offset &&
13
+ sample.isKeyframe) {
14
+ byte = sample.offset;
15
+ sam = sample;
16
+ }
17
+ }
18
+ if (!sam) {
19
+ throw new Error('No sample found');
20
+ }
21
+ const mediaSection = mediaSections.find((section) => sam.offset >= section.start && sam.offset < section.start + section.size);
22
+ if (!mediaSection) {
23
+ log_1.Log.trace(logLevel, 'Found a sample, but the offset has not yet been marked as a video section yet. Not yet able to seek, but probably once we have started reading the next box.', sam);
24
+ return null;
25
+ }
26
+ return sam.offset;
27
+ };
28
+ exports.findKeyframeBeforeTime = findKeyframeBeforeTime;
@@ -1,6 +1,10 @@
1
- import type { ParserState } from '../../state/parser-state';
1
+ import type { BufferIterator } from '../../iterator/buffer-iterator';
2
+ import type { LogLevel } from '../../log';
2
3
  import type { IsoBaseMediaBox } from './base-media-box';
3
- export declare const getIsoBaseMediaChildren: ({ state, size, }: {
4
- state: ParserState;
4
+ import type { OnlyIfMoovAtomExpected } from './process-box';
5
+ export declare const getIsoBaseMediaChildren: ({ size, iterator, logLevel, onlyIfMoovAtomExpected, }: {
5
6
  size: number;
7
+ iterator: BufferIterator;
8
+ logLevel: LogLevel;
9
+ onlyIfMoovAtomExpected: OnlyIfMoovAtomExpected | null;
6
10
  }) => Promise<IsoBaseMediaBox[]>;
@@ -2,12 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getIsoBaseMediaChildren = void 0;
4
4
  const process_box_1 = require("./process-box");
5
- const getIsoBaseMediaChildren = async ({ state, size, }) => {
5
+ const getIsoBaseMediaChildren = async ({ size, iterator, logLevel, onlyIfMoovAtomExpected, }) => {
6
6
  const boxes = [];
7
- const { iterator } = state;
8
7
  const initial = iterator.counter.getOffset();
9
8
  while (iterator.counter.getOffset() < size + initial) {
10
- const parsed = await (0, process_box_1.processBox)(state);
9
+ const parsed = await (0, process_box_1.processBox)({
10
+ iterator,
11
+ logLevel,
12
+ onlyIfMoovAtomExpected,
13
+ onlyIfMdatAtomExpected: null,
14
+ });
11
15
  if (!parsed) {
12
16
  throw new Error('Expected box');
13
17
  }
@@ -6,14 +6,19 @@ const get_sample_positions_from_track_1 = require("./get-sample-positions-from-t
6
6
  const traversal_1 = require("./traversal");
7
7
  const getKeyframesFromIsoBaseMedia = (state) => {
8
8
  const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state);
9
- const structure = state.getIsoStructure();
10
- const moofBox = (0, traversal_1.getMoofBoxes)(structure.boxes);
9
+ const structure = state.structure.getIsoStructure();
10
+ const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
11
+ const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure);
11
12
  const allSamples = videoTracks.map((t) => {
12
13
  const { timescale: ts } = t;
13
- const samplePositions = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
14
+ const { samplePositions, isComplete } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
14
15
  trakBox: t.trakBox,
15
- moofBoxes: moofBox,
16
+ moofBoxes,
17
+ tfraBoxes,
16
18
  });
19
+ if (!isComplete) {
20
+ return [];
21
+ }
17
22
  const keyframes = samplePositions
18
23
  .filter((k) => {
19
24
  return k.isKeyframe;
@@ -0,0 +1,9 @@
1
+ import type { MediaParserController } from '../../controller/media-parser-controller';
2
+ import type { ParseMediaSrc } from '../../options';
3
+ import type { ReaderInterface } from '../../readers/reader';
4
+ export declare const getMfraAtom: ({ src, contentLength, readerInterface, controller, }: {
5
+ src: ParseMediaSrc;
6
+ contentLength: number;
7
+ readerInterface: ReaderInterface;
8
+ controller: MediaParserController;
9
+ }) => Promise<import("../../readers/reader").Reader>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMfraAtom = void 0;
4
+ const getMfraAtom = async ({ src, contentLength, readerInterface, controller, }) => {
5
+ const result = await readerInterface.read({
6
+ controller,
7
+ range: [contentLength - 16, contentLength - 1],
8
+ src,
9
+ });
10
+ return result.reader;
11
+ };
12
+ exports.getMfraAtom = getMfraAtom;
@@ -0,0 +1,13 @@
1
+ import type { MediaParserController } from '../../controller/media-parser-controller';
2
+ import type { LogLevel } from '../../log';
3
+ import type { ParseMediaSrc } from '../../options';
4
+ import type { ReaderInterface } from '../../readers/reader';
5
+ import type { IsoBaseMediaBox } from './base-media-box';
6
+ export type MfraSeekingBoxOptions = {
7
+ contentLength: number;
8
+ controller: MediaParserController;
9
+ readerInterface: ReaderInterface;
10
+ src: ParseMediaSrc;
11
+ logLevel: LogLevel;
12
+ };
13
+ export declare const getMfraSeekingBox: ({ contentLength, controller, readerInterface, src, logLevel, }: MfraSeekingBoxOptions) => Promise<IsoBaseMediaBox[] | null>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMfraSeekingBox = void 0;
4
+ const get_children_1 = require("./get-children");
5
+ const get_mfra_atom_1 = require("./mfra/get-mfra-atom");
6
+ const get_mfro_atom_1 = require("./mfra/get-mfro-atom");
7
+ const getMfraSeekingBox = async ({ contentLength, controller, readerInterface, src, logLevel, }) => {
8
+ const parentSize = await (0, get_mfro_atom_1.getMfroAtom)({
9
+ contentLength,
10
+ controller,
11
+ readerInterface,
12
+ src,
13
+ });
14
+ if (!parentSize) {
15
+ return null;
16
+ }
17
+ const mfraAtom = await (0, get_mfra_atom_1.getMfraAtom)({
18
+ contentLength,
19
+ controller,
20
+ readerInterface,
21
+ src,
22
+ parentSize,
23
+ });
24
+ mfraAtom.discard(8);
25
+ return (0, get_children_1.getIsoBaseMediaChildren)({
26
+ iterator: mfraAtom,
27
+ logLevel,
28
+ size: parentSize - 8,
29
+ onlyIfMoovAtomExpected: null,
30
+ });
31
+ };
32
+ exports.getMfraSeekingBox = getMfraSeekingBox;
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMoovAtom = void 0;
4
+ const buffer_iterator_1 = require("../../iterator/buffer-iterator");
4
5
  const log_1 = require("../../log");
5
6
  const register_track_1 = require("../../register-track");
6
- const parser_state_1 = require("../../state/parser-state");
7
+ const can_skip_tracks_1 = require("../../state/can-skip-tracks");
8
+ const has_tracks_section_1 = require("../../state/has-tracks-section");
9
+ const structure_1 = require("../../state/structure");
10
+ const work_on_seek_request_1 = require("../../work-on-seek-request");
7
11
  const process_box_1 = require("./process-box");
8
12
  const traversal_1 = require("./traversal");
9
- // TODO: await parseMedia({fields: {moovAtom: true}) would be a nicer API
10
13
  const getMoovAtom = async ({ endOfMdat, state, }) => {
11
14
  const headerSegment = state.mp4HeaderSegment;
12
15
  if (headerSegment) {
@@ -23,61 +26,74 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
23
26
  range: endOfMdat,
24
27
  controller: state.controller,
25
28
  });
26
- const childState = (0, parser_state_1.makeParserState)({
27
- hasAudioTrackHandlers: false,
28
- hasVideoTrackHandlers: false,
29
- controller: state.controller,
30
- onAudioTrack: state.onAudioTrack
31
- ? async ({ track, container }) => {
32
- await (0, register_track_1.registerAudioTrack)({ state, track, container });
33
- return null;
34
- }
35
- : null,
36
- onVideoTrack: state.onVideoTrack
37
- ? async ({ track, container }) => {
38
- await (0, register_track_1.registerVideoTrack)({ state, track, container });
39
- return null;
40
- }
41
- : null,
42
- contentLength: state.contentLength,
43
- logLevel: state.logLevel,
44
- mode: 'query',
45
- readerInterface: state.readerInterface,
46
- src: state.src,
47
- onDiscardedData: null,
48
- selectM3uStreamFn: state.selectM3uStreamFn,
49
- selectM3uAssociatedPlaylistsFn: state.selectM3uAssociatedPlaylistsFn,
50
- mp4HeaderSegment: state.mp4HeaderSegment,
51
- callbacks: {},
52
- fieldsInReturnValue: {
53
- structure: true,
54
- },
55
- contentType: null,
56
- mimeType: null,
57
- name: '',
58
- initialReaderInstance: reader,
59
- });
29
+ const onAudioTrack = state.onAudioTrack
30
+ ? async ({ track, container }) => {
31
+ await (0, register_track_1.registerAudioTrack)({
32
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
33
+ track,
34
+ container,
35
+ logLevel: state.logLevel,
36
+ onAudioTrack: state.onAudioTrack,
37
+ registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
38
+ tracks: state.callbacks.tracks,
39
+ });
40
+ return null;
41
+ }
42
+ : null;
43
+ const onVideoTrack = state.onVideoTrack
44
+ ? async ({ track, container }) => {
45
+ await (0, register_track_1.registerVideoTrack)({
46
+ workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
47
+ track,
48
+ container,
49
+ logLevel: state.logLevel,
50
+ onVideoTrack: state.onVideoTrack,
51
+ registerVideoSampleCallback: state.callbacks.registerVideoSampleCallback,
52
+ tracks: state.callbacks.tracks,
53
+ });
54
+ return null;
55
+ }
56
+ : null;
57
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array([]), state.contentLength);
60
58
  while (true) {
61
59
  const result = await reader.reader.read();
62
60
  if (result.value) {
63
- childState.iterator.addData(result.value);
61
+ iterator.addData(result.value);
64
62
  }
65
63
  if (result.done) {
66
64
  break;
67
65
  }
68
66
  }
69
67
  const boxes = [];
68
+ const canSkipTracksState = (0, can_skip_tracks_1.makeCanSkipTracksState)({
69
+ hasAudioTrackHandlers: false,
70
+ fields: { structure: true },
71
+ hasVideoTrackHandlers: false,
72
+ structure: (0, structure_1.structureState)(),
73
+ });
74
+ const tracksState = (0, has_tracks_section_1.makeTracksSectionState)(canSkipTracksState, state.src);
70
75
  while (true) {
71
- const box = await (0, process_box_1.processBox)(childState);
76
+ const box = await (0, process_box_1.processBox)({
77
+ iterator,
78
+ logLevel: state.logLevel,
79
+ onlyIfMoovAtomExpected: {
80
+ tracks: tracksState,
81
+ isoState: null,
82
+ workOnSeekRequestOptions: null,
83
+ onAudioTrack,
84
+ onVideoTrack,
85
+ registerVideoSampleCallback: () => Promise.resolve(),
86
+ registerAudioSampleCallback: () => Promise.resolve(),
87
+ },
88
+ onlyIfMdatAtomExpected: null,
89
+ });
72
90
  if (box) {
73
91
  boxes.push(box);
74
92
  }
75
- if (childState.iterator.counter.getOffset() + endOfMdat >
76
- state.contentLength) {
93
+ if (iterator.counter.getOffset() + endOfMdat > state.contentLength) {
77
94
  throw new Error('Read past end of file');
78
95
  }
79
- if (childState.iterator.counter.getOffset() + endOfMdat ===
80
- state.contentLength) {
96
+ if (iterator.counter.getOffset() + endOfMdat === state.contentLength) {
81
97
  break;
82
98
  }
83
99
  }
@@ -0,0 +1,5 @@
1
+ import type { SamplePosition } from '../../get-sample-positions';
2
+ export declare const getSamplePositionBounds: (samplePositions: SamplePosition[], timescale: number) => {
3
+ min: number;
4
+ max: number;
5
+ };