@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
@@ -1,8 +1,9 @@
1
1
  export declare const getSampleRateFromSampleFrequencyIndex: (samplingFrequencyIndex: number) => 96000 | 88200 | 64000 | 48000 | 44100 | 32000 | 24000 | 22050 | 16000 | 12000 | 11025 | 8000 | 7350;
2
- export declare const createAacCodecPrivate: ({ audioObjectType, sampleRate, channelConfiguration, }: {
2
+ export declare const createAacCodecPrivate: ({ audioObjectType, sampleRate, channelConfiguration, codecPrivate, }: {
3
3
  audioObjectType: number;
4
4
  sampleRate: number;
5
5
  channelConfiguration: number;
6
+ codecPrivate: Uint8Array | null;
6
7
  }) => Uint8Array;
7
8
  export declare const parseAacCodecPrivate: (bytes: Uint8Array) => {
8
9
  audioObjectType: number;
@@ -90,7 +90,13 @@ const getConfigForSampleRate = (sampleRate) => {
90
90
  }
91
91
  throw new Error(`Unexpected sample rate ${sampleRate}`);
92
92
  };
93
- const createAacCodecPrivate = ({ audioObjectType, sampleRate, channelConfiguration, }) => {
93
+ const createAacCodecPrivate = ({ audioObjectType, sampleRate, channelConfiguration, codecPrivate, }) => {
94
+ if (codecPrivate !== null && codecPrivate.length > 2) {
95
+ // Video submitted
96
+ // submitted by Yossi Elkrief
97
+ // TOOD: Check if we are now parsing correctly
98
+ return codecPrivate;
99
+ }
94
100
  const bits = `${audioObjectType.toString(2).padStart(5, '0')}${getConfigForSampleRate(sampleRate).toString(2).padStart(4, '0')}${channelConfiguration.toString(2).padStart(4, '0')}000`;
95
101
  if (bits.length !== 16) {
96
102
  throw new Error('Invalid AAC codec private ' + bits.length);
@@ -107,13 +113,28 @@ const parseAacCodecPrivate = (bytes) => {
107
113
  if (bytes.length < 2) {
108
114
  throw new Error('Invalid AAC codec private length');
109
115
  }
110
- const bits = `${bytes[0].toString(2).padStart(8, '0')}${bytes[1].toString(2).padStart(8, '0')}`;
111
- if (bits.length !== 16) {
112
- throw new Error('Invalid AAC codec private bits length');
116
+ const bits = [...bytes].map((b) => b.toString(2).padStart(8, '0')).join('');
117
+ let offset = 0;
118
+ const audioObjectType = parseInt(bits.slice(offset, offset + 5), 2);
119
+ offset += 5;
120
+ const samplingFrequencyIndex = parseInt(bits.slice(offset, offset + 4), 2);
121
+ offset += 4;
122
+ if (samplingFrequencyIndex === 0xf) {
123
+ offset += 24;
124
+ }
125
+ const channelConfiguration = parseInt(bits.slice(offset, offset + 4), 2);
126
+ offset += 4;
127
+ if (audioObjectType === 5) {
128
+ const extensionSamplingFrequencyIndex = parseInt(bits.slice(offset, offset + 4), 2);
129
+ offset += 4;
130
+ const newAudioObjectType = parseInt(bits.slice(offset, offset + 5), 2);
131
+ offset += 5;
132
+ return {
133
+ audioObjectType: newAudioObjectType,
134
+ sampleRate: (0, exports.getSampleRateFromSampleFrequencyIndex)(extensionSamplingFrequencyIndex),
135
+ channelConfiguration,
136
+ };
113
137
  }
114
- const audioObjectType = parseInt(bits.slice(0, 5), 2);
115
- const samplingFrequencyIndex = parseInt(bits.slice(5, 9), 2);
116
- const channelConfiguration = parseInt(bits.slice(9, 13), 2);
117
138
  const sampleRate = (0, exports.getSampleRateFromSampleFrequencyIndex)(samplingFrequencyIndex);
118
139
  return {
119
140
  audioObjectType,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addAvcProfileToTrack = void 0;
4
- const codec_string_1 = require("./boxes/avc/codec-string");
5
- const create_sps_pps_data_1 = require("./boxes/avc/create-sps-pps-data");
4
+ const codec_string_1 = require("./containers/avc/codec-string");
5
+ const create_sps_pps_data_1 = require("./containers/avc/create-sps-pps-data");
6
6
  const addAvcProfileToTrack = (track, avc1Profile) => {
7
7
  if (avc1Profile === null) {
8
8
  return track;
@@ -1,3 +1,4 @@
1
+ import type { ParseMediaMode } from './options';
1
2
  export declare class OffsetCounter {
2
3
  #private;
3
4
  constructor(initial: number);
@@ -12,7 +13,7 @@ export declare class OffsetCounter {
12
13
  export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes: number | null) => {
13
14
  startReadingBits: () => void;
14
15
  stopReadingBits: () => void;
15
- skipTo: (offset: number, reset: boolean) => void;
16
+ skipTo: (offset: number) => void;
16
17
  addData: (newData: Uint8Array) => void;
17
18
  counter: OffsetCounter;
18
19
  peekB: (length: number) => void;
@@ -20,7 +21,10 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes:
20
21
  getBits: (bits: number) => number;
21
22
  bytesRemaining: () => number;
22
23
  leb128: () => number;
23
- removeBytesRead: () => void;
24
+ removeBytesRead: (force: boolean, mode: ParseMediaMode) => {
25
+ bytesRemoved: number;
26
+ removedData: Uint8Array | null;
27
+ };
24
28
  discard: (length: number) => void;
25
29
  getEightByteNumber: (littleEndian?: boolean) => number;
26
30
  getFourByteNumber: () => number;
@@ -65,5 +69,6 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes:
65
69
  startCheckpoint: () => {
66
70
  returnToCheckpoint: () => void;
67
71
  };
72
+ getFlacCodecNumber: () => number;
68
73
  };
69
74
  export type BufferIterator = ReturnType<typeof getArrayBufferIterator>;
@@ -14,7 +14,7 @@ var _OffsetCounter_offset, _OffsetCounter_discardedBytes;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getArrayBufferIterator = exports.OffsetCounter = void 0;
16
16
  /* eslint-disable @typescript-eslint/no-use-before-define */
17
- const all_segments_1 = require("./boxes/webm/segments/all-segments");
17
+ const all_segments_1 = require("./containers/webm/segments/all-segments");
18
18
  const file_types_1 = require("./file-types");
19
19
  class OffsetCounter {
20
20
  constructor(initial) {
@@ -65,9 +65,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
65
65
  if (!buf.resize) {
66
66
  throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111');
67
67
  }
68
- let data = new Uint8Array(buf);
69
- data.set(initialData);
70
- let view = new DataView(data.buffer);
68
+ let uintArray = new Uint8Array(buf);
69
+ uintArray.set(initialData);
70
+ let view = new DataView(uintArray.buffer);
71
71
  const counter = makeOffsetCounter();
72
72
  const startCheckpoint = () => {
73
73
  const checkpoint = counter.getOffset();
@@ -78,7 +78,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
78
78
  };
79
79
  };
80
80
  const getSlice = (amount) => {
81
- const value = data.slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
81
+ const value = uintArray.slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
82
82
  counter.increment(amount);
83
83
  return value;
84
84
  };
@@ -201,47 +201,41 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
201
201
  buf.resize(newLength);
202
202
  const newArray = new Uint8Array(buf);
203
203
  newArray.set(newData, oldLength);
204
- data = newArray;
205
- view = new DataView(data.buffer);
204
+ uintArray = newArray;
205
+ view = new DataView(uintArray.buffer);
206
206
  };
207
207
  const bytesRemaining = () => {
208
- return data.byteLength - counter.getDiscardedOffset();
208
+ return uintArray.byteLength - counter.getDiscardedOffset();
209
209
  };
210
- const removeBytesRead = () => {
210
+ const removeBytesRead = (force, mode) => {
211
211
  const bytesToRemove = counter.getDiscardedOffset();
212
212
  // Only do this operation if it is really worth it 😇
213
- if (bytesToRemove < 100000) {
214
- return;
213
+ // let's set the threshold to 3MB
214
+ if (bytesToRemove < 3000000 && !force) {
215
+ return { bytesRemoved: 0, removedData: null };
216
+ }
217
+ // Don't remove if the data is not even available
218
+ if (view.byteLength < bytesToRemove && !force) {
219
+ return { bytesRemoved: 0, removedData: null };
215
220
  }
216
221
  counter.discardBytes(bytesToRemove);
217
- const newData = data.slice(bytesToRemove);
218
- data.set(newData);
222
+ const removedData = mode === 'download' ? uintArray.slice(0, bytesToRemove) : null;
223
+ const newData = uintArray.slice(bytesToRemove);
224
+ uintArray.set(newData);
219
225
  buf.resize(newData.byteLength);
220
- view = new DataView(data.buffer);
226
+ view = new DataView(uintArray.buffer);
227
+ return { bytesRemoved: bytesToRemove, removedData };
221
228
  };
222
- const skipTo = (offset, reset) => {
229
+ const skipTo = (offset) => {
223
230
  const becomesSmaller = offset < counter.getOffset();
224
- if (becomesSmaller) {
225
- if (reset) {
226
- buf.resize(0);
227
- counter.decrement(counter.getOffset() - offset);
228
- counter.setDiscardedOffset(offset);
229
- }
230
- else {
231
- const toDecrement = counter.getOffset() - offset;
232
- const newOffset = counter.getOffset() - toDecrement;
233
- counter.decrement(toDecrement);
234
- const c = counter.getDiscardedBytes();
235
- if (c > newOffset) {
236
- throw new Error('already discarded too many bytes');
237
- }
238
- }
239
- }
240
- else {
231
+ if (!becomesSmaller) {
241
232
  const currentOffset = counter.getOffset();
242
233
  counter.increment(offset - currentOffset);
243
- removeBytesRead();
234
+ return;
244
235
  }
236
+ buf.resize(0);
237
+ counter.decrement(counter.getOffset() - offset);
238
+ counter.setDiscardedOffset(offset);
245
239
  };
246
240
  const readExpGolomb = () => {
247
241
  if (!bitReadingMode) {
@@ -292,6 +286,37 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
292
286
  bitReadingMode = true;
293
287
  byteToShift = getUint8();
294
288
  };
289
+ // https://www.rfc-editor.org/rfc/rfc9639.html#name-coded-number
290
+ const getFlacCodecNumber = () => {
291
+ let ones = 0;
292
+ let bits = 0;
293
+ // eslint-disable-next-line no-constant-binary-expression
294
+ while ((++bits || true) && getBits(1) === 1) {
295
+ ones++;
296
+ }
297
+ if (ones === 0) {
298
+ return getBits(7);
299
+ }
300
+ const bitArray = [];
301
+ const firstByteBits = 8 - ones - 1;
302
+ for (let i = 0; i < firstByteBits; i++) {
303
+ bitArray.unshift(getBits(1));
304
+ }
305
+ const extraBytes = ones - 1;
306
+ for (let i = 0; i < extraBytes; i++) {
307
+ for (let j = 0; j < 8; j++) {
308
+ const val = getBits(1);
309
+ if (j < 2) {
310
+ continue;
311
+ }
312
+ bitArray.unshift(val);
313
+ }
314
+ }
315
+ const encoded = bitArray.reduce((acc, bit, index) => {
316
+ return acc | (bit << index);
317
+ }, 0);
318
+ return encoded;
319
+ };
295
320
  const getBits = (bits) => {
296
321
  let result = 0;
297
322
  let bitsCollected = 0;
@@ -312,7 +337,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
312
337
  return result;
313
338
  };
314
339
  const destroy = () => {
315
- data = new Uint8Array(0);
340
+ uintArray = new Uint8Array(0);
316
341
  buf.resize(0);
317
342
  };
318
343
  return {
@@ -336,7 +361,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
336
361
  return new TextDecoder().decode(atom);
337
362
  },
338
363
  detectFileType: () => {
339
- return (0, file_types_1.detectFileType)(data);
364
+ return (0, file_types_1.detectFileType)(uintArray);
340
365
  },
341
366
  getPaddedFourByteNumber,
342
367
  getMatroskaSegmentId: () => {
@@ -531,6 +556,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
531
556
  startBox,
532
557
  readExpGolomb,
533
558
  startCheckpoint,
559
+ getFlacCodecNumber,
534
560
  };
535
561
  };
536
562
  exports.getArrayBufferIterator = getArrayBufferIterator;
@@ -0,0 +1,3 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseAac: (state: ParserState) => Promise<ParseResult>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseAac = void 0;
4
+ const aac_codecprivate_1 = require("../../aac-codecprivate");
5
+ const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
6
+ const register_track_1 = require("../../register-track");
7
+ const parseAac = async (state) => {
8
+ const { iterator } = state;
9
+ const startOffset = iterator.counter.getOffset();
10
+ iterator.startReadingBits();
11
+ const syncWord = iterator.getBits(12);
12
+ if (syncWord !== 0xfff) {
13
+ throw new Error('Invalid syncword: ' + syncWord);
14
+ }
15
+ const id = iterator.getBits(1);
16
+ if (id !== 0) {
17
+ throw new Error('Only supporting MPEG-4 for .aac');
18
+ }
19
+ const layer = iterator.getBits(2);
20
+ if (layer !== 0) {
21
+ throw new Error('Only supporting layer 0 for .aac');
22
+ }
23
+ const protectionAbsent = iterator.getBits(1); // protection absent
24
+ const audioObjectType = iterator.getBits(2); // 1 = 'AAC-LC'
25
+ const samplingFrequencyIndex = iterator.getBits(4);
26
+ const sampleRate = (0, aac_codecprivate_1.getSampleRateFromSampleFrequencyIndex)(samplingFrequencyIndex);
27
+ iterator.getBits(1); // private bit
28
+ const channelConfiguration = iterator.getBits(3);
29
+ const codecPrivate = (0, aac_codecprivate_1.createAacCodecPrivate)({
30
+ audioObjectType,
31
+ sampleRate,
32
+ channelConfiguration,
33
+ codecPrivate: null,
34
+ });
35
+ iterator.getBits(1); // originality
36
+ iterator.getBits(1); // home
37
+ iterator.getBits(1); // copyright bit
38
+ iterator.getBits(1); // copy start
39
+ const frameLength = iterator.getBits(13); // frame length
40
+ iterator.getBits(11); // buffer fullness
41
+ iterator.getBits(2); // number of AAC frames minus 1
42
+ if (!protectionAbsent) {
43
+ iterator.getBits(16); // crc
44
+ }
45
+ iterator.stopReadingBits();
46
+ iterator.counter.decrement(iterator.counter.getOffset() - startOffset);
47
+ const data = iterator.getSlice(frameLength);
48
+ if (state.callbacks.tracks.getTracks().length === 0) {
49
+ await (0, register_track_1.registerTrack)({
50
+ state,
51
+ container: 'aac',
52
+ track: {
53
+ codec: (0, aac_codecprivate_1.mapAudioObjectTypeToCodecString)(audioObjectType),
54
+ codecWithoutConfig: 'aac',
55
+ codecPrivate,
56
+ description: codecPrivate,
57
+ numberOfChannels: channelConfiguration,
58
+ sampleRate,
59
+ timescale: 1000000,
60
+ trackId: 0,
61
+ trakBox: null,
62
+ type: 'audio',
63
+ },
64
+ });
65
+ state.callbacks.tracks.setIsDone(state.logLevel);
66
+ }
67
+ const duration = 1024 / sampleRate;
68
+ const { index } = state.aac.addSample({ offset: startOffset, size: frameLength });
69
+ const timestamp = (1024 / sampleRate) * index;
70
+ // One ADTS frame contains 1024 samples
71
+ await state.callbacks.onAudioSample(0, (0, convert_audio_or_video_sample_1.convertAudioOrVideoSampleToWebCodecsTimestamps)({
72
+ duration,
73
+ type: 'key',
74
+ data,
75
+ offset: startOffset,
76
+ timescale: 1000000,
77
+ trackId: 0,
78
+ cts: timestamp,
79
+ dts: timestamp,
80
+ timestamp,
81
+ }, 1));
82
+ return Promise.resolve(null);
83
+ };
84
+ exports.parseAac = parseAac;
@@ -0,0 +1,4 @@
1
+ export type AacStructure = {
2
+ type: 'aac';
3
+ boxes: never[];
4
+ };
@@ -1,2 +1,2 @@
1
1
  import type { AvcInfo } from './parse-avc';
2
- export declare const getKeyFrameOrDeltaFromAvcInfo: (infos: AvcInfo[]) => "delta" | "key";
2
+ export declare const getKeyFrameOrDeltaFromAvcInfo: (infos: AvcInfo[]) => "key" | "delta";
@@ -0,0 +1,2 @@
1
+ import type { BufferIterator } from '../../buffer-iterator';
2
+ export declare const getBlockSize: (iterator: BufferIterator) => number | "uncommon-u16" | "uncommon-u8";
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBlockSize = void 0;
4
+ const getBlockSize = (iterator) => {
5
+ const bits = iterator.getBits(4);
6
+ if (bits === 0b0000) {
7
+ throw new Error('Reserved block size');
8
+ }
9
+ if (bits === 0b0001) {
10
+ return 192;
11
+ }
12
+ if (bits >= 0b0010 && bits <= 0b0101) {
13
+ return 144 * 2 ** bits;
14
+ }
15
+ if (bits === 0b0110) {
16
+ return 'uncommon-u8';
17
+ }
18
+ if (bits === 0b0111) {
19
+ return 'uncommon-u16';
20
+ }
21
+ if (bits >= 0b1000 && bits <= 0b1111) {
22
+ return 2 ** bits;
23
+ }
24
+ throw new Error('Invalid block size');
25
+ };
26
+ exports.getBlockSize = getBlockSize;
@@ -0,0 +1,2 @@
1
+ import type { BufferIterator } from '../../buffer-iterator';
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 5 | 2 | 8 | 1 | 7 | 3 | 4 | 6;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getChannelCount = void 0;
4
+ // https://www.rfc-editor.org/rfc/rfc9639.html#name-channels-bits
5
+ const getChannelCount = (iterator) => {
6
+ const bits = iterator.getBits(4);
7
+ if (bits === 0b0000) {
8
+ return 1;
9
+ }
10
+ if (bits === 0b0001) {
11
+ return 2;
12
+ }
13
+ if (bits === 0b0010) {
14
+ return 3;
15
+ }
16
+ if (bits === 0b0011) {
17
+ return 4;
18
+ }
19
+ if (bits === 0b0100) {
20
+ return 5;
21
+ }
22
+ if (bits === 0b0101) {
23
+ return 6;
24
+ }
25
+ if (bits === 0b0110) {
26
+ return 7;
27
+ }
28
+ if (bits === 0b0111) {
29
+ return 8;
30
+ }
31
+ if (bits === 0b1000 || bits === 0b1001 || bits === 0b1010) {
32
+ return 2;
33
+ }
34
+ throw new Error(`Invalid channel count: ${bits.toString(2)}`);
35
+ };
36
+ exports.getChannelCount = getChannelCount;
@@ -0,0 +1,2 @@
1
+ import type { ParserState } from '../../state/parser-state';
2
+ export declare const getDurationFromFlac: (parserState: ParserState) => number;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDurationFromFlac = void 0;
4
+ const getDurationFromFlac = (parserState) => {
5
+ const structure = parserState.getFlacStructure();
6
+ const streaminfo = structure.boxes.find((b) => b.type === 'flac-streaminfo');
7
+ if (!streaminfo) {
8
+ throw new Error('Streaminfo not found');
9
+ }
10
+ return streaminfo.totalSamples / streaminfo.sampleRate;
11
+ };
12
+ exports.getDurationFromFlac = getDurationFromFlac;
@@ -0,0 +1,2 @@
1
+ import type { FlacStructure } from './types';
2
+ export declare const getMetadataFromFlac: (structure: FlacStructure) => import("../..").MetadataEntry[] | null;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMetadataFromFlac = void 0;
4
+ const getMetadataFromFlac = (structure) => {
5
+ const box = structure.boxes.find((b) => b.type === 'flac-vorbis-comment');
6
+ if (!box) {
7
+ return null;
8
+ }
9
+ return box.fields;
10
+ };
11
+ exports.getMetadataFromFlac = getMetadataFromFlac;
@@ -0,0 +1,3 @@
1
+ import type { BufferIterator } from '../../buffer-iterator';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const getSampleRate: (iterator: BufferIterator, state: ParserState) => number | "uncommon-u8" | "uncommon-u16" | "uncommon-u16-10";
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSampleRate = void 0;
4
+ // https://www.rfc-editor.org/rfc/rfc9639.html#name-sample-rate-bits
5
+ const getSampleRate = (iterator, state) => {
6
+ var _a, _b;
7
+ const mode = iterator.getBits(4);
8
+ if (mode === 0b0000) {
9
+ const structure = state.getFlacStructure();
10
+ const sampleRate = (_b = (_a = structure.boxes.find((box) => box.type === 'flac-streaminfo')) === null || _a === void 0 ? void 0 : _a.sampleRate) !== null && _b !== void 0 ? _b : null;
11
+ if (sampleRate === null) {
12
+ throw new Error('Sample rate not found');
13
+ }
14
+ return sampleRate;
15
+ }
16
+ if (mode === 0b0001) {
17
+ return 88200;
18
+ }
19
+ if (mode === 0b0010) {
20
+ return 176400;
21
+ }
22
+ if (mode === 0b0011) {
23
+ return 192000;
24
+ }
25
+ if (mode === 0b0100) {
26
+ return 8000;
27
+ }
28
+ if (mode === 0b0101) {
29
+ return 16000;
30
+ }
31
+ if (mode === 0b0110) {
32
+ return 22050;
33
+ }
34
+ if (mode === 0b0111) {
35
+ return 24000;
36
+ }
37
+ if (mode === 0b1000) {
38
+ return 32000;
39
+ }
40
+ if (mode === 0b1001) {
41
+ return 44100;
42
+ }
43
+ if (mode === 0b1010) {
44
+ return 48000;
45
+ }
46
+ if (mode === 0b1011) {
47
+ return 96000;
48
+ }
49
+ if (mode === 0b1100) {
50
+ return 'uncommon-u8';
51
+ }
52
+ if (mode === 0b1101) {
53
+ return 'uncommon-u16';
54
+ }
55
+ if (mode === 0b1110) {
56
+ return 'uncommon-u16-10';
57
+ }
58
+ throw new Error(`Invalid sample rate mode: ${mode.toString(2)}`);
59
+ };
60
+ exports.getSampleRate = getSampleRate;
@@ -0,0 +1,15 @@
1
+ import { type BufferIterator } from '../../buffer-iterator';
2
+ import type { ParseResult } from '../../parse-result';
3
+ import type { ParserState } from '../../state/parser-state';
4
+ export declare const parseFrameHeader: ({ iterator, state, }: {
5
+ iterator: BufferIterator;
6
+ state: ParserState;
7
+ }) => {
8
+ num: number;
9
+ blockSize: number;
10
+ sampleRate: number;
11
+ } | null;
12
+ export declare const parseFlacFrame: ({ state, iterator, }: {
13
+ state: ParserState;
14
+ iterator: BufferIterator;
15
+ }) => Promise<ParseResult>;