@remotion/media-parser 4.0.250 → 4.0.252

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 (424) hide show
  1. package/dist/aac-codecprivate.d.ts +2 -1
  2. package/dist/aac-codecprivate.js +28 -7
  3. package/dist/add-avc-profile-to-track.js +2 -2
  4. package/dist/buffer-iterator.d.ts +7 -2
  5. package/dist/buffer-iterator.js +61 -35
  6. package/dist/containers/aac/parse-aac.d.ts +3 -0
  7. package/dist/containers/aac/parse-aac.js +84 -0
  8. package/dist/containers/aac/types.d.ts +4 -0
  9. package/dist/{boxes → containers}/avc/key.d.ts +1 -1
  10. package/dist/containers/flac/get-block-size.d.ts +2 -0
  11. package/dist/containers/flac/get-block-size.js +26 -0
  12. package/dist/containers/flac/get-channel-count.d.ts +2 -0
  13. package/dist/containers/flac/get-channel-count.js +36 -0
  14. package/dist/containers/flac/get-duration-from-flac.d.ts +2 -0
  15. package/dist/containers/flac/get-duration-from-flac.js +12 -0
  16. package/dist/containers/flac/get-metadata-from-flac.d.ts +2 -0
  17. package/dist/containers/flac/get-metadata-from-flac.js +11 -0
  18. package/dist/containers/flac/get-sample-rate.d.ts +3 -0
  19. package/dist/containers/flac/get-sample-rate.js +60 -0
  20. package/dist/containers/flac/parse-flac-frame.d.ts +15 -0
  21. package/dist/containers/flac/parse-flac-frame.js +169 -0
  22. package/dist/{boxes/riff/parse-riff.d.ts → containers/flac/parse-flac.d.ts} +1 -1
  23. package/dist/containers/flac/parse-flac.js +49 -0
  24. package/dist/{boxes/mp3/parse-mp3.d.ts → containers/flac/parse-header.d.ts} +2 -2
  25. package/dist/containers/flac/parse-header.js +10 -0
  26. package/dist/{boxes/iso-base-media/parse-boxes.d.ts → containers/flac/parse-metadata.d.ts} +3 -2
  27. package/dist/containers/flac/parse-metadata.js +24 -0
  28. package/dist/{boxes/webm/parse-webm-header.d.ts → containers/flac/parse-streaminfo.d.ts} +1 -1
  29. package/dist/containers/flac/parse-streaminfo.js +53 -0
  30. package/dist/{boxes/riff/parse-riff-body.d.ts → containers/flac/parse-unknown-block.d.ts} +2 -1
  31. package/dist/containers/flac/parse-unknown-block.js +11 -0
  32. package/dist/containers/flac/types.d.ts +26 -0
  33. package/dist/containers/iso-base-media/base-media-box.d.ts +37 -0
  34. package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.js +1 -1
  35. package/dist/containers/iso-base-media/get-children.d.ts +6 -0
  36. package/dist/{boxes → containers}/iso-base-media/get-children.js +5 -7
  37. package/dist/containers/iso-base-media/get-keyframes.d.ts +3 -0
  38. package/dist/{boxes → containers}/iso-base-media/get-keyframes.js +3 -2
  39. package/dist/containers/iso-base-media/get-moov-atom.d.ts +6 -0
  40. package/dist/containers/iso-base-media/get-moov-atom.js +73 -0
  41. package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.d.ts +1 -1
  42. package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.js +1 -1
  43. package/dist/containers/iso-base-media/mdat/mdat.d.ts +3 -0
  44. package/dist/{boxes → containers}/iso-base-media/mdat/mdat.js +17 -12
  45. package/dist/{boxes → containers}/iso-base-media/moov/moov.d.ts +1 -3
  46. package/dist/{boxes → containers}/iso-base-media/moov/moov.js +1 -2
  47. package/dist/containers/iso-base-media/parse-boxes.d.ts +3 -0
  48. package/dist/containers/iso-base-media/parse-boxes.js +18 -0
  49. package/dist/containers/iso-base-media/process-box.d.ts +3 -0
  50. package/dist/{boxes → containers}/iso-base-media/process-box.js +52 -169
  51. package/dist/{boxes → containers}/iso-base-media/stsd/mebx.d.ts +1 -3
  52. package/dist/{boxes → containers}/iso-base-media/stsd/mebx.js +3 -4
  53. package/dist/{boxes → containers}/iso-base-media/stsd/samples.d.ts +4 -6
  54. package/dist/{boxes → containers}/iso-base-media/stsd/samples.js +5 -7
  55. package/dist/{boxes → containers}/iso-base-media/stsd/stsd.d.ts +1 -3
  56. package/dist/{boxes → containers}/iso-base-media/stsd/stsd.js +2 -2
  57. package/dist/{boxes → containers}/iso-base-media/trak/trak.d.ts +1 -3
  58. package/dist/{boxes → containers}/iso-base-media/trak/trak.js +1 -2
  59. package/dist/{boxes → containers}/iso-base-media/traversal.d.ts +4 -2
  60. package/dist/{boxes → containers}/iso-base-media/traversal.js +6 -2
  61. package/dist/containers/iso-base-media/void-box.js +2 -0
  62. package/dist/{boxes → containers}/mp3/get-duration.js +0 -3
  63. package/dist/containers/mp3/get-tracks-from-mp3.d.ts +4 -0
  64. package/dist/{boxes → containers}/mp3/get-tracks-from-mp3.js +6 -6
  65. package/dist/containers/mp3/id3.d.ts +4 -0
  66. package/dist/{boxes → containers}/mp3/id3.js +3 -2
  67. package/dist/containers/mp3/parse-mp3.d.ts +3 -0
  68. package/dist/{boxes → containers}/mp3/parse-mp3.js +7 -15
  69. package/dist/containers/mp3/parse-mpeg-header.d.ts +4 -0
  70. package/dist/{boxes → containers}/mp3/parse-mpeg-header.js +3 -2
  71. package/dist/containers/riff/expect-riff-box.d.ts +6 -0
  72. package/dist/{boxes → containers}/riff/expect-riff-box.js +7 -17
  73. package/dist/containers/riff/get-duration.d.ts +3 -0
  74. package/dist/containers/riff/get-duration.js +33 -0
  75. package/dist/{boxes → containers}/riff/get-tracks-from-avi.d.ts +1 -2
  76. package/dist/{boxes → containers}/riff/get-tracks-from-avi.js +1 -1
  77. package/dist/{boxes → containers}/riff/parse-list-box.d.ts +1 -3
  78. package/dist/{boxes → containers}/riff/parse-list-box.js +5 -9
  79. package/dist/containers/riff/parse-movi.d.ts +9 -0
  80. package/dist/{boxes → containers}/riff/parse-movi.js +13 -29
  81. package/dist/containers/riff/parse-riff-body.d.ts +3 -0
  82. package/dist/containers/riff/parse-riff-body.js +28 -0
  83. package/dist/{boxes → containers}/riff/parse-riff-box.d.ts +1 -3
  84. package/dist/{boxes → containers}/riff/parse-riff-box.js +3 -6
  85. package/dist/containers/riff/parse-riff-header.d.ts +3 -0
  86. package/dist/{boxes → containers}/riff/parse-riff-header.js +6 -11
  87. package/dist/containers/riff/parse-riff.d.ts +3 -0
  88. package/dist/{boxes → containers}/riff/parse-riff.js +4 -7
  89. package/dist/containers/riff/parse-video-section.d.ts +2 -0
  90. package/dist/{boxes → containers}/riff/parse-video-section.js +5 -8
  91. package/dist/{boxes → containers}/riff/riff-box.d.ts +5 -10
  92. package/dist/containers/riff/riff-box.js +2 -0
  93. package/dist/{boxes → containers}/riff/traversal.d.ts +1 -2
  94. package/dist/{boxes → containers}/transport-stream/adts-header.js +1 -0
  95. package/dist/containers/transport-stream/boxes.js +2 -0
  96. package/dist/{boxes → containers}/transport-stream/get-tracks.js +1 -1
  97. package/dist/{boxes → containers}/transport-stream/parse-packet.d.ts +1 -3
  98. package/dist/{boxes → containers}/transport-stream/parse-packet.js +3 -3
  99. package/dist/{boxes → containers}/transport-stream/parse-stream-packet.d.ts +1 -3
  100. package/dist/{boxes → containers}/transport-stream/parse-stream-packet.js +2 -1
  101. package/dist/containers/transport-stream/parse-transport-stream.d.ts +3 -0
  102. package/dist/{boxes → containers}/transport-stream/parse-transport-stream.js +5 -22
  103. package/dist/{boxes → containers}/transport-stream/process-stream-buffers.js +1 -1
  104. package/dist/containers/wav/get-duration-from-wav.d.ts +3 -0
  105. package/dist/containers/wav/get-duration-from-wav.js +26 -0
  106. package/dist/containers/wav/get-metadata-from-wav.d.ts +3 -0
  107. package/dist/containers/wav/get-metadata-from-wav.js +11 -0
  108. package/dist/containers/wav/parse-data.d.ts +5 -0
  109. package/dist/containers/wav/parse-data.js +25 -0
  110. package/dist/containers/wav/parse-fmt.d.ts +5 -0
  111. package/dist/containers/wav/parse-fmt.js +56 -0
  112. package/dist/containers/wav/parse-header.d.ts +5 -0
  113. package/dist/containers/wav/parse-header.js +17 -0
  114. package/dist/containers/wav/parse-id3.d.ts +5 -0
  115. package/dist/containers/wav/parse-id3.js +15 -0
  116. package/dist/containers/wav/parse-list.d.ts +5 -0
  117. package/dist/containers/wav/parse-list.js +32 -0
  118. package/dist/containers/wav/parse-video-section.d.ts +5 -0
  119. package/dist/containers/wav/parse-video-section.js +34 -0
  120. package/dist/containers/wav/parse-wav.d.ts +3 -0
  121. package/dist/containers/wav/parse-wav.js +36 -0
  122. package/dist/containers/wav/types.d.ts +30 -0
  123. package/dist/containers/wav/types.js +2 -0
  124. package/dist/{boxes → containers}/webm/parse-ebml.d.ts +1 -2
  125. package/dist/{boxes → containers}/webm/parse-ebml.js +4 -3
  126. package/dist/containers/webm/parse-webm-header.d.ts +3 -0
  127. package/dist/{boxes → containers}/webm/parse-webm-header.js +5 -12
  128. package/dist/{boxes → containers}/webm/segments.d.ts +1 -3
  129. package/dist/{boxes → containers}/webm/segments.js +7 -6
  130. package/dist/download-and-parse-media.d.ts +2 -0
  131. package/dist/download-and-parse-media.js +70 -0
  132. package/dist/emit-available-info.d.ts +2 -5
  133. package/dist/emit-available-info.js +104 -94
  134. package/dist/errors.d.ts +1 -1
  135. package/dist/esm/from-fetch.mjs +1 -1
  136. package/dist/esm/from-node.mjs +1 -1
  137. package/dist/esm/from-web-file.mjs +7 -7
  138. package/dist/esm/index.mjs +2118 -1069
  139. package/dist/esm/node.mjs +113 -0
  140. package/dist/file-types/detect-file-type.d.ts +5 -1
  141. package/dist/file-types/detect-file-type.js +6 -1
  142. package/dist/file-types/index.js +3 -0
  143. package/dist/get-audio-codec.d.ts +3 -4
  144. package/dist/get-audio-codec.js +6 -3
  145. package/dist/get-container.d.ts +2 -2
  146. package/dist/get-container.js +10 -1
  147. package/dist/get-dimensions.d.ts +2 -3
  148. package/dist/get-dimensions.js +13 -9
  149. package/dist/get-duration.d.ts +5 -5
  150. package/dist/get-duration.js +26 -27
  151. package/dist/get-fields-from-callbacks.js +4 -0
  152. package/dist/get-fps.d.ts +5 -5
  153. package/dist/get-fps.js +24 -14
  154. package/dist/get-is-hdr.d.ts +1 -2
  155. package/dist/get-is-hdr.js +2 -2
  156. package/dist/get-keyframes.d.ts +2 -3
  157. package/dist/get-keyframes.js +7 -5
  158. package/dist/get-location.d.ts +2 -2
  159. package/dist/get-location.js +2 -2
  160. package/dist/get-number-of-audio-channels.d.ts +3 -0
  161. package/dist/get-number-of-audio-channels.js +14 -0
  162. package/dist/get-sample-aspect-ratio.d.ts +8 -8
  163. package/dist/get-sample-aspect-ratio.js +1 -1
  164. package/dist/get-sample-positions-from-lpcm.d.ts +1 -1
  165. package/dist/get-sample-positions-from-lpcm.js +1 -1
  166. package/dist/get-sample-positions.d.ts +6 -6
  167. package/dist/get-sample-rate.d.ts +3 -0
  168. package/dist/get-sample-rate.js +14 -0
  169. package/dist/get-tracks.d.ts +8 -9
  170. package/dist/get-tracks.js +30 -23
  171. package/dist/get-video-codec.d.ts +2 -3
  172. package/dist/get-video-codec.js +4 -4
  173. package/dist/has-all-info.js +29 -18
  174. package/dist/index.d.ts +170 -66
  175. package/dist/index.js +10 -8
  176. package/dist/init-video.d.ts +7 -0
  177. package/dist/{parse-video.js → init-video.js} +31 -60
  178. package/dist/internal-parse-media.d.ts +2 -0
  179. package/dist/internal-parse-media.js +221 -0
  180. package/dist/is-audio-structure.d.ts +2 -0
  181. package/dist/is-audio-structure.js +31 -0
  182. package/dist/make-hvc1-codec-strings.js +4 -4
  183. package/dist/metadata/get-metadata.d.ts +2 -1
  184. package/dist/metadata/get-metadata.js +19 -3
  185. package/dist/metadata/metadata-from-iso.d.ts +3 -2
  186. package/dist/metadata/metadata-from-iso.js +3 -3
  187. package/dist/metadata/metadata-from-matroska.js +1 -1
  188. package/dist/metadata/metadata-from-riff.d.ts +1 -1
  189. package/dist/options.d.ts +88 -39
  190. package/dist/parse-and-download-media.d.ts +2 -0
  191. package/dist/parse-and-download-media.js +57 -0
  192. package/dist/parse-media.js +43 -172
  193. package/dist/parse-result.d.ts +10 -50
  194. package/dist/perform-seek.d.ts +10 -0
  195. package/dist/perform-seek.js +36 -0
  196. package/dist/readers/from-fetch.js +1 -1
  197. package/dist/readers/from-node.js +1 -1
  198. package/dist/readers/from-web-file.js +9 -9
  199. package/dist/readers/reader.d.ts +8 -3
  200. package/dist/register-track.d.ts +3 -3
  201. package/dist/register-track.js +5 -0
  202. package/dist/run-parse-iteration.d.ts +8 -0
  203. package/dist/run-parse-iteration.js +48 -0
  204. package/dist/samples-from-moof.js +1 -1
  205. package/dist/skip.d.ts +5 -0
  206. package/dist/skip.js +8 -0
  207. package/dist/state/aac-state.d.ts +13 -0
  208. package/dist/state/aac-state.js +17 -0
  209. package/dist/state/can-skip-tracks.js +5 -1
  210. package/dist/state/emitted-fields.js +4 -0
  211. package/dist/state/flac-state.d.ts +4 -0
  212. package/dist/state/flac-state.js +13 -0
  213. package/dist/state/has-tracks-section.d.ts +5 -2
  214. package/dist/state/has-tracks-section.js +11 -2
  215. package/dist/state/iso-base-media/cached-sample-positions.js +3 -3
  216. package/dist/state/iso-base-media/iso-state.d.ts +4 -2
  217. package/dist/state/iso-base-media/iso-state.js +2 -5
  218. package/dist/state/iso-base-media/moov-box.d.ts +5 -0
  219. package/dist/state/iso-base-media/moov-box.js +13 -0
  220. package/dist/state/last-eventloop-break.d.ts +4 -0
  221. package/dist/state/last-eventloop-break.js +18 -0
  222. package/dist/{may-skip-video-data → state}/may-skip-video-data.d.ts +1 -1
  223. package/dist/{may-skip-video-data → state}/need-samples-for-fields.js +4 -0
  224. package/dist/state/parser-state.d.ts +151 -51
  225. package/dist/state/parser-state.js +28 -5
  226. package/dist/state/sample-callbacks.d.ts +3 -2
  227. package/dist/state/sample-callbacks.js +1 -1
  228. package/dist/state/slow-duration-fps.d.ts +2 -0
  229. package/dist/state/slow-duration-fps.js +18 -0
  230. package/dist/state/structure.d.ts +7 -0
  231. package/dist/state/structure.js +56 -6
  232. package/dist/state/transport-stream.d.ts +3 -3
  233. package/dist/state/transport-stream.js +1 -1
  234. package/dist/state/webm.d.ts +2 -2
  235. package/dist/state/webm.js +1 -1
  236. package/dist/version.d.ts +1 -1
  237. package/dist/version.js +1 -1
  238. package/dist/webcodec-sample-types.d.ts +3 -3
  239. package/dist/writers/node.d.ts +4 -0
  240. package/dist/writers/node.js +81 -0
  241. package/dist/writers/writer.d.ts +17 -0
  242. package/dist/writers/writer.js +2 -0
  243. package/package.json +12 -9
  244. package/dist/boxes/iso-base-media/continue-mdat-routine.d.ts +0 -14
  245. package/dist/boxes/iso-base-media/continue-mdat-routine.js +0 -74
  246. package/dist/boxes/iso-base-media/get-children.d.ts +0 -8
  247. package/dist/boxes/iso-base-media/get-keyframes.d.ts +0 -3
  248. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +0 -6
  249. package/dist/boxes/iso-base-media/parse-all-children.d.ts +0 -8
  250. package/dist/boxes/iso-base-media/parse-all-children.js +0 -20
  251. package/dist/boxes/iso-base-media/parse-boxes.js +0 -46
  252. package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +0 -9
  253. package/dist/boxes/iso-base-media/parse-mdat-partially.js +0 -24
  254. package/dist/boxes/iso-base-media/process-box.d.ts +0 -7
  255. package/dist/boxes/mp3/get-tracks-from-mp3.d.ts +0 -4
  256. package/dist/boxes/mp3/id3-v2.d.ts +0 -0
  257. package/dist/boxes/mp3/id3-v2.js +0 -1
  258. package/dist/boxes/mp3/id3.d.ts +0 -6
  259. package/dist/boxes/mp3/parse-mpeg-header.d.ts +0 -6
  260. package/dist/boxes/riff/continue-after-riff-result.d.ts +0 -13
  261. package/dist/boxes/riff/continue-after-riff-result.js +0 -34
  262. package/dist/boxes/riff/expect-riff-box.d.ts +0 -11
  263. package/dist/boxes/riff/parse-box.d.ts +0 -9
  264. package/dist/boxes/riff/parse-box.js +0 -35
  265. package/dist/boxes/riff/parse-fmt-box.d.ts +0 -8
  266. package/dist/boxes/riff/parse-fmt-box.js +0 -35
  267. package/dist/boxes/riff/parse-movi.d.ts +0 -14
  268. package/dist/boxes/riff/parse-riff-body.js +0 -25
  269. package/dist/boxes/riff/parse-riff-header.d.ts +0 -7
  270. package/dist/boxes/riff/parse-video-section.d.ts +0 -6
  271. package/dist/boxes/transport-stream/parse-transport-stream.d.ts +0 -7
  272. package/dist/boxes/webm/segments/parse-children.d.ts +0 -9
  273. package/dist/boxes/webm/segments/parse-children.js +0 -21
  274. package/dist/bun-reader.d.ts +0 -1
  275. package/dist/bun-reader.js +0 -17
  276. package/dist/continue-mdat-routine.d.ts +0 -17
  277. package/dist/continue-mdat-routine.js +0 -92
  278. package/dist/parse-video.d.ts +0 -14
  279. package/dist/state/iso-state.d.ts +0 -4
  280. package/dist/state/iso-state.js +0 -13
  281. /package/dist/{boxes/iso-base-media/base-type.js → containers/aac/types.js} +0 -0
  282. /package/dist/{boxes → containers}/avc/codec-string.d.ts +0 -0
  283. /package/dist/{boxes → containers}/avc/codec-string.js +0 -0
  284. /package/dist/{boxes → containers}/avc/color.d.ts +0 -0
  285. /package/dist/{boxes → containers}/avc/color.js +0 -0
  286. /package/dist/{boxes → containers}/avc/create-sps-pps-data.d.ts +0 -0
  287. /package/dist/{boxes → containers}/avc/create-sps-pps-data.js +0 -0
  288. /package/dist/{boxes → containers}/avc/interpret-sps.d.ts +0 -0
  289. /package/dist/{boxes → containers}/avc/interpret-sps.js +0 -0
  290. /package/dist/{boxes → containers}/avc/key.js +0 -0
  291. /package/dist/{boxes → containers}/avc/parse-avc.d.ts +0 -0
  292. /package/dist/{boxes → containers}/avc/parse-avc.js +0 -0
  293. /package/dist/{boxes → containers}/avc/sps-and-pps.d.ts +0 -0
  294. /package/dist/{boxes → containers}/avc/sps-and-pps.js +0 -0
  295. /package/dist/{boxes/iso-base-media/void-box.js → containers/flac/types.js} +0 -0
  296. /package/dist/{boxes/riff/riff-box.js → containers/iso-base-media/base-media-box.js} +0 -0
  297. /package/dist/{boxes → containers}/iso-base-media/base-type.d.ts +0 -0
  298. /package/dist/{boxes/transport-stream/boxes.js → containers/iso-base-media/base-type.js} +0 -0
  299. /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.d.ts +0 -0
  300. /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.js +0 -0
  301. /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.d.ts +0 -0
  302. /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.js +0 -0
  303. /package/dist/{boxes → containers}/iso-base-media/esds/esds.d.ts +0 -0
  304. /package/dist/{boxes → containers}/iso-base-media/esds/esds.js +0 -0
  305. /package/dist/{boxes → containers}/iso-base-media/ftyp.d.ts +0 -0
  306. /package/dist/{boxes → containers}/iso-base-media/ftyp.js +0 -0
  307. /package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.d.ts +0 -0
  308. /package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.js +0 -0
  309. /package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.d.ts +0 -0
  310. /package/dist/{boxes → containers}/iso-base-media/make-track.d.ts +0 -0
  311. /package/dist/{boxes → containers}/iso-base-media/make-track.js +0 -0
  312. /package/dist/{boxes → containers}/iso-base-media/mdhd.d.ts +0 -0
  313. /package/dist/{boxes → containers}/iso-base-media/mdhd.js +0 -0
  314. /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.d.ts +0 -0
  315. /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.js +0 -0
  316. /package/dist/{boxes → containers}/iso-base-media/meta/ilst.d.ts +0 -0
  317. /package/dist/{boxes → containers}/iso-base-media/meta/ilst.js +0 -0
  318. /package/dist/{boxes → containers}/iso-base-media/mvhd.d.ts +0 -0
  319. /package/dist/{boxes → containers}/iso-base-media/mvhd.js +0 -0
  320. /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.d.ts +0 -0
  321. /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.js +0 -0
  322. /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.d.ts +0 -0
  323. /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.js +0 -0
  324. /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.d.ts +0 -0
  325. /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.js +0 -0
  326. /package/dist/{boxes → containers}/iso-base-media/stsd/colr.d.ts +0 -0
  327. /package/dist/{boxes → containers}/iso-base-media/stsd/colr.js +0 -0
  328. /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.d.ts +0 -0
  329. /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.js +0 -0
  330. /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.d.ts +0 -0
  331. /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.js +0 -0
  332. /package/dist/{boxes → containers}/iso-base-media/stsd/keys.d.ts +0 -0
  333. /package/dist/{boxes → containers}/iso-base-media/stsd/keys.js +0 -0
  334. /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.d.ts +0 -0
  335. /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.js +0 -0
  336. /package/dist/{boxes → containers}/iso-base-media/stsd/stco.d.ts +0 -0
  337. /package/dist/{boxes → containers}/iso-base-media/stsd/stco.js +0 -0
  338. /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.d.ts +0 -0
  339. /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.js +0 -0
  340. /package/dist/{boxes → containers}/iso-base-media/stsd/stss.d.ts +0 -0
  341. /package/dist/{boxes → containers}/iso-base-media/stsd/stss.js +0 -0
  342. /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.d.ts +0 -0
  343. /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.js +0 -0
  344. /package/dist/{boxes → containers}/iso-base-media/stsd/stts.d.ts +0 -0
  345. /package/dist/{boxes → containers}/iso-base-media/stsd/stts.js +0 -0
  346. /package/dist/{boxes → containers}/iso-base-media/tfdt.d.ts +0 -0
  347. /package/dist/{boxes → containers}/iso-base-media/tfdt.js +0 -0
  348. /package/dist/{boxes → containers}/iso-base-media/tfhd.d.ts +0 -0
  349. /package/dist/{boxes → containers}/iso-base-media/tfhd.js +0 -0
  350. /package/dist/{boxes → containers}/iso-base-media/tkhd.d.ts +0 -0
  351. /package/dist/{boxes → containers}/iso-base-media/tkhd.js +0 -0
  352. /package/dist/{boxes → containers}/iso-base-media/to-date.d.ts +0 -0
  353. /package/dist/{boxes → containers}/iso-base-media/to-date.js +0 -0
  354. /package/dist/{boxes → containers}/iso-base-media/trun.d.ts +0 -0
  355. /package/dist/{boxes → containers}/iso-base-media/trun.js +0 -0
  356. /package/dist/{boxes → containers}/iso-base-media/void-box.d.ts +0 -0
  357. /package/dist/{boxes → containers}/mp3/get-duration.d.ts +0 -0
  358. /package/dist/{boxes → containers}/mp3/get-frame-length.d.ts +0 -0
  359. /package/dist/{boxes → containers}/mp3/get-frame-length.js +0 -0
  360. /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.d.ts +0 -0
  361. /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.js +0 -0
  362. /package/dist/{boxes → containers}/mp3/id3-v1.d.ts +0 -0
  363. /package/dist/{boxes → containers}/mp3/id3-v1.js +0 -0
  364. /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.d.ts +0 -0
  365. /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.js +0 -0
  366. /package/dist/{boxes → containers}/riff/is-movi.d.ts +0 -0
  367. /package/dist/{boxes → containers}/riff/is-movi.js +0 -0
  368. /package/dist/{boxes → containers}/riff/parse-avih.d.ts +0 -0
  369. /package/dist/{boxes → containers}/riff/parse-avih.js +0 -0
  370. /package/dist/{boxes → containers}/riff/parse-isft.d.ts +0 -0
  371. /package/dist/{boxes → containers}/riff/parse-isft.js +0 -0
  372. /package/dist/{boxes → containers}/riff/parse-strf.d.ts +0 -0
  373. /package/dist/{boxes → containers}/riff/parse-strf.js +0 -0
  374. /package/dist/{boxes → containers}/riff/parse-strh.d.ts +0 -0
  375. /package/dist/{boxes → containers}/riff/parse-strh.js +0 -0
  376. /package/dist/{boxes → containers}/riff/timescale.d.ts +0 -0
  377. /package/dist/{boxes → containers}/riff/timescale.js +0 -0
  378. /package/dist/{boxes → containers}/riff/traversal.js +0 -0
  379. /package/dist/{boxes → containers}/transport-stream/adts-header.d.ts +0 -0
  380. /package/dist/{boxes → containers}/transport-stream/boxes.d.ts +0 -0
  381. /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.d.ts +0 -0
  382. /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.js +0 -0
  383. /package/dist/{boxes → containers}/transport-stream/find-separator.d.ts +0 -0
  384. /package/dist/{boxes → containers}/transport-stream/find-separator.js +0 -0
  385. /package/dist/{boxes → containers}/transport-stream/get-tracks.d.ts +0 -0
  386. /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.d.ts +0 -0
  387. /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.js +0 -0
  388. /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.d.ts +0 -0
  389. /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.js +0 -0
  390. /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.d.ts +0 -0
  391. /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.js +0 -0
  392. /package/dist/{boxes → containers}/transport-stream/parse-pat.d.ts +0 -0
  393. /package/dist/{boxes → containers}/transport-stream/parse-pat.js +0 -0
  394. /package/dist/{boxes → containers}/transport-stream/parse-pes.d.ts +0 -0
  395. /package/dist/{boxes → containers}/transport-stream/parse-pes.js +0 -0
  396. /package/dist/{boxes → containers}/transport-stream/parse-pmt.d.ts +0 -0
  397. /package/dist/{boxes → containers}/transport-stream/parse-pmt.js +0 -0
  398. /package/dist/{boxes → containers}/transport-stream/process-stream-buffers.d.ts +0 -0
  399. /package/dist/{boxes → containers}/transport-stream/traversal.d.ts +0 -0
  400. /package/dist/{boxes → containers}/transport-stream/traversal.js +0 -0
  401. /package/dist/{boxes → containers}/webm/allowed-partial-segments.d.ts +0 -0
  402. /package/dist/{boxes → containers}/webm/allowed-partial-segments.js +0 -0
  403. /package/dist/{boxes → containers}/webm/av1-codec-private.d.ts +0 -0
  404. /package/dist/{boxes → containers}/webm/av1-codec-private.js +0 -0
  405. /package/dist/{boxes → containers}/webm/color.d.ts +0 -0
  406. /package/dist/{boxes → containers}/webm/color.js +0 -0
  407. /package/dist/{boxes → containers}/webm/description.d.ts +0 -0
  408. /package/dist/{boxes → containers}/webm/description.js +0 -0
  409. /package/dist/{boxes → containers}/webm/get-ready-tracks.d.ts +0 -0
  410. /package/dist/{boxes → containers}/webm/get-ready-tracks.js +0 -0
  411. /package/dist/{boxes → containers}/webm/get-sample-from-block.d.ts +0 -0
  412. /package/dist/{boxes → containers}/webm/get-sample-from-block.js +0 -0
  413. /package/dist/{boxes → containers}/webm/make-track.d.ts +0 -0
  414. /package/dist/{boxes → containers}/webm/make-track.js +0 -0
  415. /package/dist/{boxes → containers}/webm/segments/all-segments.d.ts +0 -0
  416. /package/dist/{boxes → containers}/webm/segments/all-segments.js +0 -0
  417. /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.d.ts +0 -0
  418. /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.js +0 -0
  419. /package/dist/{boxes → containers}/webm/segments/track-entry.d.ts +0 -0
  420. /package/dist/{boxes → containers}/webm/segments/track-entry.js +0 -0
  421. /package/dist/{boxes → containers}/webm/traversal.d.ts +0 -0
  422. /package/dist/{boxes → containers}/webm/traversal.js +0 -0
  423. /package/dist/{may-skip-video-data → state}/may-skip-video-data.js +0 -0
  424. /package/dist/{may-skip-video-data → state}/need-samples-for-fields.d.ts +0 -0
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.internalParseMedia = void 0;
4
+ const emit_available_info_1 = require("./emit-available-info");
5
+ const get_fields_from_callbacks_1 = require("./get-fields-from-callbacks");
6
+ const has_all_info_1 = require("./has-all-info");
7
+ const log_1 = require("./log");
8
+ const perform_seek_1 = require("./perform-seek");
9
+ const run_parse_iteration_1 = require("./run-parse-iteration");
10
+ const parser_state_1 = require("./state/parser-state");
11
+ const throttled_progress_1 = require("./throttled-progress");
12
+ const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue, reader: readerInterface, onAudioTrack, onVideoTrack, signal, logLevel, onParseProgress: onParseProgressDoNotCallDirectly, progressIntervalInMs, mode, onDiscardedData, onError, ...more }) {
13
+ var _a;
14
+ const fieldsInReturnValue = _fieldsInReturnValue !== null && _fieldsInReturnValue !== void 0 ? _fieldsInReturnValue : {};
15
+ const fields = (0, get_fields_from_callbacks_1.getFieldsFromCallback)({
16
+ fields: fieldsInReturnValue,
17
+ callbacks: more,
18
+ });
19
+ const { reader: readerInstance, contentLength, name, contentType, supportsContentRange, } = await readerInterface.read({ src, range: null, signal });
20
+ if (contentLength === null) {
21
+ throw new Error('Cannot read media without a content length. This is currently not supported. Ensure the media has a "Content-Length" HTTP header.');
22
+ }
23
+ if (!supportsContentRange) {
24
+ throw new Error('Cannot read media without it supporting the "Content-Range" header. This is currently not supported. Ensure the media supports the "Content-Range" HTTP header.');
25
+ }
26
+ const hasAudioTrackHandlers = Boolean(onAudioTrack);
27
+ const hasVideoTrackHandlers = Boolean(onVideoTrack);
28
+ if (!hasAudioTrackHandlers &&
29
+ !hasVideoTrackHandlers &&
30
+ Object.values(fields).every((v) => !v) &&
31
+ mode === 'query') {
32
+ log_1.Log.warn(logLevel, new Error('Warning - No `fields` and no `on*` callbacks were passed to `parseMedia()`. Specify the data you would like to retrieve.'));
33
+ }
34
+ let timeIterating = 0;
35
+ let timeReadingData = 0;
36
+ let timeSeeking = 0;
37
+ let timeCheckingIfDone = 0;
38
+ let timeFreeingData = 0;
39
+ let errored = null;
40
+ const state = (0, parser_state_1.makeParserState)({
41
+ hasAudioTrackHandlers,
42
+ hasVideoTrackHandlers,
43
+ signal,
44
+ fields,
45
+ onAudioTrack: onAudioTrack !== null && onAudioTrack !== void 0 ? onAudioTrack : null,
46
+ onVideoTrack: onVideoTrack !== null && onVideoTrack !== void 0 ? onVideoTrack : null,
47
+ contentLength,
48
+ logLevel,
49
+ mode,
50
+ readerInterface,
51
+ src,
52
+ onDiscardedData,
53
+ });
54
+ const { iterator } = state;
55
+ let currentReader = readerInstance;
56
+ const returnValue = {};
57
+ const moreFields = more;
58
+ const throttledState = (0, throttled_progress_1.throttledStateUpdate)({
59
+ updateFn: onParseProgressDoNotCallDirectly !== null && onParseProgressDoNotCallDirectly !== void 0 ? onParseProgressDoNotCallDirectly : null,
60
+ everyMilliseconds: progressIntervalInMs !== null && progressIntervalInMs !== void 0 ? progressIntervalInMs : 100,
61
+ signal,
62
+ totalBytes: contentLength,
63
+ });
64
+ const triggerInfoEmit = async () => {
65
+ const availableInfo = (0, has_all_info_1.getAvailableInfo)({
66
+ fieldsToFetch: fields,
67
+ state,
68
+ });
69
+ await (0, emit_available_info_1.emitAvailableInfo)({
70
+ hasInfo: availableInfo,
71
+ callbacks: moreFields,
72
+ fieldsInReturnValue,
73
+ state,
74
+ returnValue,
75
+ name,
76
+ mimeType: contentType,
77
+ });
78
+ };
79
+ const checkIfDone = async () => {
80
+ const startCheck = Date.now();
81
+ const hasAll = (0, has_all_info_1.hasAllInfo)({
82
+ fields,
83
+ state,
84
+ });
85
+ timeCheckingIfDone += Date.now() - startCheck;
86
+ if (hasAll && mode === 'query') {
87
+ log_1.Log.verbose(logLevel, 'Got all info, skipping to the end.');
88
+ state.increaseSkippedBytes(contentLength - state.iterator.counter.getOffset());
89
+ return true;
90
+ }
91
+ if (state.iterator.counter.getOffset() === contentLength) {
92
+ log_1.Log.verbose(logLevel, 'Reached end of file');
93
+ await state.discardReadBytes(true);
94
+ return true;
95
+ }
96
+ if (state.iterator.counter.getOffset() + state.iterator.bytesRemaining() ===
97
+ contentLength &&
98
+ errored) {
99
+ log_1.Log.verbose(logLevel, 'Reached end of file and errorred');
100
+ return true;
101
+ }
102
+ return false;
103
+ };
104
+ await triggerInfoEmit();
105
+ let iterationWithThisOffset = 0;
106
+ while (!(await checkIfDone())) {
107
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
108
+ throw new Error('Aborted');
109
+ }
110
+ const offsetBefore = iterator.counter.getOffset();
111
+ const fetchMoreData = async () => {
112
+ const result = await currentReader.reader.read();
113
+ if (result.value) {
114
+ iterator.addData(result.value);
115
+ }
116
+ return result.done;
117
+ };
118
+ const readStart = Date.now();
119
+ while (iterator.bytesRemaining() < 0) {
120
+ const done = await fetchMoreData();
121
+ if (done) {
122
+ break;
123
+ }
124
+ }
125
+ const hasBigBuffer = iterator.bytesRemaining() > 100000;
126
+ if (iterationWithThisOffset > 0 || !hasBigBuffer) {
127
+ await fetchMoreData();
128
+ }
129
+ await state.eventLoop.eventLoopBreakIfNeeded();
130
+ timeReadingData += Date.now() - readStart;
131
+ (_a = throttledState.update) === null || _a === void 0 ? void 0 : _a.call(throttledState, () => ({
132
+ bytes: iterator.counter.getOffset(),
133
+ percentage: contentLength
134
+ ? iterator.counter.getOffset() / contentLength
135
+ : null,
136
+ totalBytes: contentLength,
137
+ }));
138
+ if (!errored) {
139
+ log_1.Log.trace(logLevel, `Continuing parsing of file, currently at position ${iterator.counter.getOffset()}/${contentLength} (0x${iterator.counter.getOffset().toString(16)})`);
140
+ if (iterationWithThisOffset > 300) {
141
+ throw new Error('Infinite loop detected. The parser is not progressing. This is likely a bug in the parser.');
142
+ }
143
+ try {
144
+ await triggerInfoEmit();
145
+ const start = Date.now();
146
+ const skip = await (0, run_parse_iteration_1.runParseIteration)({
147
+ state,
148
+ mimeType: contentType,
149
+ contentLength,
150
+ name,
151
+ });
152
+ timeIterating += Date.now() - start;
153
+ if (skip !== null) {
154
+ state.increaseSkippedBytes(skip.skipTo - iterator.counter.getOffset());
155
+ if (skip.skipTo === contentLength) {
156
+ log_1.Log.verbose(logLevel, 'Skipped to end of file, not fetching.');
157
+ break;
158
+ }
159
+ const seekStart = Date.now();
160
+ currentReader = await (0, perform_seek_1.performSeek)({
161
+ seekTo: skip.skipTo,
162
+ currentReader,
163
+ readerInterface,
164
+ src,
165
+ state,
166
+ });
167
+ timeSeeking += Date.now() - seekStart;
168
+ }
169
+ }
170
+ catch (e) {
171
+ const err = await onError(e);
172
+ if (!err.action) {
173
+ throw new Error('onError was used but did not return an "action" field. See docs for this API on how to use onError.');
174
+ }
175
+ if (err.action === 'fail') {
176
+ throw e;
177
+ }
178
+ if (err.action === 'download') {
179
+ errored = e;
180
+ log_1.Log.verbose(logLevel, 'Error was handled by onError and deciding to continue.');
181
+ }
182
+ }
183
+ const didProgress = iterator.counter.getOffset() > offsetBefore;
184
+ if (!didProgress) {
185
+ iterationWithThisOffset++;
186
+ }
187
+ }
188
+ const timeFreeStart = Date.now();
189
+ await state.discardReadBytes(false);
190
+ timeFreeingData += Date.now() - timeFreeStart;
191
+ }
192
+ log_1.Log.verbose(logLevel, 'Finished parsing file');
193
+ // Force assign
194
+ await (0, emit_available_info_1.emitAvailableInfo)({
195
+ hasInfo: Object.keys(fields).reduce((acc, key) => {
196
+ if (fields === null || fields === void 0 ? void 0 : fields[key]) {
197
+ acc[key] = true;
198
+ }
199
+ return acc;
200
+ }, {}),
201
+ callbacks: moreFields,
202
+ fieldsInReturnValue,
203
+ state,
204
+ returnValue,
205
+ mimeType: contentType,
206
+ name,
207
+ });
208
+ log_1.Log.verbose(logLevel, `Time iterating over file: ${timeIterating}ms`);
209
+ log_1.Log.verbose(logLevel, `Time fetching data: ${timeReadingData}ms`);
210
+ log_1.Log.verbose(logLevel, `Time seeking: ${timeSeeking}ms`);
211
+ log_1.Log.verbose(logLevel, `Time checking if done: ${timeCheckingIfDone}ms`);
212
+ log_1.Log.verbose(logLevel, `Time freeing data: ${timeFreeingData}ms`);
213
+ currentReader.abort();
214
+ iterator === null || iterator === void 0 ? void 0 : iterator.destroy();
215
+ state.callbacks.tracks.ensureHasTracksAtEnd(fields);
216
+ if (errored) {
217
+ throw errored;
218
+ }
219
+ return returnValue;
220
+ };
221
+ exports.internalParseMedia = internalParseMedia;
@@ -0,0 +1,2 @@
1
+ import type { Structure } from './parse-result';
2
+ export declare const isAudioStructure: (structure: Structure) => boolean;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAudioStructure = void 0;
4
+ const isAudioStructure = (structure) => {
5
+ if (structure.type === 'mp3') {
6
+ return true;
7
+ }
8
+ if (structure.type === 'wav') {
9
+ return true;
10
+ }
11
+ if (structure.type === 'aac') {
12
+ return true;
13
+ }
14
+ if (structure.type === 'flac') {
15
+ return true;
16
+ }
17
+ if (structure.type === 'iso-base-media') {
18
+ return false;
19
+ }
20
+ if (structure.type === 'matroska') {
21
+ return false;
22
+ }
23
+ if (structure.type === 'transport-stream') {
24
+ return false;
25
+ }
26
+ if (structure.type === 'riff') {
27
+ return false;
28
+ }
29
+ throw new Error(`Unhandled structure type: ${structure}`);
30
+ };
31
+ exports.isAudioStructure = isAudioStructure;
@@ -17,12 +17,12 @@ const getHvc1CodecString = (data) => {
17
17
  // general_constraint_indicator_flags(48)
18
18
  const generalConstraintIndicator = data.getSlice(6);
19
19
  const generalLevelIdc = data.getUint8();
20
- let reversedGeneralProfileSpace = 0;
20
+ let profileId = 0;
21
21
  for (let i = 0; i < 32; i++) {
22
- reversedGeneralProfileSpace |= generalProfileCompatibility & 1;
22
+ profileId |= generalProfileCompatibility & 1;
23
23
  if (i === 31)
24
24
  break;
25
- reversedGeneralProfileSpace <<= 1;
25
+ profileId <<= 1;
26
26
  generalProfileCompatibility >>= 1;
27
27
  }
28
28
  const profileSpaceChar = generalProfileSpace === 0
@@ -42,6 +42,6 @@ const getHvc1CodecString = (data) => {
42
42
  hasByte = true;
43
43
  }
44
44
  }
45
- return `${profileSpaceChar}${generalProfileIdc.toString(16)}.${reversedGeneralProfileSpace.toString(16)}.${generalTierChar}${generalLevelIdc}.${generalConstraintString}`;
45
+ return `${profileSpaceChar}${generalProfileIdc.toString(16)}.${profileId.toString(16)}.${generalTierChar}${generalLevelIdc}.${generalConstraintString}`;
46
46
  };
47
47
  exports.getHvc1CodecString = getHvc1CodecString;
@@ -1,8 +1,9 @@
1
1
  import type { Structure } from '../parse-result';
2
+ import type { ParserState } from '../state/parser-state';
2
3
  export type MetadataEntry = {
3
4
  key: string;
4
5
  value: string | number;
5
6
  trackId: number | null;
6
7
  };
7
- export declare const getMetadata: (structure: Structure) => MetadataEntry[];
8
+ export declare const getMetadata: (state: ParserState) => MetadataEntry[];
8
9
  export declare const hasMetadata: (structure: Structure) => boolean;
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasMetadata = exports.getMetadata = void 0;
4
- const get_metadata_from_mp3_1 = require("../boxes/mp3/get-metadata-from-mp3");
4
+ const get_metadata_from_flac_1 = require("../containers/flac/get-metadata-from-flac");
5
+ const get_metadata_from_mp3_1 = require("../containers/mp3/get-metadata-from-mp3");
6
+ const get_metadata_from_wav_1 = require("../containers/wav/get-metadata-from-wav");
5
7
  const metadata_from_iso_1 = require("./metadata-from-iso");
6
8
  const metadata_from_matroska_1 = require("./metadata-from-matroska");
7
9
  const metadata_from_riff_1 = require("./metadata-from-riff");
8
- const getMetadata = (structure) => {
10
+ const getMetadata = (state) => {
11
+ var _a, _b;
12
+ const structure = state.getStructure();
9
13
  if (structure.type === 'matroska') {
10
14
  return (0, metadata_from_matroska_1.getMetadataFromMatroska)(structure);
11
15
  }
@@ -22,13 +26,25 @@ const getMetadata = (structure) => {
22
26
  }
23
27
  return tags;
24
28
  }
25
- return (0, metadata_from_iso_1.getMetadataFromIsoBase)(structure);
29
+ if (structure.type === 'wav') {
30
+ return (_a = (0, get_metadata_from_wav_1.getMetadataFromWav)(structure)) !== null && _a !== void 0 ? _a : [];
31
+ }
32
+ if (structure.type === 'aac') {
33
+ return [];
34
+ }
35
+ if (structure.type === 'flac') {
36
+ return (_b = (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure)) !== null && _b !== void 0 ? _b : [];
37
+ }
38
+ return (0, metadata_from_iso_1.getMetadataFromIsoBase)(state);
26
39
  };
27
40
  exports.getMetadata = getMetadata;
28
41
  const hasMetadata = (structure) => {
29
42
  if (structure.type === 'mp3') {
30
43
  return (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure) !== null;
31
44
  }
45
+ if (structure.type === 'wav') {
46
+ return (0, get_metadata_from_wav_1.getMetadataFromWav)(structure) !== null;
47
+ }
32
48
  return false;
33
49
  };
34
50
  exports.hasMetadata = hasMetadata;
@@ -1,4 +1,5 @@
1
- import type { IsoBaseMediaStructure, RegularBox } from '../parse-result';
1
+ import type { RegularBox } from '../containers/iso-base-media/base-media-box';
2
+ import type { ParserState } from '../state/parser-state';
2
3
  import type { MetadataEntry } from './get-metadata';
3
4
  export declare const parseIsoMetaBox: (meta: RegularBox, trackId: number | null) => MetadataEntry[];
4
- export declare const getMetadataFromIsoBase: (isoBase: IsoBaseMediaStructure) => MetadataEntry[];
5
+ export declare const getMetadataFromIsoBase: (state: ParserState) => MetadataEntry[];
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMetadataFromIsoBase = exports.parseIsoMetaBox = void 0;
4
- const traversal_1 = require("../boxes/iso-base-media/traversal");
4
+ const traversal_1 = require("../containers/iso-base-media/traversal");
5
5
  const truthy_1 = require("../truthy");
6
6
  /**
7
7
  *
@@ -115,8 +115,8 @@ const parseIsoMetaBox = (meta, trackId) => {
115
115
  return entries;
116
116
  };
117
117
  exports.parseIsoMetaBox = parseIsoMetaBox;
118
- const getMetadataFromIsoBase = (isoBase) => {
119
- const moov = (0, traversal_1.getMoovBox)(isoBase.boxes);
118
+ const getMetadataFromIsoBase = (state) => {
119
+ const moov = (0, traversal_1.getMoovBox)(state);
120
120
  if (!moov) {
121
121
  return [];
122
122
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMetadataFromMatroska = void 0;
4
- const traversal_1 = require("../boxes/webm/traversal");
4
+ const traversal_1 = require("../containers/webm/traversal");
5
5
  const removeEndZeroes = (value) => {
6
6
  return value.endsWith('\u0000') ? removeEndZeroes(value.slice(0, -1)) : value;
7
7
  };
@@ -1,3 +1,3 @@
1
- import type { RiffStructure } from '../parse-result';
1
+ import type { RiffStructure } from '../containers/riff/riff-box';
2
2
  import type { MetadataEntry } from './get-metadata';
3
3
  export declare const getMetadataFromRiff: (structure: RiffStructure) => MetadataEntry[];
package/dist/options.d.ts CHANGED
@@ -8,6 +8,7 @@ import type { ReaderInterface } from './readers/reader';
8
8
  import type { MediaParserEmbeddedImage } from './state/images';
9
9
  import type { InternalStats } from './state/parser-state';
10
10
  import type { OnAudioTrack, OnVideoTrack } from './webcodec-sample-types';
11
+ import type { WriterInterface } from './writers/writer';
11
12
  export type KnownAudioCodecs = 'aac' | 'mp3' | 'aiff' | 'opus' | 'pcm' | 'vorbis' | 'unknown';
12
13
  export type ParseMediaFields = {
13
14
  dimensions: boolean;
@@ -32,7 +33,11 @@ export type ParseMediaFields = {
32
33
  keyframes: boolean;
33
34
  slowKeyframes: boolean;
34
35
  slowNumberOfFrames: boolean;
36
+ slowVideoBitrate: boolean;
37
+ slowAudioBitrate: boolean;
35
38
  images: boolean;
39
+ sampleRate: boolean;
40
+ numberOfAudioChannels: boolean;
36
41
  };
37
42
  export type AllParseMediaFields = {
38
43
  dimensions: true;
@@ -58,6 +63,10 @@ export type AllParseMediaFields = {
58
63
  keyframes: true;
59
64
  slowKeyframes: true;
60
65
  images: true;
66
+ sampleRate: true;
67
+ numberOfAudioChannels: true;
68
+ slowVideoBitrate: true;
69
+ slowAudioBitrate: true;
61
70
  };
62
71
  export type AllOptions<Fields extends ParseMediaFields> = {
63
72
  dimensions: Fields['dimensions'];
@@ -83,13 +92,17 @@ export type AllOptions<Fields extends ParseMediaFields> = {
83
92
  slowKeyframes: Fields['slowKeyframes'];
84
93
  slowNumberOfFrames: Fields['slowNumberOfFrames'];
85
94
  images: Fields['images'];
95
+ sampleRate: Fields['sampleRate'];
96
+ numberOfAudioChannels: Fields['numberOfAudioChannels'];
97
+ slowVideoBitrate: Fields['slowVideoBitrate'];
98
+ slowAudioBitrate: Fields['slowAudioBitrate'];
86
99
  };
87
100
  export type Options<Fields extends ParseMediaFields> = Partial<AllOptions<Fields>>;
88
101
  export type TracksField = {
89
102
  videoTracks: VideoTrack[];
90
103
  audioTracks: AudioTrack[];
91
104
  };
92
- export type ParseMediaContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3';
105
+ export type MediaParserContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3' | 'aac' | 'flac' | 'wav';
93
106
  export type MediaParserKeyframe = {
94
107
  positionInBytes: number;
95
108
  sizeInBytes: number;
@@ -97,31 +110,36 @@ export type MediaParserKeyframe = {
97
110
  decodingTimeInSeconds: number;
98
111
  trackId: number;
99
112
  };
100
- export interface ParseMediaCallbacks {
101
- onDimensions?: (dimensions: Dimensions | null) => void;
102
- onDurationInSeconds?: (durationInSeconds: number | null) => void;
103
- onSlowDurationInSeconds?: (durationInSeconds: number) => void;
104
- onSlowFps?: (fps: number) => void;
105
- onStructure?: (structure: Structure) => void;
106
- onFps?: (fps: number | null) => void;
107
- onVideoCodec?: (codec: MediaParserVideoCodec | null) => void;
108
- onAudioCodec?: (codec: MediaParserAudioCodec | null) => void;
109
- onTracks?: (tracks: TracksField) => void;
110
- onRotation?: (rotation: number | null) => void;
111
- onUnrotatedDimensions?: (dimensions: Dimensions | null) => void;
112
- onInternalStats?: (internalStats: InternalStats) => void;
113
- onSize?: (size: number | null) => void;
114
- onName?: (name: string) => void;
115
- onContainer?: (container: ParseMediaContainer) => void;
116
- onIsHdr?: (isHdr: boolean) => void;
117
- onMetadata?: (metadata: MetadataEntry[]) => void;
118
- onLocation?: (location: MediaParserLocation | null) => void;
119
- onMimeType?: (mimeType: string | null) => void;
120
- onKeyframes?: (keyframes: MediaParserKeyframe[] | null) => void;
121
- onSlowKeyframes?: (keyframes: MediaParserKeyframe[]) => void;
122
- onSlowNumberOfFrames?: (samples: number) => void;
123
- onImages?: (images: MediaParserEmbeddedImage[]) => void;
124
- }
113
+ export type MandatoryParseMediaCallbacks = {
114
+ onDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
115
+ onDurationInSeconds: null | ((durationInSeconds: number | null) => unknown | Promise<unknown>);
116
+ onSlowDurationInSeconds: null | ((durationInSeconds: number) => unknown | Promise<unknown>);
117
+ onSlowFps: null | ((fps: number) => unknown | Promise<unknown>);
118
+ onStructure: null | ((structure: Structure) => unknown | Promise<unknown>);
119
+ onFps: null | ((fps: number | null) => unknown | Promise<unknown>);
120
+ onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => unknown | Promise<unknown>);
121
+ onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => unknown | Promise<unknown>);
122
+ onTracks: null | ((tracks: TracksField) => unknown | Promise<unknown>);
123
+ onRotation: null | ((rotation: number | null) => unknown | Promise<unknown>);
124
+ onUnrotatedDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
125
+ onInternalStats: null | ((internalStats: InternalStats) => unknown | Promise<unknown>);
126
+ onSize: null | ((size: number | null) => unknown | Promise<unknown>);
127
+ onName: null | ((name: string) => unknown | Promise<unknown>);
128
+ onContainer: null | ((container: MediaParserContainer) => unknown | Promise<unknown>);
129
+ onIsHdr: null | ((isHdr: boolean) => unknown | Promise<unknown>);
130
+ onMetadata: null | ((metadata: MetadataEntry[]) => unknown | Promise<unknown>);
131
+ onLocation: null | ((location: MediaParserLocation | null) => unknown | Promise<unknown>);
132
+ onMimeType: null | ((mimeType: string | null) => unknown | Promise<unknown>);
133
+ onKeyframes: null | ((keyframes: MediaParserKeyframe[] | null) => unknown | Promise<unknown>);
134
+ onSlowKeyframes: null | ((keyframes: MediaParserKeyframe[]) => unknown | Promise<unknown>);
135
+ onSlowNumberOfFrames: null | ((samples: number) => unknown | Promise<unknown>);
136
+ onImages: null | ((images: MediaParserEmbeddedImage[]) => unknown | Promise<unknown>);
137
+ onSampleRate: null | ((sampleRate: number | null) => unknown | Promise<unknown>);
138
+ onNumberOfAudioChannels: null | ((numberOfChannels: number | null) => unknown | Promise<unknown>);
139
+ onSlowVideoBitrate: null | ((videoBitrate: number | null) => unknown | Promise<unknown>);
140
+ onSlowAudioBitrate: null | ((audioBitrate: number | null) => unknown | Promise<unknown>);
141
+ };
142
+ export type ParseMediaCallbacks = Partial<MandatoryParseMediaCallbacks>;
125
143
  export interface ParseMediaData {
126
144
  dimensions: Dimensions | null;
127
145
  durationInSeconds: number | null;
@@ -140,33 +158,64 @@ export interface ParseMediaData {
140
158
  name: string;
141
159
  metadata: MetadataEntry[];
142
160
  location: MediaParserLocation | null;
143
- container: ParseMediaContainer;
161
+ container: MediaParserContainer;
144
162
  mimeType: string | null;
145
163
  keyframes: MediaParserKeyframe[] | null;
146
164
  slowKeyframes: MediaParserKeyframe[];
147
165
  slowNumberOfFrames: number;
148
166
  images: MediaParserEmbeddedImage[];
167
+ sampleRate: number | null;
168
+ numberOfAudioChannels: number | null;
169
+ slowVideoBitrate: number | null;
170
+ slowAudioBitrate: number | null;
149
171
  }
150
172
  export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {
151
173
  [K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
152
174
  };
153
- export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
154
- fields?: F;
155
- } & ParseMediaCallbacks;
156
175
  export type ParseMediaProgress = {
157
176
  bytes: number;
158
177
  percentage: number | null;
159
178
  totalBytes: number | null;
160
179
  };
161
180
  export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
181
+ type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
182
+ reader: ReaderInterface;
183
+ signal: AbortSignal | undefined;
184
+ logLevel: LogLevel;
185
+ onParseProgress: ParseMediaOnProgress | null;
186
+ progressIntervalInMs: number | null;
187
+ fields: F | null;
188
+ } & MandatoryParseMediaCallbacks;
189
+ type ParseMediaSampleCallbacks = {
190
+ onAudioTrack: OnAudioTrack | null;
191
+ onVideoTrack: OnVideoTrack | null;
192
+ };
193
+ export type ParseMediaMode = 'query' | 'download';
194
+ export type ParseMediaSrc = string | Blob;
195
+ export type OnDiscardedData = (data: Uint8Array) => Promise<void>;
196
+ export type ContinueAfterError = {
197
+ action: 'fail';
198
+ } | {
199
+ action: 'download';
200
+ };
201
+ export type ParseMediaOnError = (error: Error) => ContinueAfterError | Promise<ContinueAfterError>;
202
+ export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = {
203
+ src: ParseMediaSrc;
204
+ } & OptionalParseMediaParams<F> & ParseMediaSampleCallbacks & {
205
+ onDiscardedData: OnDiscardedData | null;
206
+ mode: ParseMediaMode;
207
+ onError: ParseMediaOnError;
208
+ };
162
209
  export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
163
- src: string | Blob;
164
- reader?: ReaderInterface;
165
- onAudioTrack?: OnAudioTrack;
166
- onVideoTrack?: OnVideoTrack;
167
- signal?: AbortSignal;
168
- logLevel?: LogLevel;
169
- onParseProgress?: ParseMediaOnProgress;
170
- progressIntervalInMs?: number;
171
- } & ParseMediaDynamicOptions<F>;
210
+ src: ParseMediaSrc;
211
+ } & Partial<OptionalParseMediaParams<F>> & Partial<ParseMediaSampleCallbacks>;
212
+ export type DownloadAndParseMediaOptions<F extends Options<ParseMediaFields>> = {
213
+ src: ParseMediaSrc;
214
+ } & Partial<OptionalParseMediaParams<F>> & {
215
+ writer: WriterInterface;
216
+ onError?: ParseMediaOnError;
217
+ };
218
+ export type InternalParseMedia = <F extends Options<ParseMediaFields>>(options: InternalParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
172
219
  export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
220
+ export type DownloadAndParseMedia = <F extends Options<ParseMediaFields>>(options: DownloadAndParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
221
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { DownloadAndParseMedia } from './options';
2
+ export declare const parseAndDownloadMedia: DownloadAndParseMedia;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseAndDownloadMedia = void 0;
4
+ const internal_parse_media_1 = require("./internal-parse-media");
5
+ const from_fetch_1 = require("./readers/from-fetch");
6
+ const parseAndDownloadMedia = async (options) => {
7
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
8
+ const content = await options.writer.createContent({
9
+ filename: 'hmm',
10
+ mimeType: 'shouldnotmatter',
11
+ });
12
+ const returnValue = await (0, internal_parse_media_1.internalParseMedia)({
13
+ fields: (_a = options.fields) !== null && _a !== void 0 ? _a : null,
14
+ logLevel: (_b = options.logLevel) !== null && _b !== void 0 ? _b : 'info',
15
+ mode: 'download',
16
+ onAudioCodec: (_c = options.onAudioCodec) !== null && _c !== void 0 ? _c : null,
17
+ onAudioTrack: null,
18
+ onContainer: (_d = options.onContainer) !== null && _d !== void 0 ? _d : null,
19
+ onDimensions: (_e = options.onDimensions) !== null && _e !== void 0 ? _e : null,
20
+ onDiscardedData: async (data) => {
21
+ await content.write(data);
22
+ },
23
+ onDurationInSeconds: (_f = options.onDurationInSeconds) !== null && _f !== void 0 ? _f : null,
24
+ onFps: (_g = options.onFps) !== null && _g !== void 0 ? _g : null,
25
+ onImages: (_h = options.onImages) !== null && _h !== void 0 ? _h : null,
26
+ onInternalStats: (_j = options.onInternalStats) !== null && _j !== void 0 ? _j : null,
27
+ onIsHdr: (_k = options.onIsHdr) !== null && _k !== void 0 ? _k : null,
28
+ onKeyframes: (_l = options.onKeyframes) !== null && _l !== void 0 ? _l : null,
29
+ onLocation: (_m = options.onLocation) !== null && _m !== void 0 ? _m : null,
30
+ onMetadata: (_o = options.onMetadata) !== null && _o !== void 0 ? _o : null,
31
+ onMimeType: (_p = options.onMimeType) !== null && _p !== void 0 ? _p : null,
32
+ onName: (_q = options.onName) !== null && _q !== void 0 ? _q : null,
33
+ onNumberOfAudioChannels: (_r = options.onNumberOfAudioChannels) !== null && _r !== void 0 ? _r : null,
34
+ onParseProgress: (_s = options.onParseProgress) !== null && _s !== void 0 ? _s : null,
35
+ onRotation: (_t = options.onRotation) !== null && _t !== void 0 ? _t : null,
36
+ onSampleRate: (_u = options.onSampleRate) !== null && _u !== void 0 ? _u : null,
37
+ onSize: (_v = options.onSize) !== null && _v !== void 0 ? _v : null,
38
+ onSlowAudioBitrate: (_w = options.onSlowAudioBitrate) !== null && _w !== void 0 ? _w : null,
39
+ onSlowDurationInSeconds: (_x = options.onSlowDurationInSeconds) !== null && _x !== void 0 ? _x : null,
40
+ onSlowFps: (_y = options.onSlowFps) !== null && _y !== void 0 ? _y : null,
41
+ onSlowKeyframes: (_z = options.onSlowKeyframes) !== null && _z !== void 0 ? _z : null,
42
+ onSlowNumberOfFrames: (_0 = options.onSlowNumberOfFrames) !== null && _0 !== void 0 ? _0 : null,
43
+ onSlowVideoBitrate: (_1 = options.onSlowVideoBitrate) !== null && _1 !== void 0 ? _1 : null,
44
+ onStructure: (_2 = options.onStructure) !== null && _2 !== void 0 ? _2 : null,
45
+ onTracks: (_3 = options.onTracks) !== null && _3 !== void 0 ? _3 : null,
46
+ onUnrotatedDimensions: (_4 = options.onUnrotatedDimensions) !== null && _4 !== void 0 ? _4 : null,
47
+ onVideoCodec: (_5 = options.onVideoCodec) !== null && _5 !== void 0 ? _5 : null,
48
+ onVideoTrack: null,
49
+ progressIntervalInMs: (_6 = options.progressIntervalInMs) !== null && _6 !== void 0 ? _6 : null,
50
+ reader: (_7 = options.reader) !== null && _7 !== void 0 ? _7 : from_fetch_1.fetchReader,
51
+ signal: (_8 = options.signal) !== null && _8 !== void 0 ? _8 : undefined,
52
+ src: options.src,
53
+ });
54
+ await content.finish();
55
+ return returnValue;
56
+ };
57
+ exports.parseAndDownloadMedia = parseAndDownloadMedia;