@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,113 @@
1
+ // src/writers/node.ts
2
+ import fs from "node:fs";
3
+
4
+ // src/log.ts
5
+ var logLevels = ["trace", "verbose", "info", "warn", "error"];
6
+ var getNumberForLogLevel = (level) => {
7
+ return logLevels.indexOf(level);
8
+ };
9
+ var isEqualOrBelowLogLevel = (currentLevel, level) => {
10
+ return getNumberForLogLevel(currentLevel) <= getNumberForLogLevel(level);
11
+ };
12
+ var Log = {
13
+ trace: (logLevel, ...args) => {
14
+ if (isEqualOrBelowLogLevel(logLevel, "trace")) {
15
+ return console.log(...args);
16
+ }
17
+ },
18
+ verbose: (logLevel, ...args) => {
19
+ if (isEqualOrBelowLogLevel(logLevel, "verbose")) {
20
+ return console.log(...args);
21
+ }
22
+ },
23
+ info: (logLevel, ...args) => {
24
+ if (isEqualOrBelowLogLevel(logLevel, "info")) {
25
+ return console.log(...args);
26
+ }
27
+ },
28
+ warn: (logLevel, ...args) => {
29
+ if (isEqualOrBelowLogLevel(logLevel, "warn")) {
30
+ return console.warn(...args);
31
+ }
32
+ },
33
+ error: (...args) => {
34
+ return console.error(...args);
35
+ }
36
+ };
37
+
38
+ // src/writers/node.ts
39
+ var createContent = (filename) => {
40
+ return async ({ logLevel }) => {
41
+ let writPromise = Promise.resolve();
42
+ const remove = async () => {
43
+ Log.verbose(logLevel, "Removing file", filename);
44
+ await fs.promises.unlink(filename).catch(() => {
45
+ });
46
+ };
47
+ await remove();
48
+ if (!fs.existsSync(filename)) {
49
+ Log.verbose(logLevel, "Creating file", filename);
50
+ fs.writeFileSync(filename, "");
51
+ }
52
+ const writeStream = fs.openSync(filename, "w");
53
+ let written = 0;
54
+ const write = async (data) => {
55
+ await new Promise((resolve, reject) => {
56
+ fs.write(writeStream, data, 0, data.length, undefined, (err) => {
57
+ if (err) {
58
+ reject(err);
59
+ return;
60
+ }
61
+ Log.verbose(logLevel, "Wrote", data.length, "bytes to", filename);
62
+ resolve();
63
+ });
64
+ });
65
+ written += data.byteLength;
66
+ };
67
+ const updateDataAt = (position, data) => {
68
+ return new Promise((resolve, reject) => {
69
+ fs.write(writeStream, data, 0, data.length, position, (err) => {
70
+ if (err) {
71
+ reject(err);
72
+ return;
73
+ }
74
+ Log.verbose(logLevel, "Wrote", data.length, "bytes to", filename, "at position", position);
75
+ resolve();
76
+ });
77
+ });
78
+ };
79
+ const writer = {
80
+ write: (arr) => {
81
+ writPromise = writPromise.then(() => write(arr));
82
+ return writPromise;
83
+ },
84
+ updateDataAt: (position, data) => {
85
+ writPromise = writPromise.then(() => updateDataAt(position, data));
86
+ return writPromise;
87
+ },
88
+ getWrittenByteCount: () => written,
89
+ remove,
90
+ finish: async () => {
91
+ await writPromise;
92
+ try {
93
+ Log.verbose(logLevel, "Closing file", filename);
94
+ fs.closeSync(writeStream);
95
+ return Promise.resolve();
96
+ } catch (e) {
97
+ return Promise.reject(e);
98
+ }
99
+ },
100
+ getBlob: async () => {
101
+ const file = await fs.promises.readFile(filename);
102
+ return new Blob([file]);
103
+ }
104
+ };
105
+ return writer;
106
+ };
107
+ };
108
+ var nodeWriter = (path) => {
109
+ return { createContent: createContent(path) };
110
+ };
111
+ export {
112
+ nodeWriter
113
+ };
@@ -12,6 +12,7 @@ export declare const isTransportStream: (data: Uint8Array) => boolean;
12
12
  export declare const isMp3: (data: Uint8Array) => boolean;
13
13
  export declare const isGif: (data: Uint8Array) => boolean;
14
14
  export declare const isAac: (data: Uint8Array) => boolean;
15
+ export declare const isFlac: (data: Uint8Array) => boolean;
15
16
  export type RiffType = {
16
17
  type: 'riff';
17
18
  };
@@ -36,7 +37,10 @@ export type WavType = {
36
37
  export type GifType = {
37
38
  type: 'gif';
38
39
  };
40
+ export type FlacType = {
41
+ type: 'flac';
42
+ };
39
43
  export type UnknownType = {
40
44
  type: 'unknown';
41
45
  };
42
- export type FileType = JpegType | WebpType | RiffType | WebmType | WavType | PdfType | AacType | IsoBaseMediaType | TransportStreamType | Mp3Type | GifType | PngType | BmpType | AacType | UnknownType;
46
+ export type FileType = JpegType | WebpType | RiffType | WebmType | WavType | PdfType | AacType | IsoBaseMediaType | TransportStreamType | Mp3Type | GifType | PngType | BmpType | AacType | FlacType | UnknownType;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isAac = exports.isGif = exports.isMp3 = exports.isTransportStream = exports.isIsoBaseMedia = exports.isWebm = exports.isRiffWave = exports.isRiffAvi = exports.matchesPattern = void 0;
3
+ exports.isFlac = exports.isAac = exports.isGif = exports.isMp3 = exports.isTransportStream = exports.isIsoBaseMedia = exports.isWebm = exports.isRiffWave = exports.isRiffAvi = exports.matchesPattern = void 0;
4
4
  const webmPattern = new Uint8Array([0x1a, 0x45, 0xdf, 0xa3]);
5
5
  const matchesPattern = (pattern) => {
6
6
  return (data) => {
@@ -63,3 +63,8 @@ const isAac = (data) => {
63
63
  return (0, exports.matchesPattern)(aacPattern)(data.subarray(0, 2));
64
64
  };
65
65
  exports.isAac = isAac;
66
+ const isFlac = (data) => {
67
+ const flacPattern = new Uint8Array([0x66, 0x4c, 0x61, 0x43]);
68
+ return (0, exports.matchesPattern)(flacPattern)(data.subarray(0, 4));
69
+ };
70
+ exports.isFlac = isFlac;
@@ -17,6 +17,9 @@ const detectFileType = (data) => {
17
17
  if ((0, detect_file_type_1.isAac)(data)) {
18
18
  return { type: 'aac' };
19
19
  }
20
+ if ((0, detect_file_type_1.isFlac)(data)) {
21
+ return { type: 'flac' };
22
+ }
20
23
  const webp = (0, webp_1.isWebp)(data);
21
24
  if (webp) {
22
25
  return webp;
@@ -1,10 +1,9 @@
1
- import type { MoovBox } from './boxes/iso-base-media/moov/moov';
2
- import type { TrakBox } from './boxes/iso-base-media/trak/trak';
1
+ import type { MoovBox } from './containers/iso-base-media/moov/moov';
2
+ import type { TrakBox } from './containers/iso-base-media/trak/trak';
3
3
  import { type MediaParserAudioCodec } from './get-tracks';
4
- import type { Structure } from './parse-result';
5
4
  import type { ParserState } from './state/parser-state';
6
5
  export declare const getAudioCodec: (parserState: ParserState) => MediaParserAudioCodec | null;
7
- export declare const hasAudioCodec: (boxes: Structure, state: ParserState) => boolean;
6
+ export declare const hasAudioCodec: (state: ParserState) => boolean;
8
7
  type AudioCodecInfo = {
9
8
  format: string;
10
9
  primarySpecificator: number | null;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.isLpcmAudioCodec = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = 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 get_fps_1 = require("./get-fps");
6
6
  const get_tracks_1 = require("./get-tracks");
7
7
  const getAudioCodec = (parserState) => {
@@ -22,8 +22,8 @@ const getAudioCodec = (parserState) => {
22
22
  return null;
23
23
  };
24
24
  exports.getAudioCodec = getAudioCodec;
25
- const hasAudioCodec = (boxes, state) => {
26
- return (0, get_tracks_1.getHasTracks)(boxes, state);
25
+ const hasAudioCodec = (state) => {
26
+ return (0, get_tracks_1.getHasTracks)(state);
27
27
  };
28
28
  exports.hasAudioCodec = hasAudioCodec;
29
29
  const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
@@ -195,6 +195,9 @@ const getAudioCodecFromAudioCodecInfo = (codec) => {
195
195
  if (codec.format === 'sowt') {
196
196
  return 'aiff';
197
197
  }
198
+ if (codec.format === 'ac-3') {
199
+ return 'ac3';
200
+ }
198
201
  if (codec.format === 'mp4a') {
199
202
  if (codec.primarySpecificator === 0x40) {
200
203
  return 'aac';
@@ -1,4 +1,4 @@
1
- import type { ParseMediaContainer } from './options';
1
+ import type { MediaParserContainer } from './options';
2
2
  import type { Structure } from './parse-result';
3
- export declare const getContainer: (segments: Structure) => ParseMediaContainer;
3
+ export declare const getContainer: (segments: Structure) => MediaParserContainer;
4
4
  export declare const hasContainer: (boxes: Structure) => boolean;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasContainer = exports.getContainer = void 0;
4
- const traversal_1 = require("./boxes/riff/traversal");
4
+ const traversal_1 = require("./containers/riff/traversal");
5
5
  const getContainer = (segments) => {
6
6
  if (segments.type === 'iso-base-media') {
7
7
  return 'mp4';
@@ -15,12 +15,21 @@ const getContainer = (segments) => {
15
15
  if (segments.type === 'mp3') {
16
16
  return 'mp3';
17
17
  }
18
+ if (segments.type === 'wav') {
19
+ return 'wav';
20
+ }
21
+ if (segments.type === 'flac') {
22
+ return 'flac';
23
+ }
18
24
  if (segments.type === 'riff') {
19
25
  if ((0, traversal_1.isRiffAvi)(segments)) {
20
26
  return 'avi';
21
27
  }
22
28
  throw new Error('Unknown RIFF container ' + segments.type);
23
29
  }
30
+ if (segments.type === 'aac') {
31
+ return 'aac';
32
+ }
24
33
  throw new Error('Unknown container ' + segments);
25
34
  };
26
35
  exports.getContainer = getContainer;
@@ -1,4 +1,3 @@
1
- import type { Structure } from './parse-result';
2
1
  import type { ParserState } from './state/parser-state';
3
2
  export type Dimensions = {
4
3
  width: number;
@@ -9,5 +8,5 @@ export type ExpandedDimensions = Dimensions & {
9
8
  unrotatedWidth: number;
10
9
  unrotatedHeight: number;
11
10
  };
12
- export declare const getDimensions: (boxes: Structure, state: ParserState) => ExpandedDimensions | null;
13
- export declare const hasDimensions: (boxes: Structure, state: ParserState) => boolean;
11
+ export declare const getDimensions: (state: ParserState) => ExpandedDimensions | null;
12
+ export declare const hasDimensions: (state: ParserState) => boolean;
@@ -2,13 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasDimensions = exports.getDimensions = void 0;
4
4
  const get_tracks_1 = require("./get-tracks");
5
- const getDimensions = (boxes, state) => {
5
+ const is_audio_structure_1 = require("./is-audio-structure");
6
+ const getDimensions = (state) => {
7
+ const structure = state.getStructureOrNull();
8
+ if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
9
+ return null;
10
+ }
6
11
  const { videoTracks } = (0, get_tracks_1.getTracks)(state);
7
12
  if (!videoTracks.length) {
8
- if (boxes.type === 'mp3') {
9
- return null;
10
- }
11
- throw new Error('Expected video track');
13
+ return null;
12
14
  }
13
15
  const firstVideoTrack = videoTracks[0];
14
16
  return {
@@ -20,11 +22,13 @@ const getDimensions = (boxes, state) => {
20
22
  };
21
23
  };
22
24
  exports.getDimensions = getDimensions;
23
- // TODO: An audio track should return 'hasDimensions' = true on an audio file
24
- // and stop parsing
25
- const hasDimensions = (boxes, state) => {
25
+ const hasDimensions = (state) => {
26
+ const structure = state.getStructureOrNull();
27
+ if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
28
+ return true;
29
+ }
26
30
  try {
27
- return (0, exports.getDimensions)(boxes, state) !== null;
31
+ return (0, exports.getDimensions)(state) !== null;
28
32
  }
29
33
  catch (_a) {
30
34
  return false;
@@ -1,10 +1,10 @@
1
- import type { AnySegment, Structure } from './parse-result';
1
+ import type { AnySegment } from './parse-result';
2
2
  import type { ParserState } from './state/parser-state';
3
3
  export declare const isMatroska: (boxes: AnySegment[]) => {
4
4
  type: "Segment";
5
- value: import("./boxes/webm/segments/all-segments").PossibleEbml[];
5
+ value: import("./containers/webm/segments/all-segments").PossibleEbml[];
6
6
  minVintWidth: number | null;
7
7
  } | undefined;
8
- export declare const getDuration: (structure: Structure, parserState: ParserState) => number | null;
9
- export declare const hasDuration: (structure: Structure, parserState: ParserState) => boolean;
10
- export declare const hasSlowDuration: (structure: Structure, parserState: ParserState) => boolean;
8
+ export declare const getDuration: (parserState: ParserState) => number | null;
9
+ export declare const hasDuration: (parserState: ParserState) => boolean;
10
+ export declare const hasSlowDuration: (parserState: ParserState) => boolean;
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasSlowDuration = exports.hasDuration = exports.getDuration = exports.isMatroska = void 0;
4
- const get_sample_positions_from_track_1 = require("./boxes/iso-base-media/get-sample-positions-from-track");
5
- const traversal_1 = require("./boxes/iso-base-media/traversal");
6
- const get_duration_1 = require("./boxes/mp3/get-duration");
7
- const traversal_2 = require("./boxes/riff/traversal");
4
+ const get_duration_from_flac_1 = require("./containers/flac/get-duration-from-flac");
5
+ const get_sample_positions_from_track_1 = require("./containers/iso-base-media/get-sample-positions-from-track");
6
+ const traversal_1 = require("./containers/iso-base-media/traversal");
7
+ const get_duration_1 = require("./containers/mp3/get-duration");
8
+ const get_duration_2 = require("./containers/riff/get-duration");
9
+ const get_duration_from_wav_1 = require("./containers/wav/get-duration-from-wav");
8
10
  const get_tracks_1 = require("./get-tracks");
9
11
  const getDurationFromMatroska = (segments) => {
10
12
  const mainSegment = segments.find((s) => s.type === 'Segment');
@@ -35,8 +37,9 @@ const isMatroska = (boxes) => {
35
37
  return matroskaBox;
36
38
  };
37
39
  exports.isMatroska = isMatroska;
38
- const getDurationFromIsoBaseMedia = (structure, parserState) => {
39
- const moovBox = (0, traversal_1.getMoovBox)(structure.boxes);
40
+ const getDurationFromIsoBaseMedia = (parserState) => {
41
+ const structure = parserState.getIsoStructure();
42
+ const moovBox = (0, traversal_1.getMoovBox)(parserState);
40
43
  if (!moovBox) {
41
44
  return null;
42
45
  }
@@ -66,29 +69,16 @@ const getDurationFromIsoBaseMedia = (structure, parserState) => {
66
69
  const highestTimestamp = Math.max(...allSamples);
67
70
  return highestTimestamp;
68
71
  };
69
- const getDurationFromAvi = (structure) => {
70
- const strl = (0, traversal_2.getStrlBoxes)(structure);
71
- const lengths = [];
72
- for (const s of strl) {
73
- const strh = (0, traversal_2.getStrhBox)(s.children);
74
- if (!strh) {
75
- throw new Error('No strh box');
76
- }
77
- const samplesPerSecond = strh.rate / strh.scale;
78
- const streamLength = strh.length / samplesPerSecond;
79
- lengths.push(streamLength);
80
- }
81
- return Math.max(...lengths);
82
- };
83
- const getDuration = (structure, parserState) => {
72
+ const getDuration = (parserState) => {
73
+ const structure = parserState.getStructure();
84
74
  if (structure.type === 'matroska') {
85
75
  return getDurationFromMatroska(structure.boxes);
86
76
  }
87
77
  if (structure.type === 'iso-base-media') {
88
- return getDurationFromIsoBaseMedia(structure, parserState);
78
+ return getDurationFromIsoBaseMedia(parserState);
89
79
  }
90
80
  if (structure.type === 'riff') {
91
- return getDurationFromAvi(structure);
81
+ return (0, get_duration_2.getDurationFromAvi)(structure);
92
82
  }
93
83
  if (structure.type === 'transport-stream') {
94
84
  return null;
@@ -96,20 +86,29 @@ const getDuration = (structure, parserState) => {
96
86
  if (structure.type === 'mp3') {
97
87
  return (0, get_duration_1.getDurationFromMp3)(parserState);
98
88
  }
89
+ if (structure.type === 'wav') {
90
+ return (0, get_duration_from_wav_1.getDurationFromWav)(parserState);
91
+ }
92
+ if (structure.type === 'aac') {
93
+ return null;
94
+ }
95
+ if (structure.type === 'flac') {
96
+ return (0, get_duration_from_flac_1.getDurationFromFlac)(parserState);
97
+ }
99
98
  throw new Error('Has no duration ' + structure);
100
99
  };
101
100
  exports.getDuration = getDuration;
102
101
  // `duration` just grabs from metadata, and otherwise returns null
103
102
  // Therefore just checking if we have tracks
104
- const hasDuration = (structure, parserState) => {
105
- return (0, get_tracks_1.getHasTracks)(structure, parserState);
103
+ const hasDuration = (parserState) => {
104
+ return (0, get_tracks_1.getHasTracks)(parserState);
106
105
  };
107
106
  exports.hasDuration = hasDuration;
108
107
  // `slowDuration` does through everything, and therefore is false
109
108
  // Unless it it somewhere in the metadata and is non-null
110
- const hasSlowDuration = (structure, parserState) => {
109
+ const hasSlowDuration = (parserState) => {
111
110
  try {
112
- return (0, exports.getDuration)(structure, parserState) !== null;
111
+ return (0, exports.getDuration)(parserState) !== null;
113
112
  }
114
113
  catch (_a) {
115
114
  return false;
@@ -26,6 +26,10 @@ const getFieldsFromCallback = ({ fields, callbacks, }) => {
26
26
  slowNumberOfFrames: Boolean(callbacks.onSlowNumberOfFrames),
27
27
  keyframes: Boolean(callbacks.onKeyframes),
28
28
  images: Boolean(callbacks.onImages),
29
+ numberOfAudioChannels: Boolean(callbacks.onNumberOfAudioChannels),
30
+ sampleRate: Boolean(callbacks.onSampleRate),
31
+ slowAudioBitrate: Boolean(callbacks.onSlowAudioBitrate),
32
+ slowVideoBitrate: Boolean(callbacks.onSlowVideoBitrate),
29
33
  ...fields,
30
34
  };
31
35
  return newFields;
package/dist/get-fps.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { TrakBox } from './boxes/iso-base-media/trak/trak';
2
- import type { Structure } from './parse-result';
1
+ import type { TrakBox } from './containers/iso-base-media/trak/trak';
2
+ import type { ParserState } from './state/parser-state';
3
3
  type TimescaleAndDuration = {
4
4
  timescale: number;
5
5
  duration: number;
@@ -8,7 +8,7 @@ export declare const trakBoxContainsAudio: (trakBox: TrakBox) => boolean;
8
8
  export declare const trakBoxContainsVideo: (trakBox: TrakBox) => boolean;
9
9
  export declare const getTimescaleAndDuration: (trakBox: TrakBox) => TimescaleAndDuration | null;
10
10
  export declare const getFpsFromMp4TrakBox: (trakBox: TrakBox) => number | null;
11
- export declare const getFps: (segments: Structure) => number | null;
12
- export declare const hasFpsSuitedForSlowFps: (boxes: Structure) => boolean;
13
- export declare const hasFps: (boxes: Structure) => boolean;
11
+ export declare const getFps: (state: ParserState) => number | null;
12
+ export declare const hasFpsSuitedForSlowFps: (state: ParserState) => boolean;
13
+ export declare const hasFps: (state: ParserState) => boolean;
14
14
  export {};
package/dist/get-fps.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasFps = exports.hasFpsSuitedForSlowFps = exports.getFps = exports.getFpsFromMp4TrakBox = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
4
- const traversal_1 = require("./boxes/iso-base-media/traversal");
5
- const traversal_2 = require("./boxes/riff/traversal");
4
+ const traversal_1 = require("./containers/iso-base-media/traversal");
5
+ const traversal_2 = require("./containers/riff/traversal");
6
+ const is_audio_structure_1 = require("./is-audio-structure");
6
7
  const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
7
8
  let totalSamples = 0;
8
9
  for (const sample of sttsBox.sampleDistribution) {
@@ -60,8 +61,8 @@ const getFpsFromMp4TrakBox = (trakBox) => {
60
61
  });
61
62
  };
62
63
  exports.getFpsFromMp4TrakBox = getFpsFromMp4TrakBox;
63
- const getFpsFromIsoMaseMedia = (structure) => {
64
- const moovBox = (0, traversal_1.getMoovBox)(structure.boxes);
64
+ const getFpsFromIsoMaseMedia = (state) => {
65
+ const moovBox = (0, traversal_1.getMoovBox)(state);
65
66
  if (!moovBox) {
66
67
  return null;
67
68
  }
@@ -86,9 +87,10 @@ const getFpsFromAvi = (structure) => {
86
87
  }
87
88
  return null;
88
89
  };
89
- const getFps = (segments) => {
90
+ const getFps = (state) => {
91
+ const segments = state.getStructure();
90
92
  if (segments.type === 'iso-base-media') {
91
- return getFpsFromIsoMaseMedia(segments);
93
+ return getFpsFromIsoMaseMedia(state);
92
94
  }
93
95
  if (segments.type === 'riff') {
94
96
  return getFpsFromAvi(segments);
@@ -101,31 +103,39 @@ const getFps = (segments) => {
101
103
  if (segments.type === 'transport-stream') {
102
104
  return null;
103
105
  }
104
- if (segments.type === 'mp3') {
106
+ if (segments.type === 'mp3' ||
107
+ segments.type === 'wav' ||
108
+ segments.type === 'flac' ||
109
+ segments.type === 'aac') {
105
110
  return null;
106
111
  }
107
- throw new Error('Cannot get fps, not implemented');
112
+ throw new Error('Cannot get fps, not implemented: ' + segments);
108
113
  };
109
114
  exports.getFps = getFps;
110
- const hasFpsSuitedForSlowFps = (boxes) => {
115
+ const hasFpsSuitedForSlowFps = (state) => {
111
116
  try {
112
- return (0, exports.getFps)(boxes) !== null;
117
+ return (0, exports.getFps)(state) !== null;
113
118
  }
114
119
  catch (_a) {
115
120
  return false;
116
121
  }
117
122
  };
118
123
  exports.hasFpsSuitedForSlowFps = hasFpsSuitedForSlowFps;
119
- const hasFps = (boxes) => {
124
+ const hasFps = (state) => {
120
125
  // Matroska and Transport stream has no FPS metadata
121
126
  // Not bothering to parse
122
127
  // Users should use `slowFps` field
123
- if (boxes.type === 'matroska') {
128
+ // same goes for audio
129
+ const structure = state.getStructure();
130
+ if ((0, is_audio_structure_1.isAudioStructure)(structure)) {
124
131
  return true;
125
132
  }
126
- if (boxes.type === 'transport-stream') {
133
+ if (structure.type === 'matroska') {
127
134
  return true;
128
135
  }
129
- return (0, exports.hasFpsSuitedForSlowFps)(boxes);
136
+ if (structure.type === 'transport-stream') {
137
+ return true;
138
+ }
139
+ return (0, exports.hasFpsSuitedForSlowFps)(state);
130
140
  };
131
141
  exports.hasFps = hasFps;
@@ -1,4 +1,3 @@
1
- import type { Structure } from './parse-result';
2
1
  import type { ParserState } from './state/parser-state';
3
2
  export declare const getIsHdr: (state: ParserState) => boolean;
4
- export declare const hasHdr: (boxes: Structure, state: ParserState) => boolean;
3
+ export declare const hasHdr: (state: ParserState) => boolean;
@@ -12,7 +12,7 @@ const getIsHdr = (state) => {
12
12
  return videoTracks.some((track) => isVideoTrackHdr(track));
13
13
  };
14
14
  exports.getIsHdr = getIsHdr;
15
- const hasHdr = (boxes, state) => {
16
- return (0, get_tracks_1.getHasTracks)(boxes, state);
15
+ const hasHdr = (state) => {
16
+ return (0, get_tracks_1.getHasTracks)(state);
17
17
  };
18
18
  exports.hasHdr = hasHdr;
@@ -1,5 +1,4 @@
1
1
  import type { MediaParserKeyframe } from './options';
2
- import type { Structure } from './parse-result';
3
2
  import type { ParserState } from './state/parser-state';
4
- export declare const getKeyframes: (structure: Structure) => MediaParserKeyframe[] | null;
5
- export declare const hasKeyframes: (structure: Structure, parserState: ParserState) => boolean;
3
+ export declare const getKeyframes: (state: ParserState) => MediaParserKeyframe[] | null;
4
+ export declare const hasKeyframes: (parserState: ParserState) => boolean;
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasKeyframes = exports.getKeyframes = void 0;
4
- const get_keyframes_1 = require("./boxes/iso-base-media/get-keyframes");
4
+ const get_keyframes_1 = require("./containers/iso-base-media/get-keyframes");
5
5
  const get_tracks_1 = require("./get-tracks");
6
- const getKeyframes = (structure) => {
6
+ const getKeyframes = (state) => {
7
+ const structure = state.getStructure();
7
8
  if (structure.type === 'iso-base-media') {
8
- return (0, get_keyframes_1.getKeyframesFromIsoBaseMedia)(structure);
9
+ return (0, get_keyframes_1.getKeyframesFromIsoBaseMedia)(state);
9
10
  }
10
11
  return null;
11
12
  };
12
13
  exports.getKeyframes = getKeyframes;
13
- const hasKeyframes = (structure, parserState) => {
14
+ const hasKeyframes = (parserState) => {
15
+ const structure = parserState.getStructure();
14
16
  if (structure.type === 'iso-base-media') {
15
- return (0, get_tracks_1.getHasTracks)(structure, parserState);
17
+ return (0, get_tracks_1.getHasTracks)(parserState);
16
18
  }
17
19
  // Has, but will be null
18
20
  return true;
@@ -1,4 +1,4 @@
1
- import type { Structure } from './parse-result';
1
+ import type { ParserState } from './state/parser-state';
2
2
  export type MediaParserLocation = {
3
3
  latitude: number;
4
4
  longitude: number;
@@ -10,4 +10,4 @@ export declare function parseLocation(locationString: string): {
10
10
  longitude: number;
11
11
  altitude: number | null;
12
12
  } | null;
13
- export declare const getLocation: (structure: Structure) => MediaParserLocation | null;
13
+ export declare const getLocation: (state: ParserState) => MediaParserLocation | null;
@@ -19,8 +19,8 @@ function parseLocation(locationString) {
19
19
  altitude,
20
20
  };
21
21
  }
22
- const getLocation = (structure) => {
23
- const metadata = (0, get_metadata_1.getMetadata)(structure);
22
+ const getLocation = (state) => {
23
+ const metadata = (0, get_metadata_1.getMetadata)(state);
24
24
  const locationEntry = metadata.find((entry) => entry.key === 'com.apple.quicktime.location.ISO6709');
25
25
  const horizontalAccuracy = metadata.find((entry) => entry.key === 'com.apple.quicktime.location.accuracy.horizontal');
26
26
  if (locationEntry) {
@@ -0,0 +1,3 @@
1
+ import type { ParserState } from './state/parser-state';
2
+ export declare const getNumberOfAudioChannels: (state: ParserState) => number | null;
3
+ export declare const hasNumberOfAudioChannels: (state: ParserState) => boolean;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasNumberOfAudioChannels = exports.getNumberOfAudioChannels = void 0;
4
+ const getNumberOfAudioChannels = (state) => {
5
+ var _a, _b;
6
+ return ((_b = (_a = state.callbacks.tracks.getTracks().find((track) => {
7
+ return track.type === 'audio';
8
+ })) === null || _a === void 0 ? void 0 : _a.numberOfChannels) !== null && _b !== void 0 ? _b : null);
9
+ };
10
+ exports.getNumberOfAudioChannels = getNumberOfAudioChannels;
11
+ const hasNumberOfAudioChannels = (state) => {
12
+ return state.callbacks.tracks.hasAllTracks();
13
+ };
14
+ exports.hasNumberOfAudioChannels = hasNumberOfAudioChannels;
@@ -1,11 +1,11 @@
1
- import type { Av1CBox } from './boxes/iso-base-media/stsd/av1c';
2
- import type { AvccBox } from './boxes/iso-base-media/stsd/avcc';
3
- import type { ColorParameterBox } from './boxes/iso-base-media/stsd/colr';
4
- import type { HvccBox } from './boxes/iso-base-media/stsd/hvcc';
5
- import type { PaspBox } from './boxes/iso-base-media/stsd/pasp';
6
- import type { VideoSample } from './boxes/iso-base-media/stsd/samples';
7
- import type { TkhdBox } from './boxes/iso-base-media/tkhd';
8
- import type { TrakBox } from './boxes/iso-base-media/trak/trak';
1
+ import type { Av1CBox } from './containers/iso-base-media/stsd/av1c';
2
+ import type { AvccBox } from './containers/iso-base-media/stsd/avcc';
3
+ import type { ColorParameterBox } from './containers/iso-base-media/stsd/colr';
4
+ import type { HvccBox } from './containers/iso-base-media/stsd/hvcc';
5
+ import type { PaspBox } from './containers/iso-base-media/stsd/pasp';
6
+ import type { VideoSample } from './containers/iso-base-media/stsd/samples';
7
+ import type { TkhdBox } from './containers/iso-base-media/tkhd';
8
+ import type { TrakBox } from './containers/iso-base-media/trak/trak';
9
9
  import type { Dimensions } from './get-dimensions';
10
10
  type AspectRatio = {
11
11
  numerator: number;