@remotion/media-parser 4.0.277 → 4.0.279

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 (365) hide show
  1. package/dist/aac-codecprivate.js +13 -6
  2. package/dist/add-avc-profile-to-track.js +9 -5
  3. package/dist/check-if-done.d.ts +2 -0
  4. package/dist/check-if-done.js +34 -0
  5. package/dist/combine-uint8-arrays.js +5 -1
  6. package/dist/containers/aac/parse-aac.js +27 -18
  7. package/dist/containers/aac/types.js +2 -1
  8. package/dist/containers/avc/codec-string.js +5 -1
  9. package/dist/containers/avc/color.js +9 -3
  10. package/dist/containers/avc/create-sps-pps-data.js +9 -5
  11. package/dist/containers/avc/interpret-sps.js +13 -7
  12. package/dist/containers/avc/key.js +5 -1
  13. package/dist/containers/avc/parse-avc.js +7 -3
  14. package/dist/containers/avc/sps-and-pps.js +5 -1
  15. package/dist/containers/flac/get-block-size.d.ts +1 -1
  16. package/dist/containers/flac/get-block-size.js +5 -1
  17. package/dist/containers/flac/get-channel-count.d.ts +2 -2
  18. package/dist/containers/flac/get-channel-count.js +5 -1
  19. package/dist/containers/flac/get-duration-from-flac.js +5 -1
  20. package/dist/containers/flac/get-metadata-from-flac.js +5 -1
  21. package/dist/containers/flac/get-sample-rate.d.ts +1 -1
  22. package/dist/containers/flac/get-sample-rate.js +5 -1
  23. package/dist/containers/flac/parse-flac-frame.d.ts +1 -1
  24. package/dist/containers/flac/parse-flac-frame.js +33 -23
  25. package/dist/containers/flac/parse-flac.d.ts +1 -1
  26. package/dist/containers/flac/parse-flac.js +19 -15
  27. package/dist/containers/flac/parse-header.d.ts +1 -1
  28. package/dist/containers/flac/parse-header.js +5 -1
  29. package/dist/containers/flac/parse-metadata.d.ts +1 -1
  30. package/dist/containers/flac/parse-metadata.js +5 -1
  31. package/dist/containers/flac/parse-streaminfo.d.ts +1 -1
  32. package/dist/containers/flac/parse-streaminfo.js +7 -3
  33. package/dist/containers/flac/parse-unknown-block.d.ts +1 -1
  34. package/dist/containers/flac/parse-unknown-block.js +5 -1
  35. package/dist/containers/flac/types.js +2 -1
  36. package/dist/containers/iso-base-media/base-media-box.js +2 -1
  37. package/dist/containers/iso-base-media/base-type.js +2 -1
  38. package/dist/containers/iso-base-media/esds/decoder-specific-config.d.ts +1 -1
  39. package/dist/containers/iso-base-media/esds/decoder-specific-config.js +5 -1
  40. package/dist/containers/iso-base-media/esds/esds-descriptors.d.ts +1 -1
  41. package/dist/containers/iso-base-media/esds/esds-descriptors.js +10 -5
  42. package/dist/containers/iso-base-media/esds/esds.d.ts +1 -1
  43. package/dist/containers/iso-base-media/esds/esds.js +7 -3
  44. package/dist/containers/iso-base-media/ftyp.d.ts +1 -1
  45. package/dist/containers/iso-base-media/ftyp.js +5 -1
  46. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +8 -4
  47. package/dist/containers/iso-base-media/get-children.js +7 -3
  48. package/dist/containers/iso-base-media/get-keyframes.js +11 -7
  49. package/dist/containers/iso-base-media/get-moov-atom.js +26 -16
  50. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +24 -20
  51. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +5 -0
  52. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +56 -0
  53. package/dist/containers/iso-base-media/get-video-codec-from-iso-track.js +7 -3
  54. package/dist/containers/iso-base-media/make-track.js +34 -30
  55. package/dist/containers/iso-base-media/mdat/mdat.js +47 -34
  56. package/dist/containers/iso-base-media/mdhd.d.ts +1 -1
  57. package/dist/containers/iso-base-media/mdhd.js +5 -1
  58. package/dist/containers/iso-base-media/meta/hdlr.d.ts +1 -1
  59. package/dist/containers/iso-base-media/meta/hdlr.js +5 -1
  60. package/dist/containers/iso-base-media/meta/ilst.d.ts +1 -1
  61. package/dist/containers/iso-base-media/meta/ilst.js +5 -1
  62. package/dist/containers/iso-base-media/moov/moov.js +7 -3
  63. package/dist/containers/iso-base-media/mvhd.d.ts +1 -1
  64. package/dist/containers/iso-base-media/mvhd.js +11 -7
  65. package/dist/containers/iso-base-media/parse-boxes.js +9 -5
  66. package/dist/containers/iso-base-media/parse-icc-profile.js +8 -4
  67. package/dist/containers/iso-base-media/process-box.js +67 -63
  68. package/dist/containers/iso-base-media/stsd/av1c.d.ts +1 -1
  69. package/dist/containers/iso-base-media/stsd/av1c.js +5 -1
  70. package/dist/containers/iso-base-media/stsd/avcc.d.ts +1 -1
  71. package/dist/containers/iso-base-media/stsd/avcc.js +5 -1
  72. package/dist/containers/iso-base-media/stsd/colr.d.ts +1 -1
  73. package/dist/containers/iso-base-media/stsd/colr.js +7 -3
  74. package/dist/containers/iso-base-media/stsd/ctts.d.ts +1 -1
  75. package/dist/containers/iso-base-media/stsd/ctts.js +5 -1
  76. package/dist/containers/iso-base-media/stsd/hvcc.d.ts +1 -1
  77. package/dist/containers/iso-base-media/stsd/hvcc.js +7 -3
  78. package/dist/containers/iso-base-media/stsd/keys.d.ts +1 -1
  79. package/dist/containers/iso-base-media/stsd/keys.js +5 -1
  80. package/dist/containers/iso-base-media/stsd/mebx.js +7 -3
  81. package/dist/containers/iso-base-media/stsd/pasp.d.ts +1 -1
  82. package/dist/containers/iso-base-media/stsd/pasp.js +5 -1
  83. package/dist/containers/iso-base-media/stsd/samples.js +13 -8
  84. package/dist/containers/iso-base-media/stsd/stco.d.ts +1 -1
  85. package/dist/containers/iso-base-media/stsd/stco.js +5 -1
  86. package/dist/containers/iso-base-media/stsd/stsc.d.ts +1 -1
  87. package/dist/containers/iso-base-media/stsd/stsc.js +5 -1
  88. package/dist/containers/iso-base-media/stsd/stsd.js +7 -3
  89. package/dist/containers/iso-base-media/stsd/stss.d.ts +1 -1
  90. package/dist/containers/iso-base-media/stsd/stss.js +5 -1
  91. package/dist/containers/iso-base-media/stsd/stsz.d.ts +1 -1
  92. package/dist/containers/iso-base-media/stsd/stsz.js +5 -1
  93. package/dist/containers/iso-base-media/stsd/stts.d.ts +1 -1
  94. package/dist/containers/iso-base-media/stsd/stts.js +5 -1
  95. package/dist/containers/iso-base-media/tfdt.d.ts +1 -1
  96. package/dist/containers/iso-base-media/tfdt.js +5 -1
  97. package/dist/containers/iso-base-media/tfhd.d.ts +1 -1
  98. package/dist/containers/iso-base-media/tfhd.js +5 -1
  99. package/dist/containers/iso-base-media/tkhd.d.ts +1 -1
  100. package/dist/containers/iso-base-media/tkhd.js +8 -4
  101. package/dist/containers/iso-base-media/to-date.js +5 -1
  102. package/dist/containers/iso-base-media/trak/trak.js +7 -3
  103. package/dist/containers/iso-base-media/traversal.js +57 -33
  104. package/dist/containers/iso-base-media/trun.d.ts +1 -1
  105. package/dist/containers/iso-base-media/trun.js +5 -1
  106. package/dist/containers/iso-base-media/void-box.js +2 -1
  107. package/dist/containers/m3u/after-manifest-fetch.js +15 -11
  108. package/dist/containers/m3u/fetch-m3u8-stream.js +7 -3
  109. package/dist/containers/m3u/get-chunks.js +5 -1
  110. package/dist/containers/m3u/get-duration-from-m3u.js +8 -4
  111. package/dist/containers/m3u/get-playlist.js +12 -6
  112. package/dist/containers/m3u/get-streams.js +9 -3
  113. package/dist/containers/m3u/iterate-over-segment-files.js +15 -11
  114. package/dist/containers/m3u/parse-directive.js +10 -6
  115. package/dist/containers/m3u/parse-m3u-manifest.d.ts +1 -1
  116. package/dist/containers/m3u/parse-m3u-manifest.js +7 -3
  117. package/dist/containers/m3u/parse-m3u-media-directive.js +10 -5
  118. package/dist/containers/m3u/parse-m3u.js +11 -7
  119. package/dist/containers/m3u/parse-m3u8-text.js +7 -3
  120. package/dist/containers/m3u/parse-stream-inf.js +7 -2
  121. package/dist/containers/m3u/run-over-m3u.js +13 -9
  122. package/dist/containers/m3u/sample-sorter.js +8 -4
  123. package/dist/containers/m3u/select-stream.js +11 -4
  124. package/dist/containers/m3u/types.js +2 -1
  125. package/dist/containers/mp3/get-duration.js +9 -5
  126. package/dist/containers/mp3/get-frame-length.js +7 -2
  127. package/dist/containers/mp3/get-metadata-from-mp3.js +5 -1
  128. package/dist/containers/mp3/id3-v1.d.ts +1 -1
  129. package/dist/containers/mp3/id3-v1.js +5 -1
  130. package/dist/containers/mp3/id3.js +5 -1
  131. package/dist/containers/mp3/parse-mp3.js +11 -7
  132. package/dist/containers/mp3/parse-mpeg-header.js +28 -19
  133. package/dist/containers/mp3/samples-per-mpeg-file.js +5 -1
  134. package/dist/containers/riff/expect-riff-box.js +15 -11
  135. package/dist/containers/riff/get-duration.js +12 -7
  136. package/dist/containers/riff/get-tracks-from-avi.js +28 -20
  137. package/dist/containers/riff/is-movi.d.ts +1 -1
  138. package/dist/containers/riff/is-movi.js +5 -1
  139. package/dist/containers/riff/parse-avih.d.ts +1 -1
  140. package/dist/containers/riff/parse-avih.js +5 -1
  141. package/dist/containers/riff/parse-isft.d.ts +1 -1
  142. package/dist/containers/riff/parse-isft.js +5 -1
  143. package/dist/containers/riff/parse-list-box.js +7 -3
  144. package/dist/containers/riff/parse-movi.js +45 -31
  145. package/dist/containers/riff/parse-riff-body.js +13 -9
  146. package/dist/containers/riff/parse-riff-box.js +13 -9
  147. package/dist/containers/riff/parse-riff-header.js +5 -1
  148. package/dist/containers/riff/parse-riff.js +9 -5
  149. package/dist/containers/riff/parse-strf.d.ts +1 -1
  150. package/dist/containers/riff/parse-strf.js +5 -1
  151. package/dist/containers/riff/parse-strh.d.ts +1 -1
  152. package/dist/containers/riff/parse-strh.js +7 -3
  153. package/dist/containers/riff/parse-video-section.js +11 -7
  154. package/dist/containers/riff/riff-box.js +2 -1
  155. package/dist/containers/riff/timescale.js +4 -1
  156. package/dist/containers/riff/traversal.js +15 -7
  157. package/dist/containers/transport-stream/adts-header.js +10 -6
  158. package/dist/containers/transport-stream/boxes.js +2 -1
  159. package/dist/containers/transport-stream/discard-rest-of-packet.d.ts +1 -1
  160. package/dist/containers/transport-stream/discard-rest-of-packet.js +7 -2
  161. package/dist/containers/transport-stream/find-separator.js +4 -1
  162. package/dist/containers/transport-stream/get-tracks.js +16 -10
  163. package/dist/containers/transport-stream/handle-aac-packet.js +21 -12
  164. package/dist/containers/transport-stream/handle-avc-packet.js +31 -22
  165. package/dist/containers/transport-stream/next-pes-header-store.js +5 -1
  166. package/dist/containers/transport-stream/parse-packet.js +17 -13
  167. package/dist/containers/transport-stream/parse-pat.d.ts +1 -1
  168. package/dist/containers/transport-stream/parse-pat.js +10 -5
  169. package/dist/containers/transport-stream/parse-pes.d.ts +1 -1
  170. package/dist/containers/transport-stream/parse-pes.js +5 -1
  171. package/dist/containers/transport-stream/parse-pmt.d.ts +1 -1
  172. package/dist/containers/transport-stream/parse-pmt.js +7 -3
  173. package/dist/containers/transport-stream/parse-stream-packet.js +17 -13
  174. package/dist/containers/transport-stream/parse-transport-stream.js +9 -5
  175. package/dist/containers/transport-stream/process-stream-buffers.js +17 -12
  176. package/dist/containers/transport-stream/traversal.js +10 -4
  177. package/dist/containers/wav/get-duration-from-wav.js +8 -3
  178. package/dist/containers/wav/get-metadata-from-wav.js +5 -1
  179. package/dist/containers/wav/parse-data.js +9 -5
  180. package/dist/containers/wav/parse-fmt.js +7 -3
  181. package/dist/containers/wav/parse-header.js +5 -1
  182. package/dist/containers/wav/parse-id3.js +5 -1
  183. package/dist/containers/wav/parse-list.js +5 -1
  184. package/dist/containers/wav/parse-video-section.js +21 -12
  185. package/dist/containers/wav/parse-wav.js +19 -15
  186. package/dist/containers/wav/types.js +2 -1
  187. package/dist/containers/webm/allowed-partial-segments.js +4 -1
  188. package/dist/containers/webm/av1-codec-private.js +7 -3
  189. package/dist/containers/webm/color.js +10 -6
  190. package/dist/containers/webm/description.js +10 -6
  191. package/dist/containers/webm/get-ready-tracks.js +18 -13
  192. package/dist/containers/webm/get-sample-from-block.js +16 -12
  193. package/dist/containers/webm/make-track.js +48 -43
  194. package/dist/containers/webm/parse-ebml.js +35 -17
  195. package/dist/containers/webm/parse-webm-header.js +7 -3
  196. package/dist/containers/webm/segments/all-segments.js +173 -168
  197. package/dist/containers/webm/segments/block-simple-block-flags.d.ts +1 -1
  198. package/dist/containers/webm/segments/block-simple-block-flags.js +8 -4
  199. package/dist/containers/webm/segments/track-entry.js +5 -1
  200. package/dist/containers/webm/segments.js +13 -9
  201. package/dist/containers/webm/traversal.js +67 -37
  202. package/dist/convert-audio-or-video-sample.js +5 -1
  203. package/dist/download-and-parse-media.js +14 -10
  204. package/dist/emit-all-info.d.ts +3 -0
  205. package/dist/emit-all-info.js +30 -0
  206. package/dist/emit-audio-sample.d.ts +12 -0
  207. package/dist/emit-audio-sample.js +14 -0
  208. package/dist/emit-available-info.d.ts +2 -7
  209. package/dist/emit-available-info.js +70 -63
  210. package/dist/emitter.js +5 -1
  211. package/dist/errors.js +15 -6
  212. package/dist/esm/index.mjs +1921 -1618
  213. package/dist/esm/worker-server-entry.mjs +840 -537
  214. package/dist/esm/worker-web-entry.mjs +840 -537
  215. package/dist/esm/worker.mjs +4 -5
  216. package/dist/fetch.js +17 -1
  217. package/dist/fields.d.ts +61 -0
  218. package/dist/fields.js +2 -0
  219. package/dist/file-types/bmp.js +7 -3
  220. package/dist/file-types/detect-file-type.js +38 -24
  221. package/dist/file-types/index.js +26 -22
  222. package/dist/file-types/jpeg.js +9 -4
  223. package/dist/file-types/pdf.js +7 -3
  224. package/dist/file-types/png.js +9 -4
  225. package/dist/file-types/webp.js +7 -3
  226. package/dist/forward-controller.js +5 -1
  227. package/dist/get-audio-codec.js +38 -25
  228. package/dist/get-container.js +10 -5
  229. package/dist/get-dimensions.js +13 -8
  230. package/dist/get-duration.js +34 -27
  231. package/dist/get-fields-from-callbacks.d.ts +2 -1
  232. package/dist/get-fields-from-callbacks.js +5 -1
  233. package/dist/get-fps.js +34 -24
  234. package/dist/get-is-hdr.js +10 -5
  235. package/dist/get-keyframes.js +11 -6
  236. package/dist/get-location.js +9 -4
  237. package/dist/get-number-of-audio-channels.js +7 -2
  238. package/dist/get-sample-aspect-ratio.js +30 -17
  239. package/dist/get-sample-positions-from-lpcm.js +9 -5
  240. package/dist/get-sample-positions.js +5 -1
  241. package/dist/get-sample-rate.js +7 -2
  242. package/dist/get-seeking-info.d.ts +4 -0
  243. package/dist/get-seeking-info.js +22 -0
  244. package/dist/get-tracks.js +40 -29
  245. package/dist/get-video-codec.js +34 -26
  246. package/dist/has-all-info.d.ts +3 -5
  247. package/dist/has-all-info.js +39 -35
  248. package/dist/index.d.ts +53 -14
  249. package/dist/index.js +47 -32
  250. package/dist/init-video.d.ts +1 -4
  251. package/dist/init-video.js +29 -24
  252. package/dist/internal-parse-media.js +40 -199
  253. package/dist/is-audio-structure.js +5 -1
  254. package/dist/{buffer-iterator.d.ts → iterator/buffer-iterator.d.ts} +12 -15
  255. package/dist/{buffer-iterator.js → iterator/buffer-iterator.js} +16 -119
  256. package/dist/iterator/buffer-manager.d.ts +18 -0
  257. package/dist/iterator/buffer-manager.js +87 -0
  258. package/dist/iterator/offset-counter.d.ts +10 -0
  259. package/dist/iterator/offset-counter.js +31 -0
  260. package/dist/log.js +12 -8
  261. package/dist/make-hvc1-codec-strings.d.ts +1 -1
  262. package/dist/make-hvc1-codec-strings.js +5 -1
  263. package/dist/make-progress-object.d.ts +6 -0
  264. package/dist/make-progress-object.js +13 -0
  265. package/dist/media-parser-controller.d.ts +3 -0
  266. package/dist/media-parser-controller.js +15 -7
  267. package/dist/metadata/get-metadata.js +22 -17
  268. package/dist/metadata/metadata-from-iso.js +17 -12
  269. package/dist/metadata/metadata-from-matroska.js +7 -3
  270. package/dist/metadata/metadata-from-riff.js +7 -3
  271. package/dist/node-writer.js +17 -1
  272. package/dist/node.js +17 -1
  273. package/dist/options.d.ts +1 -61
  274. package/dist/options.js +2 -1
  275. package/dist/parse-loop.d.ts +8 -0
  276. package/dist/parse-loop.js +93 -0
  277. package/dist/parse-media-on-worker-entry.d.ts +2 -1
  278. package/dist/parse-media-on-worker-entry.js +7 -3
  279. package/dist/parse-media.js +12 -8
  280. package/dist/parse-result.js +2 -1
  281. package/dist/pause-signal.js +5 -1
  282. package/dist/perform-seek.d.ts +2 -7
  283. package/dist/perform-seek.js +29 -26
  284. package/dist/print-timings.d.ts +2 -0
  285. package/dist/print-timings.js +12 -0
  286. package/dist/readers/fetch/get-body-and-reader.js +5 -1
  287. package/dist/readers/fetch/resolve-url.js +5 -1
  288. package/dist/readers/from-fetch.js +21 -14
  289. package/dist/readers/from-node.js +23 -17
  290. package/dist/readers/from-web-file.js +13 -7
  291. package/dist/readers/reader.js +2 -1
  292. package/dist/readers/universal.js +16 -13
  293. package/dist/readers/web.js +12 -9
  294. package/dist/register-track.js +18 -9
  295. package/dist/remotion-license-acknowledge.js +8 -4
  296. package/dist/run-parse-iteration.d.ts +1 -4
  297. package/dist/run-parse-iteration.js +25 -24
  298. package/dist/samples-from-moof.js +10 -6
  299. package/dist/seek-backwards.d.ts +2 -0
  300. package/dist/seek-backwards.js +26 -0
  301. package/dist/seek-forwards.d.ts +2 -0
  302. package/dist/seek-forwards.js +28 -0
  303. package/dist/seek-signal.d.ts +22 -0
  304. package/dist/seek-signal.js +26 -0
  305. package/dist/seeking-info.d.ts +8 -0
  306. package/dist/seeking-info.js +2 -0
  307. package/dist/skip.js +5 -1
  308. package/dist/state/aac-state.js +5 -1
  309. package/dist/state/can-skip-tracks.d.ts +2 -2
  310. package/dist/state/can-skip-tracks.js +12 -4
  311. package/dist/state/emitted-fields.d.ts +1 -1
  312. package/dist/state/emitted-fields.js +5 -1
  313. package/dist/state/flac-state.js +5 -1
  314. package/dist/state/has-tracks-section.d.ts +2 -1
  315. package/dist/state/has-tracks-section.js +7 -3
  316. package/dist/state/images.js +5 -1
  317. package/dist/state/iso-base-media/cached-sample-positions.js +13 -8
  318. package/dist/state/iso-base-media/iso-state.js +9 -5
  319. package/dist/state/iso-base-media/moov-box.js +5 -1
  320. package/dist/state/keyframes.js +5 -1
  321. package/dist/state/m3u-state.js +9 -5
  322. package/dist/state/may-skip-video-data.js +7 -3
  323. package/dist/state/mp3.js +5 -1
  324. package/dist/state/need-samples-for-fields.d.ts +1 -1
  325. package/dist/state/need-samples-for-fields.js +5 -1
  326. package/dist/state/parser-state.d.ts +38 -8
  327. package/dist/state/parser-state.js +59 -35
  328. package/dist/state/riff.js +5 -1
  329. package/dist/state/sample-callbacks.d.ts +8 -3
  330. package/dist/state/sample-callbacks.js +27 -10
  331. package/dist/state/slow-duration-fps.js +5 -1
  332. package/dist/state/structure.js +5 -1
  333. package/dist/state/timings.d.ts +8 -0
  334. package/dist/state/timings.js +13 -0
  335. package/dist/state/transport-stream.js +7 -3
  336. package/dist/state/video-section.d.ts +1 -1
  337. package/dist/state/video-section.js +5 -1
  338. package/dist/state/webm.d.ts +1 -1
  339. package/dist/state/webm.js +9 -5
  340. package/dist/throttled-progress.d.ts +2 -3
  341. package/dist/throttled-progress.js +5 -1
  342. package/dist/truthy.js +4 -1
  343. package/dist/universal.js +5 -1
  344. package/dist/version.d.ts +1 -1
  345. package/dist/version.js +4 -1
  346. package/dist/web.js +5 -1
  347. package/dist/webcodec-sample-types.js +2 -1
  348. package/dist/work-on-seek-request.d.ts +2 -0
  349. package/dist/work-on-seek-request.js +43 -0
  350. package/dist/worker/forward-controller.js +7 -3
  351. package/dist/worker/serialize-error.js +19 -14
  352. package/dist/worker/worker-types.d.ts +2 -1
  353. package/dist/worker/worker-types.js +2 -1
  354. package/dist/worker-server-entry.js +5 -3
  355. package/dist/worker-server.js +16 -12
  356. package/dist/worker-web-entry.js +5 -3
  357. package/dist/worker.d.ts +3 -2
  358. package/dist/worker.js +11 -2
  359. package/dist/writers/node.js +23 -16
  360. package/dist/writers/writer.js +2 -1
  361. package/package.json +10 -10
  362. package/dist/parse-media-on-server-worker.d.ts +0 -2
  363. package/dist/parse-media-on-server-worker.js +0 -4
  364. package/dist/parse-media-on-web-worker.d.ts +0 -2
  365. package/dist/parse-media-on-web-worker.js +0 -4
@@ -1,12 +1,15 @@
1
- import { createReadStream, promises, statSync } from 'fs';
2
- import { dirname, join, relative, sep } from 'path';
3
- import { Readable } from 'stream';
4
- export const nodeReadContent = ({ src, range, controller }) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nodeReader = exports.nodeCreateAdjacentFileSource = exports.nodeReadWholeAsText = exports.nodeReadContent = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const stream_1 = require("stream");
7
+ const nodeReadContent = ({ src, range, controller }) => {
5
8
  if (typeof src !== 'string') {
6
9
  throw new Error('src must be a string when using `nodeReader`');
7
10
  }
8
11
  const ownController = new AbortController();
9
- const stream = createReadStream(src, {
12
+ const stream = (0, fs_1.createReadStream)(src, {
10
13
  start: range === null ? 0 : typeof range === 'number' ? range : range[0],
11
14
  end: range === null
12
15
  ? Infinity
@@ -18,8 +21,8 @@ export const nodeReadContent = ({ src, range, controller }) => {
18
21
  controller._internals.signal.addEventListener('abort', () => {
19
22
  ownController.abort();
20
23
  }, { once: true });
21
- const stats = statSync(src);
22
- const reader = Readable.toWeb(stream).getReader();
24
+ const stats = (0, fs_1.statSync)(src);
25
+ const reader = stream_1.Readable.toWeb(stream).getReader();
23
26
  if (controller) {
24
27
  controller._internals.signal.addEventListener('abort', () => {
25
28
  reader.cancel().catch(() => { });
@@ -34,30 +37,33 @@ export const nodeReadContent = ({ src, range, controller }) => {
34
37
  },
35
38
  contentLength: stats.size,
36
39
  contentType: null,
37
- name: src.split(sep).pop(),
40
+ name: src.split(path_1.sep).pop(),
38
41
  supportsContentRange: true,
39
42
  needsContentRange: true,
40
43
  });
41
44
  };
42
- export const nodeReadWholeAsText = (src) => {
45
+ exports.nodeReadContent = nodeReadContent;
46
+ const nodeReadWholeAsText = (src) => {
43
47
  if (typeof src !== 'string') {
44
48
  throw new Error('src must be a string when using `nodeReader`');
45
49
  }
46
- return promises.readFile(src, 'utf8');
50
+ return fs_1.promises.readFile(src, 'utf8');
47
51
  };
48
- export const nodeCreateAdjacentFileSource = (relativePath, src) => {
52
+ exports.nodeReadWholeAsText = nodeReadWholeAsText;
53
+ const nodeCreateAdjacentFileSource = (relativePath, src) => {
49
54
  if (typeof src !== 'string') {
50
55
  throw new Error('src must be a string when using `nodeReader`');
51
56
  }
52
- const result = join(dirname(src), relativePath);
53
- const rel = relative(dirname(src), result);
57
+ const result = (0, path_1.join)((0, path_1.dirname)(src), relativePath);
58
+ const rel = (0, path_1.relative)((0, path_1.dirname)(src), result);
54
59
  if (rel.startsWith('..')) {
55
60
  throw new Error('Path is outside of the parent directory - not allowing reading of arbitrary files');
56
61
  }
57
62
  return result;
58
63
  };
59
- export const nodeReader = {
60
- read: nodeReadContent,
61
- readWholeAsText: nodeReadWholeAsText,
62
- createAdjacentFileSource: nodeCreateAdjacentFileSource,
64
+ exports.nodeCreateAdjacentFileSource = nodeCreateAdjacentFileSource;
65
+ exports.nodeReader = {
66
+ read: exports.nodeReadContent,
67
+ readWholeAsText: exports.nodeReadWholeAsText,
68
+ createAdjacentFileSource: exports.nodeCreateAdjacentFileSource,
63
69
  };
@@ -1,4 +1,7 @@
1
- export const webFileReadContent = ({ src, range, controller }) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webFileReader = exports.webFileCreateAdjacentFileSource = exports.webFileReadWholeAsText = exports.webFileReadContent = void 0;
4
+ const webFileReadContent = ({ src, range, controller }) => {
2
5
  if (typeof src === 'string' || src instanceof URL) {
3
6
  throw new Error('`inputTypeFileReader` only supports `File` objects');
4
7
  }
@@ -44,14 +47,17 @@ export const webFileReadContent = ({ src, range, controller }) => {
44
47
  };
45
48
  });
46
49
  };
47
- export const webFileReadWholeAsText = () => {
50
+ exports.webFileReadContent = webFileReadContent;
51
+ const webFileReadWholeAsText = () => {
48
52
  throw new Error('`webFileReader` cannot read auxiliary files.');
49
53
  };
50
- export const webFileCreateAdjacentFileSource = () => {
54
+ exports.webFileReadWholeAsText = webFileReadWholeAsText;
55
+ const webFileCreateAdjacentFileSource = () => {
51
56
  throw new Error('`webFileReader` cannot create adjacent file sources.');
52
57
  };
53
- export const webFileReader = {
54
- read: webFileReadContent,
55
- readWholeAsText: webFileReadWholeAsText,
56
- createAdjacentFileSource: webFileCreateAdjacentFileSource,
58
+ exports.webFileCreateAdjacentFileSource = webFileCreateAdjacentFileSource;
59
+ exports.webFileReader = {
60
+ read: exports.webFileReadContent,
61
+ readWholeAsText: exports.webFileReadWholeAsText,
62
+ createAdjacentFileSource: exports.webFileCreateAdjacentFileSource,
57
63
  };
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,35 +1,38 @@
1
- import { fetchCreateAdjacentFileSource, fetchReadContent, fetchReadWholeAsText, } from './from-fetch';
2
- import { nodeCreateAdjacentFileSource, nodeReadContent, nodeReadWholeAsText, } from './from-node';
3
- import { webFileCreateAdjacentFileSource, webFileReadContent, webFileReadWholeAsText, } from './from-web-file';
4
- export const universalReader = {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.universalReader = void 0;
4
+ const from_fetch_1 = require("./from-fetch");
5
+ const from_node_1 = require("./from-node");
6
+ const from_web_file_1 = require("./from-web-file");
7
+ exports.universalReader = {
5
8
  read: (params) => {
6
9
  if (params.src instanceof Blob) {
7
- return webFileReadContent(params);
10
+ return (0, from_web_file_1.webFileReadContent)(params);
8
11
  }
9
12
  if (params.src.toString().startsWith('http') ||
10
13
  params.src.toString().startsWith('blob:')) {
11
- return fetchReadContent(params);
14
+ return (0, from_fetch_1.fetchReadContent)(params);
12
15
  }
13
- return nodeReadContent(params);
16
+ return (0, from_node_1.nodeReadContent)(params);
14
17
  },
15
18
  readWholeAsText: (src) => {
16
19
  if (src instanceof Blob) {
17
- return webFileReadWholeAsText(src);
20
+ return (0, from_web_file_1.webFileReadWholeAsText)(src);
18
21
  }
19
22
  if (src.toString().startsWith('http') ||
20
23
  src.toString().startsWith('blob:')) {
21
- return fetchReadWholeAsText(src);
24
+ return (0, from_fetch_1.fetchReadWholeAsText)(src);
22
25
  }
23
- return nodeReadWholeAsText(src);
26
+ return (0, from_node_1.nodeReadWholeAsText)(src);
24
27
  },
25
28
  createAdjacentFileSource: (relativePath, src) => {
26
29
  if (src instanceof Blob) {
27
- return webFileCreateAdjacentFileSource(relativePath, src);
30
+ return (0, from_web_file_1.webFileCreateAdjacentFileSource)(relativePath, src);
28
31
  }
29
32
  if (src.toString().startsWith('http') ||
30
33
  src.toString().startsWith('blob:')) {
31
- return fetchCreateAdjacentFileSource(relativePath, src);
34
+ return (0, from_fetch_1.fetchCreateAdjacentFileSource)(relativePath, src);
32
35
  }
33
- return nodeCreateAdjacentFileSource(relativePath, src);
36
+ return (0, from_node_1.nodeCreateAdjacentFileSource)(relativePath, src);
34
37
  },
35
38
  };
@@ -1,22 +1,25 @@
1
- import { fetchCreateAdjacentFileSource, fetchReadContent, fetchReadWholeAsText, } from './from-fetch';
2
- import { webFileCreateAdjacentFileSource, webFileReadContent, webFileReadWholeAsText, } from './from-web-file';
3
- export const webReader = {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webReader = void 0;
4
+ const from_fetch_1 = require("./from-fetch");
5
+ const from_web_file_1 = require("./from-web-file");
6
+ exports.webReader = {
4
7
  read: (params) => {
5
8
  if (params.src instanceof Blob) {
6
- return webFileReadContent(params);
9
+ return (0, from_web_file_1.webFileReadContent)(params);
7
10
  }
8
- return fetchReadContent(params);
11
+ return (0, from_fetch_1.fetchReadContent)(params);
9
12
  },
10
13
  createAdjacentFileSource: (relativePath, src) => {
11
14
  if (src instanceof Blob) {
12
- return webFileCreateAdjacentFileSource(relativePath, src);
15
+ return (0, from_web_file_1.webFileCreateAdjacentFileSource)(relativePath, src);
13
16
  }
14
- return fetchCreateAdjacentFileSource(relativePath, src);
17
+ return (0, from_fetch_1.fetchCreateAdjacentFileSource)(relativePath, src);
15
18
  },
16
19
  readWholeAsText: (src) => {
17
20
  if (src instanceof Blob) {
18
- return webFileReadWholeAsText(src);
21
+ return (0, from_web_file_1.webFileReadWholeAsText)(src);
19
22
  }
20
- return fetchReadWholeAsText(src);
23
+ return (0, from_fetch_1.fetchReadWholeAsText)(src);
21
24
  },
22
25
  };
@@ -1,8 +1,12 @@
1
- import { addAvcProfileToTrack } from './add-avc-profile-to-track';
2
- import { Log } from './log';
3
- export const registerVideoTrack = async ({ state, track, container, }) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerVideoTrackWhenProfileIsAvailable = exports.registerAudioTrack = exports.registerVideoTrack = void 0;
4
+ const add_avc_profile_to_track_1 = require("./add-avc-profile-to-track");
5
+ const log_1 = require("./log");
6
+ const work_on_seek_request_1 = require("./work-on-seek-request");
7
+ const registerVideoTrack = async ({ state, track, container, }) => {
4
8
  if (state.callbacks.tracks.getTracks().find((t) => t.trackId === track.trackId)) {
5
- Log.trace(state.logLevel, `Track ${track.trackId} already registered, skipping`);
9
+ log_1.Log.trace(state.logLevel, `Track ${track.trackId} already registered, skipping`);
6
10
  return null;
7
11
  }
8
12
  if (track.type !== 'video') {
@@ -14,11 +18,13 @@ export const registerVideoTrack = async ({ state, track, container, }) => {
14
18
  }
15
19
  const callback = await state.onVideoTrack({ track, container });
16
20
  await state.callbacks.registerVideoSampleCallback(track.trackId, callback !== null && callback !== void 0 ? callback : null);
21
+ await (0, work_on_seek_request_1.workOnSeekRequest)(state);
17
22
  return callback;
18
23
  };
19
- export const registerAudioTrack = async ({ state, track, container, }) => {
24
+ exports.registerVideoTrack = registerVideoTrack;
25
+ const registerAudioTrack = async ({ state, track, container, }) => {
20
26
  if (state.callbacks.tracks.getTracks().find((t) => t.trackId === track.trackId)) {
21
- Log.trace(state.logLevel, `Track ${track.trackId} already registered, skipping`);
27
+ log_1.Log.trace(state.logLevel, `Track ${track.trackId} already registered, skipping`);
22
28
  return null;
23
29
  }
24
30
  if (track.type !== 'audio') {
@@ -30,14 +36,17 @@ export const registerAudioTrack = async ({ state, track, container, }) => {
30
36
  }
31
37
  const callback = await state.onAudioTrack({ track, container });
32
38
  await state.callbacks.registerAudioSampleCallback(track.trackId, callback !== null && callback !== void 0 ? callback : null);
39
+ await (0, work_on_seek_request_1.workOnSeekRequest)(state);
33
40
  return callback;
34
41
  };
35
- export const registerVideoTrackWhenProfileIsAvailable = ({ state, track, container, }) => {
42
+ exports.registerAudioTrack = registerAudioTrack;
43
+ const registerVideoTrackWhenProfileIsAvailable = ({ state, track, container, }) => {
36
44
  state.riff.registerOnAvcProfileCallback(async (profile) => {
37
- await registerVideoTrack({
45
+ await (0, exports.registerVideoTrack)({
38
46
  state,
39
- track: addAvcProfileToTrack(track, profile),
47
+ track: (0, add_avc_profile_to_track_1.addAvcProfileToTrack)(track, profile),
40
48
  container,
41
49
  });
42
50
  });
43
51
  };
52
+ exports.registerVideoTrackWhenProfileIsAvailable = registerVideoTrackWhenProfileIsAvailable;
@@ -1,6 +1,9 @@
1
- import { Log } from './log';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.warnIfRemotionLicenseNotAcknowledged = void 0;
4
+ const log_1 = require("./log");
2
5
  let warningShown = false;
3
- export const warnIfRemotionLicenseNotAcknowledged = ({ acknowledgeRemotionLicense, logLevel, apiName, }) => {
6
+ const warnIfRemotionLicenseNotAcknowledged = ({ acknowledgeRemotionLicense, logLevel, apiName, }) => {
4
7
  if (acknowledgeRemotionLicense) {
5
8
  return;
6
9
  }
@@ -8,6 +11,7 @@ export const warnIfRemotionLicenseNotAcknowledged = ({ acknowledgeRemotionLicens
8
11
  return;
9
12
  }
10
13
  warningShown = true;
11
- Log.warn(logLevel, 'Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license');
12
- Log.warn(logLevel, `Pass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
14
+ log_1.Log.warn(logLevel, 'Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license');
15
+ log_1.Log.warn(logLevel, `Pass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
13
16
  };
17
+ exports.warnIfRemotionLicenseNotAcknowledged = warnIfRemotionLicenseNotAcknowledged;
@@ -1,8 +1,5 @@
1
1
  import type { ParseResult } from './parse-result';
2
2
  import type { ParserState } from './state/parser-state';
3
- export declare const runParseIteration: ({ state, mimeType, contentLength, name, }: {
3
+ export declare const runParseIteration: ({ state, }: {
4
4
  state: ParserState;
5
- mimeType: string | null;
6
- contentLength: number;
7
- name: string | null;
8
5
  }) => Promise<ParseResult>;
@@ -1,54 +1,55 @@
1
- import { parseAac } from './containers/aac/parse-aac';
2
- import { parseFlac } from './containers/flac/parse-flac';
3
- import { parseIsoBaseMedia } from './containers/iso-base-media/parse-boxes';
4
- import { parseM3u } from './containers/m3u/parse-m3u';
5
- import { parseMp3 } from './containers/mp3/parse-mp3';
6
- import { parseRiff } from './containers/riff/parse-riff';
7
- import { parseTransportStream } from './containers/transport-stream/parse-transport-stream';
8
- import { parseWav } from './containers/wav/parse-wav';
9
- import { parseWebm } from './containers/webm/parse-webm-header';
10
- import { initVideo } from './init-video';
11
- export const runParseIteration = async ({ state, mimeType, contentLength, name, }) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runParseIteration = void 0;
4
+ const parse_aac_1 = require("./containers/aac/parse-aac");
5
+ const parse_flac_1 = require("./containers/flac/parse-flac");
6
+ const parse_boxes_1 = require("./containers/iso-base-media/parse-boxes");
7
+ const parse_m3u_1 = require("./containers/m3u/parse-m3u");
8
+ const parse_mp3_1 = require("./containers/mp3/parse-mp3");
9
+ const parse_riff_1 = require("./containers/riff/parse-riff");
10
+ const parse_transport_stream_1 = require("./containers/transport-stream/parse-transport-stream");
11
+ const parse_wav_1 = require("./containers/wav/parse-wav");
12
+ const parse_webm_header_1 = require("./containers/webm/parse-webm-header");
13
+ const init_video_1 = require("./init-video");
14
+ const runParseIteration = async ({ state, }) => {
12
15
  const structure = state.getStructureOrNull();
13
16
  // m3u8 is busy parsing the chunks once the manifest has been read
14
17
  if (structure && structure.type === 'm3u') {
15
- return parseM3u({ state });
18
+ return (0, parse_m3u_1.parseM3u)({ state });
16
19
  }
17
20
  if (state.iterator.bytesRemaining() === 0) {
18
21
  return Promise.reject(new Error('no bytes'));
19
22
  }
20
23
  if (structure === null) {
21
- await initVideo({
24
+ await (0, init_video_1.initVideo)({
22
25
  state,
23
- mimeType,
24
- name,
25
- contentLength,
26
26
  });
27
27
  return null;
28
28
  }
29
29
  if (structure.type === 'riff') {
30
- return parseRiff(state);
30
+ return (0, parse_riff_1.parseRiff)(state);
31
31
  }
32
32
  if (structure.type === 'mp3') {
33
- return parseMp3(state);
33
+ return (0, parse_mp3_1.parseMp3)(state);
34
34
  }
35
35
  if (structure.type === 'iso-base-media') {
36
- return parseIsoBaseMedia(state);
36
+ return (0, parse_boxes_1.parseIsoBaseMedia)(state);
37
37
  }
38
38
  if (structure.type === 'matroska') {
39
- return parseWebm(state);
39
+ return (0, parse_webm_header_1.parseWebm)(state);
40
40
  }
41
41
  if (structure.type === 'transport-stream') {
42
- return parseTransportStream(state);
42
+ return (0, parse_transport_stream_1.parseTransportStream)(state);
43
43
  }
44
44
  if (structure.type === 'wav') {
45
- return parseWav(state);
45
+ return (0, parse_wav_1.parseWav)(state);
46
46
  }
47
47
  if (structure.type === 'aac') {
48
- return parseAac(state);
48
+ return (0, parse_aac_1.parseAac)(state);
49
49
  }
50
50
  if (structure.type === 'flac') {
51
- return parseFlac({ state, iterator: state.iterator });
51
+ return (0, parse_flac_1.parseFlac)({ state, iterator: state.iterator });
52
52
  }
53
53
  return Promise.reject(new Error('Unknown video format ' + structure));
54
54
  };
55
+ exports.runParseIteration = runParseIteration;
@@ -1,15 +1,18 @@
1
- import { getTfdtBox, getTfhdBox, getTrunBoxes, } from './containers/iso-base-media/traversal';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSamplesFromMoof = void 0;
4
+ const traversal_1 = require("./containers/iso-base-media/traversal");
2
5
  const getSamplesFromTraf = (trafSegment, moofOffset) => {
3
6
  var _a, _b, _c, _d, _e, _f, _g;
4
7
  if (trafSegment.type !== 'regular-box' || trafSegment.boxType !== 'traf') {
5
8
  throw new Error('Expected traf-box');
6
9
  }
7
- const tfhdBox = getTfhdBox(trafSegment);
10
+ const tfhdBox = (0, traversal_1.getTfhdBox)(trafSegment);
8
11
  const defaultSampleDuration = (_a = tfhdBox === null || tfhdBox === void 0 ? void 0 : tfhdBox.defaultSampleDuration) !== null && _a !== void 0 ? _a : null;
9
12
  const defaultSampleSize = (_b = tfhdBox === null || tfhdBox === void 0 ? void 0 : tfhdBox.defaultSampleSize) !== null && _b !== void 0 ? _b : null;
10
13
  const defaultSampleFlags = (_c = tfhdBox === null || tfhdBox === void 0 ? void 0 : tfhdBox.defaultSampleFlags) !== null && _c !== void 0 ? _c : null;
11
- const tfdtBox = getTfdtBox(trafSegment);
12
- const trunBoxes = getTrunBoxes(trafSegment);
14
+ const tfdtBox = (0, traversal_1.getTfdtBox)(trafSegment);
15
+ const trunBoxes = (0, traversal_1.getTrunBoxes)(trafSegment);
13
16
  let time = 0;
14
17
  let offset = 0;
15
18
  let dataOffset = 0;
@@ -57,16 +60,17 @@ const getSamplesFromTraf = (trafSegment, moofOffset) => {
57
60
  }
58
61
  return samples;
59
62
  };
60
- export const getSamplesFromMoof = ({ moofBox, trackId, }) => {
63
+ const getSamplesFromMoof = ({ moofBox, trackId, }) => {
61
64
  if (moofBox.type !== 'regular-box') {
62
65
  throw new Error('Expected moof-box');
63
66
  }
64
67
  const trafs = moofBox.children.filter((c) => c.type === 'regular-box' && c.boxType === 'traf');
65
68
  const mapped = trafs.map((traf) => {
66
- const tfhdBox = getTfhdBox(traf);
69
+ const tfhdBox = (0, traversal_1.getTfhdBox)(traf);
67
70
  return (tfhdBox === null || tfhdBox === void 0 ? void 0 : tfhdBox.trackId) === trackId
68
71
  ? getSamplesFromTraf(traf, moofBox.offset)
69
72
  : [];
70
73
  });
71
74
  return mapped.flat(1);
72
75
  };
76
+ exports.getSamplesFromMoof = getSamplesFromMoof;
@@ -0,0 +1,2 @@
1
+ import type { ParserState } from './state/parser-state';
2
+ export declare const seekBackwards: (state: ParserState, seekTo: number) => Promise<void>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.seekBackwards = void 0;
4
+ const log_1 = require("./log");
5
+ const seekBackwards = async (state, seekTo) => {
6
+ const { iterator } = state;
7
+ // (a) data has not been discarded yet
8
+ const howManyBytesNotYetDiscarded = iterator.counter.getDiscardedOffset();
9
+ const howManyBytesWeCanGoBack = iterator.counter.getOffset() - howManyBytesNotYetDiscarded;
10
+ if (iterator.counter.getOffset() - howManyBytesWeCanGoBack <= seekTo) {
11
+ iterator.skipTo(seekTo);
12
+ return;
13
+ }
14
+ // (b) data has been discarded, making new reader
15
+ const time = Date.now();
16
+ log_1.Log.verbose(state.logLevel, `Seeking in video from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available`);
17
+ const { reader: newReader } = await state.readerInterface.read({
18
+ src: state.src,
19
+ range: seekTo,
20
+ controller: state.controller,
21
+ });
22
+ iterator.replaceData(new Uint8Array([]), seekTo);
23
+ log_1.Log.verbose(state.logLevel, `Re-reading took ${Date.now() - time}ms. New position: ${iterator.counter.getOffset()}`);
24
+ state.currentReader = newReader;
25
+ };
26
+ exports.seekBackwards = seekBackwards;
@@ -0,0 +1,2 @@
1
+ import type { ParserState } from './state/parser-state';
2
+ export declare const seekForward: (state: ParserState, seekTo: number) => Promise<import("./readers/reader").Reader | undefined>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.seekForward = void 0;
4
+ const log_1 = require("./log");
5
+ const seekForward = async (state, seekTo) => {
6
+ const { iterator } = state;
7
+ const alreadyHasBuffer = iterator.bytesRemaining() >= seekTo - iterator.counter.getOffset();
8
+ log_1.Log.verbose(state.logLevel, `Performing seek from ${iterator.counter.getOffset()} to ${seekTo}`);
9
+ // (a) starting byte has already been fetched
10
+ if (alreadyHasBuffer) {
11
+ iterator.skipTo(seekTo);
12
+ log_1.Log.verbose(state.logLevel, `Already read ahead enough, skipping forward`);
13
+ return state.currentReader;
14
+ }
15
+ // (b) starting byte has not been fetched yet, making new reader
16
+ const time = Date.now();
17
+ log_1.Log.verbose(state.logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available`);
18
+ const { reader: newReader } = await state.readerInterface.read({
19
+ src: state.src,
20
+ range: seekTo,
21
+ controller: state.controller,
22
+ });
23
+ iterator.skipTo(seekTo);
24
+ await state.discardReadBytes(true);
25
+ log_1.Log.verbose(state.logLevel, `Re-reading took ${Date.now() - time}ms. New position: ${iterator.counter.getOffset()}`);
26
+ state.currentReader = newReader;
27
+ };
28
+ exports.seekForward = seekForward;
@@ -0,0 +1,22 @@
1
+ export type SeekSignal = {
2
+ seek: (seek: Seek) => void;
3
+ getSeek: () => Seek | undefined;
4
+ clearSeekIfStillSame: (previousSeek: Seek) => {
5
+ hasChanged: boolean;
6
+ };
7
+ };
8
+ type SeekToTime = {
9
+ type: 'keyframe-before-time-in-seconds';
10
+ time: number;
11
+ };
12
+ type SeekToByte = {
13
+ type: 'byte';
14
+ byte: number;
15
+ };
16
+ type ForceSeekToByte = {
17
+ type: 'force-seek-to-byte';
18
+ byte: number;
19
+ };
20
+ export type Seek = SeekToTime | SeekToByte | ForceSeekToByte;
21
+ export declare const makeSeekSignal: () => SeekSignal;
22
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeSeekSignal = void 0;
4
+ const makeSeekSignal = () => {
5
+ let seek;
6
+ return {
7
+ seek: (time) => {
8
+ if (seek) {
9
+ throw new Error('Seek already requested, must wait');
10
+ }
11
+ seek = time;
12
+ },
13
+ getSeek() {
14
+ return seek;
15
+ },
16
+ // In the meanwhile a new seek could have been queued
17
+ clearSeekIfStillSame(previousSeek) {
18
+ if (seek === previousSeek) {
19
+ seek = undefined;
20
+ return { hasChanged: false };
21
+ }
22
+ return { hasChanged: true };
23
+ },
24
+ };
25
+ };
26
+ exports.makeSeekSignal = makeSeekSignal;
@@ -0,0 +1,8 @@
1
+ import type { IsoBaseMediaBox } from './containers/iso-base-media/base-media-box';
2
+ import type { MoovBox } from './containers/iso-base-media/moov/moov';
3
+ export type IsoBaseMediaSeekingInfo = {
4
+ type: 'iso-base-media-seeking-info';
5
+ moovBox: MoovBox;
6
+ moofBoxes: IsoBaseMediaBox[];
7
+ };
8
+ export type SeekingInfo = IsoBaseMediaSeekingInfo;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/skip.js CHANGED
@@ -1,4 +1,8 @@
1
- export const makeSkip = (skipTo) => ({
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeSkip = void 0;
4
+ const makeSkip = (skipTo) => ({
2
5
  action: 'skip',
3
6
  skipTo,
4
7
  });
8
+ exports.makeSkip = makeSkip;
@@ -1,4 +1,7 @@
1
- export const aacState = () => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aacState = void 0;
4
+ const aacState = () => {
2
5
  const samples = [];
3
6
  return {
4
7
  addSample: ({ offset, size }) => {
@@ -11,3 +14,4 @@ export const aacState = () => {
11
14
  getSamples: () => samples,
12
15
  };
13
16
  };
17
+ exports.aacState = aacState;
@@ -1,9 +1,9 @@
1
- import type { Options, ParseMediaFields } from '../options';
1
+ import type { Options, ParseMediaFields } from '../fields';
2
2
  import type { MediaParserStructureUnstable } from '../parse-result';
3
3
  import type { StructureState } from './structure';
4
4
  export declare const needsTracksForField: ({ field, structure, }: {
5
5
  field: keyof Options<ParseMediaFields>;
6
- structure: MediaParserStructureUnstable;
6
+ structure: MediaParserStructureUnstable | null;
7
7
  }) => boolean;
8
8
  export declare const makeCanSkipTracksState: ({ hasAudioTrackHandlers, fields, hasVideoTrackHandlers, structure, }: {
9
9
  hasAudioTrackHandlers: boolean;
@@ -1,6 +1,9 @@
1
- export const needsTracksForField = ({ field, structure, }) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeCanSkipTracksState = exports.needsTracksForField = void 0;
4
+ const needsTracksForField = ({ field, structure, }) => {
2
5
  if (field === 'dimensions') {
3
- if (structure.type === 'riff') {
6
+ if ((structure === null || structure === void 0 ? void 0 : structure.type) === 'riff') {
4
7
  return false;
5
8
  }
6
9
  return true;
@@ -38,7 +41,8 @@ export const needsTracksForField = ({ field, structure, }) => {
38
41
  }
39
42
  throw new Error(`field not implemeted ${field}`);
40
43
  };
41
- export const makeCanSkipTracksState = ({ hasAudioTrackHandlers, fields, hasVideoTrackHandlers, structure, }) => {
44
+ exports.needsTracksForField = needsTracksForField;
45
+ const makeCanSkipTracksState = ({ hasAudioTrackHandlers, fields, hasVideoTrackHandlers, structure, }) => {
42
46
  return {
43
47
  canSkipTracks: () => {
44
48
  if (hasAudioTrackHandlers || hasVideoTrackHandlers) {
@@ -46,7 +50,11 @@ export const makeCanSkipTracksState = ({ hasAudioTrackHandlers, fields, hasVideo
46
50
  }
47
51
  const keys = Object.keys(fields !== null && fields !== void 0 ? fields : {});
48
52
  const selectedKeys = keys.filter((k) => fields[k]);
49
- return !selectedKeys.some((k) => needsTracksForField({ field: k, structure: structure.getStructure() }));
53
+ return !selectedKeys.some((k) => (0, exports.needsTracksForField)({
54
+ field: k,
55
+ structure: structure.getStructureOrNull(),
56
+ }));
50
57
  },
51
58
  };
52
59
  };
60
+ exports.makeCanSkipTracksState = makeCanSkipTracksState;
@@ -1,2 +1,2 @@
1
- import type { AllOptions, ParseMediaFields } from '../options';
1
+ import type { AllOptions, ParseMediaFields } from '../fields';
2
2
  export declare const emittedState: () => AllOptions<ParseMediaFields>;
@@ -1,4 +1,7 @@
1
- export const emittedState = () => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emittedState = void 0;
4
+ const emittedState = () => {
2
5
  const emittedFields = {
3
6
  audioCodec: false,
4
7
  container: false,
@@ -31,3 +34,4 @@ export const emittedState = () => {
31
34
  };
32
35
  return emittedFields;
33
36
  };
37
+ exports.emittedState = emittedState;