@remotion/media-parser 4.0.285 → 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 (279) hide show
  1. package/dist/aac-codecprivate.d.ts +1 -1
  2. package/dist/combine-uint8-arrays.d.ts +1 -1
  3. package/dist/containers/aac/parse-aac.js +0 -3
  4. package/dist/containers/avc/create-sps-pps-data.d.ts +1 -1
  5. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  6. package/dist/containers/flac/parse-flac-frame.js +0 -2
  7. package/dist/containers/flac/parse-streaminfo.js +0 -2
  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 +4 -3
  11. package/dist/containers/iso-base-media/get-keyframes.js +1 -1
  12. package/dist/containers/iso-base-media/get-moov-atom.js +0 -4
  13. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -2
  14. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +15 -0
  15. package/dist/containers/iso-base-media/{get-seeking-from-mp4.js → get-seeking-byte.js} +16 -2
  16. package/dist/containers/iso-base-media/mdat/mdat.js +6 -6
  17. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +3 -3
  18. package/dist/containers/iso-base-media/parse-boxes.js +0 -2
  19. package/dist/containers/iso-base-media/process-box.d.ts +0 -2
  20. package/dist/containers/iso-base-media/process-box.js +6 -6
  21. package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts} +8 -3
  22. package/dist/containers/iso-base-media/seeking-hints.js +52 -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 +24 -20
  26. package/dist/containers/m3u/run-over-m3u.js +0 -3
  27. package/dist/containers/mp3/parse-mpeg-header.js +0 -3
  28. package/dist/containers/riff/expect-riff-box.js +0 -2
  29. package/dist/containers/riff/parse-movi.js +0 -3
  30. package/dist/containers/riff/parse-video-section.js +1 -1
  31. package/dist/containers/transport-stream/adts-header.d.ts +1 -1
  32. package/dist/containers/transport-stream/discard-rest-of-packet.d.ts +1 -1
  33. package/dist/containers/transport-stream/find-separator.d.ts +17 -1
  34. package/dist/containers/transport-stream/find-separator.js +6 -5
  35. package/dist/containers/transport-stream/handle-aac-packet.d.ts +10 -3
  36. package/dist/containers/transport-stream/handle-aac-packet.js +24 -16
  37. package/dist/containers/transport-stream/handle-avc-packet.d.ts +10 -3
  38. package/dist/containers/transport-stream/handle-avc-packet.js +29 -17
  39. package/dist/containers/transport-stream/parse-packet.d.ts +8 -4
  40. package/dist/containers/transport-stream/parse-packet.js +15 -16
  41. package/dist/containers/transport-stream/parse-pes.d.ts +5 -1
  42. package/dist/containers/transport-stream/parse-pes.js +4 -3
  43. package/dist/containers/transport-stream/parse-stream-packet.d.ts +6 -6
  44. package/dist/containers/transport-stream/parse-stream-packet.js +10 -115
  45. package/dist/containers/transport-stream/parse-transport-stream.js +15 -3
  46. package/dist/containers/transport-stream/process-stream-buffers.d.ts +26 -6
  47. package/dist/containers/transport-stream/process-stream-buffers.js +77 -12
  48. package/dist/containers/transport-stream/seeking-hints.d.ts +9 -0
  49. package/dist/containers/transport-stream/seeking-hints.js +26 -0
  50. package/dist/containers/transport-stream/traversal.d.ts +3 -1
  51. package/dist/containers/transport-stream/traversal.js +10 -2
  52. package/dist/containers/wav/get-seeking-byte.d.ts +2 -2
  53. package/dist/containers/wav/get-seeking-byte.js +2 -2
  54. package/dist/containers/wav/parse-fmt.js +0 -2
  55. package/dist/containers/wav/parse-media-section.js +0 -2
  56. package/dist/containers/wav/seeking-hints.d.ts +12 -0
  57. package/dist/containers/wav/seeking-hints.js +25 -0
  58. package/dist/containers/webm/get-byte-for-cues.d.ts +5 -0
  59. package/dist/containers/webm/get-byte-for-cues.js +33 -0
  60. package/dist/containers/webm/get-ready-tracks.d.ts +9 -4
  61. package/dist/containers/webm/get-ready-tracks.js +6 -6
  62. package/dist/containers/webm/get-sample-from-block.d.ts +3 -2
  63. package/dist/containers/webm/get-sample-from-block.js +9 -8
  64. package/dist/containers/webm/parse-ebml.d.ts +5 -4
  65. package/dist/containers/webm/parse-ebml.js +29 -34
  66. package/dist/containers/webm/parse-webm-header.js +14 -2
  67. package/dist/containers/webm/seek/fetch-web-cues.d.ts +12 -0
  68. package/dist/containers/webm/seek/fetch-web-cues.js +32 -0
  69. package/dist/containers/webm/seek/format-cues.d.ts +8 -0
  70. package/dist/containers/webm/seek/format-cues.js +42 -0
  71. package/dist/containers/webm/seek/get-seeking-byte.d.ts +12 -0
  72. package/dist/containers/webm/seek/get-seeking-byte.js +100 -0
  73. package/dist/containers/webm/seek/seeking-hints.d.ts +10 -0
  74. package/dist/containers/webm/seek/seeking-hints.js +28 -0
  75. package/dist/containers/webm/segments/all-segments.d.ts +1 -0
  76. package/dist/containers/webm/segments.d.ts +10 -4
  77. package/dist/containers/webm/segments.js +30 -12
  78. package/dist/containers/webm/state-for-processing.d.ts +15 -0
  79. package/dist/containers/webm/state-for-processing.js +14 -0
  80. package/dist/controller/media-parser-controller.d.ts +3 -0
  81. package/dist/controller/media-parser-controller.js +15 -0
  82. package/dist/controller/seek-signal.d.ts +2 -2
  83. package/dist/download-and-parse-media.js +3 -1
  84. package/dist/emit-audio-sample.d.ts +2 -5
  85. package/dist/emit-audio-sample.js +2 -5
  86. package/dist/emit-available-info.js +1 -1
  87. package/dist/esm/index.mjs +3859 -2963
  88. package/dist/esm/node-writer.mjs +1 -2
  89. package/dist/esm/node.mjs +1 -2
  90. package/dist/esm/server-worker.mjs +46 -1
  91. package/dist/esm/universal.mjs +3 -5
  92. package/dist/esm/web.mjs +2 -3
  93. package/dist/esm/worker-server-entry.mjs +2681 -1756
  94. package/dist/esm/worker-web-entry.mjs +2680 -1754
  95. package/dist/esm/worker.mjs +46 -1
  96. package/dist/file-types/detect-file-type.js +3 -1
  97. package/dist/{forward-controller.d.ts → forward-controller-pause-resume-abort.d.ts} +1 -1
  98. package/dist/{forward-controller.js → forward-controller-pause-resume-abort.js} +3 -3
  99. package/dist/get-audio-codec.d.ts +2 -1
  100. package/dist/get-audio-codec.js +17 -3
  101. package/dist/get-dimensions.js +1 -1
  102. package/dist/get-duration.js +3 -2
  103. package/dist/get-fps.js +1 -0
  104. package/dist/get-is-hdr.js +2 -2
  105. package/dist/get-keyframes.js +1 -1
  106. package/dist/{get-sample-positions-from-lpcm.d.ts → get-sample-positions-from-mp4.d.ts} +1 -1
  107. package/dist/{get-sample-positions-from-lpcm.js → get-sample-positions-from-mp4.js} +3 -3
  108. package/dist/{get-seeking-info.d.ts → get-seeking-byte.d.ts} +10 -9
  109. package/dist/get-seeking-byte.js +51 -0
  110. package/dist/get-seeking-hints.d.ts +19 -0
  111. package/dist/get-seeking-hints.js +35 -0
  112. package/dist/get-tracks.d.ts +4 -4
  113. package/dist/get-tracks.js +14 -8
  114. package/dist/get-video-codec.js +2 -2
  115. package/dist/has-all-info.js +1 -1
  116. package/dist/index.d.ts +74 -21
  117. package/dist/init-video.js +4 -3
  118. package/dist/internal-parse-media.js +18 -2
  119. package/dist/iterator/buffer-iterator.d.ts +3 -3
  120. package/dist/iterator/buffer-iterator.js +3 -4
  121. package/dist/iterator/buffer-manager.d.ts +3 -3
  122. package/dist/log.d.ts +5 -5
  123. package/dist/metadata/metadata-from-iso.js +1 -0
  124. package/dist/options.d.ts +3 -0
  125. package/dist/parse-loop.js +0 -3
  126. package/dist/parse-media-on-worker-entry.d.ts +1 -1
  127. package/dist/parse-media-on-worker-entry.js +51 -1
  128. package/dist/parse-media.js +3 -1
  129. package/dist/readers/from-web-file.js +1 -1
  130. package/dist/register-track.d.ts +2 -5
  131. package/dist/register-track.js +2 -10
  132. package/dist/samples-from-moof.d.ts +2 -2
  133. package/dist/samples-from-moof.js +5 -8
  134. package/dist/seek-backwards.js +2 -3
  135. package/dist/seeking-hints.d.ts +39 -0
  136. package/dist/set-seeking-hints.d.ts +6 -0
  137. package/dist/set-seeking-hints.js +27 -0
  138. package/dist/state/has-tracks-section.js +3 -1
  139. package/dist/state/iso-base-media/cached-sample-positions.d.ts +1 -1
  140. package/dist/state/iso-base-media/cached-sample-positions.js +1 -1
  141. package/dist/state/iso-base-media/iso-state.d.ts +18 -2
  142. package/dist/state/iso-base-media/iso-state.js +4 -0
  143. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -0
  144. package/dist/state/iso-base-media/lazy-mfra-load.js +13 -0
  145. package/dist/state/iso-base-media/moov-box.d.ts +7 -2
  146. package/dist/state/iso-base-media/moov-box.js +1 -1
  147. package/dist/state/iso-base-media/precomputed-moof.d.ts +11 -0
  148. package/dist/state/iso-base-media/precomputed-moof.js +28 -0
  149. package/dist/state/iso-base-media/precomputed-tfra.d.ts +6 -0
  150. package/dist/state/iso-base-media/precomputed-tfra.js +17 -0
  151. package/dist/state/keyframes.d.ts +2 -0
  152. package/dist/state/keyframes.js +17 -6
  153. package/dist/state/matroska/lazy-cues-fetch.d.ts +25 -0
  154. package/dist/state/matroska/lazy-cues-fetch.js +72 -0
  155. package/dist/state/matroska/webm.d.ts +53 -0
  156. package/dist/state/{webm.js → matroska/webm.js} +27 -7
  157. package/dist/state/parser-state.d.ts +64 -11
  158. package/dist/state/parser-state.js +7 -6
  159. package/dist/state/sample-callbacks.d.ts +1 -1
  160. package/dist/state/sample-callbacks.js +9 -9
  161. package/dist/{readers/state → state/samples-observed}/slow-duration-fps.d.ts +3 -3
  162. package/dist/state/samples-observed/slow-duration-fps.js +89 -0
  163. package/dist/state/seek-infinite-loop.js +12 -2
  164. package/dist/state/transport-stream/observed-pes-header.d.ts +15 -0
  165. package/dist/state/transport-stream/observed-pes-header.js +39 -0
  166. package/dist/state/transport-stream/pts-start-offset.d.ts +8 -0
  167. package/dist/state/transport-stream/{start-offset.js → pts-start-offset.js} +4 -4
  168. package/dist/state/transport-stream/transport-stream.d.ts +11 -1
  169. package/dist/state/transport-stream/transport-stream.js +4 -2
  170. package/dist/state/video-section.js +14 -2
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.js +1 -1
  173. package/dist/with-resolvers.d.ts +5 -0
  174. package/dist/work-on-seek-request.d.ts +8 -0
  175. package/dist/work-on-seek-request.js +31 -10
  176. package/dist/worker/{forward-controller.js → forward-controller-to-worker.js} +17 -0
  177. package/dist/worker/serialize-error.d.ts +6 -1
  178. package/dist/worker/serialize-error.js +2 -1
  179. package/dist/worker/worker-types.d.ts +12 -2
  180. package/dist/worker-server.js +16 -4
  181. package/dist/worker.d.ts +0 -1
  182. package/package.json +4 -4
  183. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +0 -9
  184. package/dist/containers/iso-base-media/get-mfra-atom.js +0 -12
  185. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -11
  186. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +0 -25
  187. package/dist/containers/iso-base-media/mfra/mfra.d.ts +0 -2
  188. package/dist/containers/iso-base-media/mfra/mfra.js +0 -11
  189. package/dist/containers/transport-stream/next-pes-header-store.d.ts +0 -6
  190. package/dist/containers/transport-stream/next-pes-header-store.js +0 -18
  191. package/dist/containers/transport-stream/start-offset.d.ts +0 -4
  192. package/dist/containers/transport-stream/start-offset.js +0 -13
  193. package/dist/containers/wav/get-seeking-info.d.ts +0 -7
  194. package/dist/containers/wav/get-seeking-info.js +0 -20
  195. package/dist/containers/wav/parse-video-section.d.ts +0 -5
  196. package/dist/containers/wav/parse-video-section.js +0 -41
  197. package/dist/emitter.d.ts +0 -33
  198. package/dist/emitter.js +0 -65
  199. package/dist/get-seeking-info.js +0 -48
  200. package/dist/media-parser-controller.d.ts +0 -21
  201. package/dist/media-parser-controller.js +0 -38
  202. package/dist/pause-signal.d.ts +0 -11
  203. package/dist/pause-signal.js +0 -38
  204. package/dist/readers/state/aac-state.d.ts +0 -13
  205. package/dist/readers/state/aac-state.js +0 -17
  206. package/dist/readers/state/can-skip-tracks.d.ts +0 -16
  207. package/dist/readers/state/can-skip-tracks.js +0 -60
  208. package/dist/readers/state/current-reader.d.ts +0 -6
  209. package/dist/readers/state/current-reader.js +0 -13
  210. package/dist/readers/state/emitted-fields.d.ts +0 -1
  211. package/dist/readers/state/emitted-fields.js +0 -37
  212. package/dist/readers/state/flac-state.d.ts +0 -4
  213. package/dist/readers/state/flac-state.js +0 -13
  214. package/dist/readers/state/has-tracks-section.d.ts +0 -14
  215. package/dist/readers/state/has-tracks-section.js +0 -37
  216. package/dist/readers/state/images.d.ts +0 -9
  217. package/dist/readers/state/images.js +0 -14
  218. package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +0 -12
  219. package/dist/readers/state/iso-base-media/cached-sample-positions.js +0 -46
  220. package/dist/readers/state/iso-base-media/iso-state.d.ts +0 -24
  221. package/dist/readers/state/iso-base-media/iso-state.js +0 -20
  222. package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +0 -13
  223. package/dist/readers/state/iso-base-media/lazy-mfra-load.js +0 -29
  224. package/dist/readers/state/iso-base-media/moov-box.d.ts +0 -5
  225. package/dist/readers/state/iso-base-media/moov-box.js +0 -13
  226. package/dist/readers/state/keyframes.d.ts +0 -6
  227. package/dist/readers/state/keyframes.js +0 -15
  228. package/dist/readers/state/m3u-state.d.ts +0 -44
  229. package/dist/readers/state/m3u-state.js +0 -124
  230. package/dist/readers/state/may-skip-video-data.d.ts +0 -4
  231. package/dist/readers/state/may-skip-video-data.js +0 -18
  232. package/dist/readers/state/mp3.d.ts +0 -15
  233. package/dist/readers/state/mp3.js +0 -19
  234. package/dist/readers/state/need-samples-for-fields.d.ts +0 -6
  235. package/dist/readers/state/need-samples-for-fields.js +0 -39
  236. package/dist/readers/state/parser-state.d.ts +0 -252
  237. package/dist/readers/state/parser-state.js +0 -124
  238. package/dist/readers/state/riff.d.ts +0 -10
  239. package/dist/readers/state/riff.js +0 -32
  240. package/dist/readers/state/sample-callbacks.d.ts +0 -44
  241. package/dist/readers/state/sample-callbacks.js +0 -118
  242. package/dist/readers/state/seek-infinite-loop.d.ts +0 -5
  243. package/dist/readers/state/seek-infinite-loop.js +0 -22
  244. package/dist/readers/state/slow-duration-fps.js +0 -86
  245. package/dist/readers/state/structure.d.ts +0 -15
  246. package/dist/readers/state/structure.js +0 -78
  247. package/dist/readers/state/timings.d.ts +0 -8
  248. package/dist/readers/state/timings.js +0 -13
  249. package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +0 -6
  250. package/dist/readers/state/transport-stream/last-emitted-sample.js +0 -16
  251. package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +0 -6
  252. package/dist/readers/state/transport-stream/next-pes-header-store.js +0 -18
  253. package/dist/readers/state/transport-stream/start-offset.d.ts +0 -4
  254. package/dist/readers/state/transport-stream/start-offset.js +0 -13
  255. package/dist/readers/state/transport-stream/transport-stream.d.ts +0 -19
  256. package/dist/readers/state/transport-stream/transport-stream.js +0 -25
  257. package/dist/readers/state/video-section.d.ts +0 -33
  258. package/dist/readers/state/video-section.js +0 -65
  259. package/dist/readers/state/webm.d.ts +0 -28
  260. package/dist/readers/state/webm.js +0 -109
  261. package/dist/seek-signal.d.ts +0 -19
  262. package/dist/seek-signal.js +0 -24
  263. package/dist/seeking-info.d.ts +0 -18
  264. package/dist/server-worker.module.d.ts +0 -2
  265. package/dist/server-worker.module.js +0 -12
  266. package/dist/state/slow-duration-fps.d.ts +0 -11
  267. package/dist/state/slow-duration-fps.js +0 -86
  268. package/dist/state/transport-stream/start-offset.d.ts +0 -4
  269. package/dist/state/transport-stream.d.ts +0 -8
  270. package/dist/state/transport-stream.js +0 -11
  271. package/dist/state/uml.d.ts +0 -32
  272. package/dist/state/uml.js +0 -52
  273. package/dist/state/webm.d.ts +0 -30
  274. package/dist/state/work-on-seek-request-options.d.ts +0 -3
  275. package/dist/state/work-on-seek-request-options.js +0 -26
  276. package/dist/worker.module.d.ts +0 -4
  277. package/dist/worker.module.js +0 -12
  278. /package/dist/{seeking-info.js → seeking-hints.js} +0 -0
  279. /package/dist/worker/{forward-controller.d.ts → forward-controller-to-worker.d.ts} +0 -0
@@ -4,7 +4,7 @@ export declare const createAacCodecPrivate: ({ audioObjectType, sampleRate, chan
4
4
  sampleRate: number;
5
5
  channelConfiguration: number;
6
6
  codecPrivate: Uint8Array | null;
7
- }) => Uint8Array;
7
+ }) => Uint8Array<ArrayBufferLike>;
8
8
  export declare const parseAacCodecPrivate: (bytes: Uint8Array) => {
9
9
  audioObjectType: number;
10
10
  sampleRate: number;
@@ -1 +1 @@
1
- export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array;
1
+ export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array<ArrayBufferLike>;
@@ -5,7 +5,6 @@ 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");
9
8
  const parseAac = async (state) => {
10
9
  const { iterator } = state;
11
10
  const startOffset = iterator.counter.getOffset();
@@ -49,7 +48,6 @@ const parseAac = async (state) => {
49
48
  const data = iterator.getSlice(frameLength);
50
49
  if (state.callbacks.tracks.getTracks().length === 0) {
51
50
  await (0, register_track_1.registerAudioTrack)({
52
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
53
51
  container: 'aac',
54
52
  track: {
55
53
  codec: (0, aac_codecprivate_1.mapAudioObjectTypeToCodecString)(audioObjectType),
@@ -90,7 +88,6 @@ const parseAac = async (state) => {
90
88
  },
91
89
  timescale: 1,
92
90
  }),
93
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
94
91
  callbacks: state.callbacks,
95
92
  });
96
93
  return Promise.resolve(null);
@@ -1,2 +1,2 @@
1
1
  import type { SpsAndPps } from '../../state/parser-state';
2
- export declare const createSpsPpsData: (avc1Profile: SpsAndPps) => Uint8Array;
2
+ export declare const createSpsPpsData: (avc1Profile: SpsAndPps) => Uint8Array<ArrayBufferLike>;
@@ -1,2 +1,2 @@
1
1
  import type { BufferIterator } from '../../iterator/buffer-iterator';
2
- export declare const getChannelCount: (iterator: BufferIterator) => 5 | 1 | 2 | 3 | 4 | 6 | 7 | 8;
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 2 | 8 | 1 | 7 | 3 | 4 | 5 | 6;
@@ -4,7 +4,6 @@ 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");
8
7
  const get_block_size_1 = require("./get-block-size");
9
8
  const get_channel_count_1 = require("./get-channel-count");
10
9
  const get_sample_rate_1 = require("./get-sample-rate");
@@ -98,7 +97,6 @@ const emitSample = async ({ state, data, offset, }) => {
98
97
  },
99
98
  timescale: 1,
100
99
  }),
101
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
102
100
  callbacks: state.callbacks,
103
101
  });
104
102
  iterator.destroy();
@@ -2,7 +2,6 @@
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");
6
5
  const parseStreamInfo = async ({ iterator, state, }) => {
7
6
  const counter = iterator.counter.getOffset();
8
7
  const minimumBlockSize = iterator.getUint16();
@@ -34,7 +33,6 @@ const parseStreamInfo = async ({ iterator, state, }) => {
34
33
  state.structure.getFlacStructure().boxes.push(flacStreamInfo);
35
34
  await (0, register_track_1.registerAudioTrack)({
36
35
  container: 'flac',
37
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
38
36
  track: {
39
37
  codec: 'flac',
40
38
  type: 'audio',
@@ -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;
@@ -4,13 +4,14 @@ exports.collectSamplePositionsFromTrak = void 0;
4
4
  const get_audio_codec_1 = require("../../get-audio-codec");
5
5
  const get_fps_1 = require("../../get-fps");
6
6
  const get_sample_positions_1 = require("../../get-sample-positions");
7
- const get_sample_positions_from_lpcm_1 = require("../../get-sample-positions-from-lpcm");
7
+ const get_sample_positions_from_mp4_1 = require("../../get-sample-positions-from-mp4");
8
8
  const traversal_1 = require("./traversal");
9
9
  const collectSamplePositionsFromTrak = (trakBox) => {
10
10
  const isLpcm = (0, get_audio_codec_1.isLpcmAudioCodec)(trakBox);
11
11
  const timescaleAndDuration = (0, get_fps_1.getTimescaleAndDuration)(trakBox);
12
- if (isLpcm) {
13
- return (0, get_sample_positions_from_lpcm_1.getSamplePositionsFromLpcm)(trakBox);
12
+ const isIn24 = (0, get_audio_codec_1.isIn24AudioCodec)(trakBox);
13
+ if (isLpcm || isIn24) {
14
+ return (0, get_sample_positions_from_mp4_1.getGroupedSamplesPositionsFromMp4)(trakBox);
14
15
  }
15
16
  const stszBox = (0, traversal_1.getStszBox)(trakBox);
16
17
  const stcoBox = (0, traversal_1.getStcoBox)(trakBox);
@@ -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);
@@ -7,7 +7,6 @@ const register_track_1 = require("../../register-track");
7
7
  const can_skip_tracks_1 = require("../../state/can-skip-tracks");
8
8
  const has_tracks_section_1 = require("../../state/has-tracks-section");
9
9
  const structure_1 = require("../../state/structure");
10
- const work_on_seek_request_1 = require("../../work-on-seek-request");
11
10
  const process_box_1 = require("./process-box");
12
11
  const traversal_1 = require("./traversal");
13
12
  const getMoovAtom = async ({ endOfMdat, state, }) => {
@@ -29,7 +28,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
29
28
  const onAudioTrack = state.onAudioTrack
30
29
  ? async ({ track, container }) => {
31
30
  await (0, register_track_1.registerAudioTrack)({
32
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
33
31
  track,
34
32
  container,
35
33
  logLevel: state.logLevel,
@@ -43,7 +41,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
43
41
  const onVideoTrack = state.onVideoTrack
44
42
  ? async ({ track, container }) => {
45
43
  await (0, register_track_1.registerVideoTrack)({
46
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
47
44
  track,
48
45
  container,
49
46
  logLevel: state.logLevel,
@@ -79,7 +76,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
79
76
  onlyIfMoovAtomExpected: {
80
77
  tracks: tracksState,
81
78
  isoState: null,
82
- workOnSeekRequestOptions: null,
83
79
  onAudioTrack,
84
80
  onVideoTrack,
85
81
  registerVideoSampleCallback: () => Promise.resolve(),
@@ -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,
@@ -8,7 +8,6 @@ const skip_1 = require("../../../skip");
8
8
  const cached_sample_positions_1 = require("../../../state/iso-base-media/cached-sample-positions");
9
9
  const may_skip_video_data_1 = require("../../../state/may-skip-video-data");
10
10
  const video_section_1 = require("../../../state/video-section");
11
- const work_on_seek_request_1 = require("../../../work-on-seek-request");
12
11
  const get_moov_atom_1 = require("../get-moov-atom");
13
12
  const parseMdatSection = async (state) => {
14
13
  const mediaSection = (0, video_section_1.getCurrentMediaSection)({
@@ -23,13 +22,16 @@ const parseMdatSection = async (state) => {
23
22
  if ((0, may_skip_video_data_1.maySkipVideoData)({ state })) {
24
23
  return (0, skip_1.makeSkip)(endOfMdat);
25
24
  }
26
- const alreadyHas = (0, get_tracks_1.getHasTracks)(state);
27
- if (!alreadyHas) {
25
+ const alreadyHasMoov = (0, get_tracks_1.getHasTracks)(state, true);
26
+ if (!alreadyHasMoov) {
28
27
  const moov = await (0, get_moov_atom_1.getMoovAtom)({
29
28
  endOfMdat,
30
29
  state,
31
30
  });
32
- state.iso.moov.setMoovBox(moov);
31
+ state.iso.moov.setMoovBox({
32
+ moovBox: moov,
33
+ precomputed: false,
34
+ });
33
35
  state.callbacks.tracks.setIsDone(state.logLevel);
34
36
  state.structure.getIsoStructure().boxes.push(moov);
35
37
  return (0, exports.parseMdatSection)(state);
@@ -79,7 +81,6 @@ const parseMdatSection = async (state) => {
79
81
  },
80
82
  timescale: samplesWithIndex.track.timescale,
81
83
  }),
82
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
83
84
  callbacks: state.callbacks,
84
85
  });
85
86
  }
@@ -112,7 +113,6 @@ const parseMdatSection = async (state) => {
112
113
  },
113
114
  timescale: samplesWithIndex.track.timescale,
114
115
  }),
115
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
116
116
  callbacks: state.callbacks,
117
117
  });
118
118
  }
@@ -28,12 +28,12 @@ export declare const getMfraAtom: ({ src, contentLength, readerInterface, contro
28
28
  leb128: () => number;
29
29
  removeBytesRead: (force: boolean, mode: import("../../../options").ParseMediaMode) => {
30
30
  bytesRemoved: number;
31
- removedData: Uint8Array | null;
31
+ removedData: Uint8Array<ArrayBuffer> | null;
32
32
  };
33
33
  discard: (length: number) => void;
34
34
  getEightByteNumber: (littleEndian?: boolean) => number;
35
35
  getFourByteNumber: () => number;
36
- getSlice: (amount: number) => Uint8Array;
36
+ getSlice: (amount: number) => Uint8Array<ArrayBuffer>;
37
37
  getAtom: () => string;
38
38
  detectFileType: () => import("../../../file-types/detect-file-type").FileType;
39
39
  getPaddedFourByteNumber: () => number;
@@ -57,7 +57,7 @@ export declare const getMfraAtom: ({ src, contentLength, readerInterface, contro
57
57
  getUint(length: number): number;
58
58
  getByteString(length: number, trimTrailingZeroes: boolean): string;
59
59
  planBytes: (size: number) => {
60
- discardRest: () => Uint8Array;
60
+ discardRest: () => Uint8Array<ArrayBuffer>;
61
61
  };
62
62
  getFloat64: () => number;
63
63
  readUntilNullTerminator: () => string;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseIsoBaseMedia = void 0;
4
- const work_on_seek_request_1 = require("../../work-on-seek-request");
5
4
  const mdat_1 = require("./mdat/mdat");
6
5
  const process_box_1 = require("./process-box");
7
6
  const parseIsoBaseMedia = async (state) => {
@@ -16,7 +15,6 @@ const parseIsoBaseMedia = async (state) => {
16
15
  onlyIfMoovAtomExpected: {
17
16
  tracks: state.callbacks.tracks,
18
17
  isoState: state.iso,
19
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
20
18
  onAudioTrack: state.onAudioTrack,
21
19
  onVideoTrack: state.onVideoTrack,
22
20
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
@@ -5,12 +5,10 @@ import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
5
5
  import type { SampleCallbacks } from '../../state/sample-callbacks';
6
6
  import type { MediaSectionState } from '../../state/video-section';
7
7
  import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
8
- import type { WorkOnSeekRequestOptions } from '../../work-on-seek-request';
9
8
  import type { BoxAndNext } from './base-media-box';
10
9
  export type OnlyIfMoovAtomExpected = {
11
10
  tracks: TracksState;
12
11
  isoState: IsoBaseMediaState | null;
13
- workOnSeekRequestOptions: WorkOnSeekRequestOptions | null;
14
12
  onVideoTrack: OnVideoTrack | null;
15
13
  onAudioTrack: OnAudioTrack | null;
16
14
  registerVideoSampleCallback: SampleCallbacks['registerVideoSampleCallback'];
@@ -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;
@@ -198,7 +200,7 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
198
200
  if (!onlyIfMoovAtomExpected) {
199
201
  throw new Error('State is required');
200
202
  }
201
- const { workOnSeekRequestOptions, tracks, onAudioTrack, onVideoTrack } = onlyIfMoovAtomExpected;
203
+ const { tracks, onAudioTrack, onVideoTrack } = onlyIfMoovAtomExpected;
202
204
  const box = await (0, trak_1.parseTrak)({
203
205
  size: boxSize,
204
206
  offsetAtStart: fileOffset,
@@ -208,7 +210,6 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
208
210
  const transformedTrack = (0, make_track_1.makeBaseMediaTrack)(box);
209
211
  if (transformedTrack && transformedTrack.type === 'video') {
210
212
  await (0, register_track_1.registerVideoTrack)({
211
- workOnSeekRequestOptions,
212
213
  track: transformedTrack,
213
214
  container: 'mp4',
214
215
  logLevel,
@@ -219,7 +220,6 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
219
220
  }
220
221
  if (transformedTrack && transformedTrack.type === 'audio') {
221
222
  await (0, register_track_1.registerAudioTrack)({
222
- workOnSeekRequestOptions,
223
223
  track: transformedTrack,
224
224
  container: 'mp4',
225
225
  registerAudioSampleCallback: onlyIfMoovAtomExpected.registerAudioSampleCallback,
@@ -278,7 +278,7 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
278
278
  });
279
279
  }
280
280
  if (boxType === 'moof') {
281
- (_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();
282
282
  }
283
283
  if (boxType === 'mdia' ||
284
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);
@@ -95,6 +98,7 @@ const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uState, onA
95
98
  },
96
99
  reader: readerInterface,
97
100
  mp4HeaderSegment,
101
+ makeSamplesStartAtZero: false,
98
102
  });
99
103
  if (chunk.isHeader) {
100
104
  if (data.structure.type !== 'iso-base-media') {
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runOverM3u = void 0;
4
4
  const log_1 = require("../../log");
5
5
  const register_track_1 = require("../../register-track");
6
- const work_on_seek_request_1 = require("../../work-on-seek-request");
7
6
  const iterate_over_segment_files_1 = require("./iterate-over-segment-files");
8
7
  const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
9
8
  const tracksDone = state.m3u.getTrackDone(playlistUrl);
@@ -52,7 +51,6 @@ const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
52
51
  }
53
52
  const onAudioSample = await (0, register_track_1.registerAudioTrack)({
54
53
  container: 'm3u8',
55
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
56
54
  track: {
57
55
  ...track,
58
56
  trackId,
@@ -81,7 +79,6 @@ const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
81
79
  }
82
80
  const onVideoSample = await (0, register_track_1.registerVideoTrack)({
83
81
  container: 'm3u8',
84
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
85
82
  track: {
86
83
  ...track,
87
84
  trackId,
@@ -5,7 +5,6 @@ exports.parseMpegHeader = void 0;
5
5
  const emit_audio_sample_1 = require("../../emit-audio-sample");
6
6
  const log_1 = require("../../log");
7
7
  const register_track_1 = require("../../register-track");
8
- const work_on_seek_request_1 = require("../../work-on-seek-request");
9
8
  const get_frame_length_1 = require("./get-frame-length");
10
9
  const samples_per_mpeg_file_1 = require("./samples-per-mpeg-file");
11
10
  function getSamplingFrequency({ bits, mpegVersion, }) {
@@ -245,7 +244,6 @@ const parseMpegHeader = async ({ state, }) => {
245
244
  state.mp3Info.setMp3Info(info);
246
245
  await (0, register_track_1.registerAudioTrack)({
247
246
  container: 'mp3',
248
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
249
247
  track: {
250
248
  type: 'audio',
251
249
  codec: 'mp3',
@@ -295,7 +293,6 @@ const parseMpegHeader = async ({ state, }) => {
295
293
  trackId: 0,
296
294
  type: 'key',
297
295
  },
298
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
299
296
  callbacks: state.callbacks,
300
297
  });
301
298
  }