@remotion/media-parser 4.0.249 → 4.0.251

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 (405) hide show
  1. package/dist/add-avc-profile-to-track.js +2 -2
  2. package/dist/buffer-iterator.d.ts +3 -5
  3. package/dist/buffer-iterator.js +66 -50
  4. package/dist/containers/aac/parse-aac.d.ts +3 -0
  5. package/dist/containers/aac/parse-aac.js +83 -0
  6. package/dist/containers/aac/types.d.ts +4 -0
  7. package/dist/{boxes → containers}/avc/key.d.ts +1 -1
  8. package/dist/containers/flac/get-block-size.d.ts +2 -0
  9. package/dist/containers/flac/get-block-size.js +26 -0
  10. package/dist/containers/flac/get-channel-count.d.ts +2 -0
  11. package/dist/containers/flac/get-channel-count.js +36 -0
  12. package/dist/containers/flac/get-duration-from-flac.d.ts +2 -0
  13. package/dist/containers/flac/get-duration-from-flac.js +15 -0
  14. package/dist/containers/flac/get-metadata-from-flac.d.ts +2 -0
  15. package/dist/containers/flac/get-metadata-from-flac.js +11 -0
  16. package/dist/containers/flac/get-sample-rate.d.ts +3 -0
  17. package/dist/containers/flac/get-sample-rate.js +60 -0
  18. package/dist/containers/flac/parse-flac-frame.d.ts +15 -0
  19. package/dist/containers/flac/parse-flac-frame.js +175 -0
  20. package/dist/{boxes/riff/parse-box.d.ts → containers/flac/parse-flac.d.ts} +1 -3
  21. package/dist/containers/flac/parse-flac.js +54 -0
  22. package/dist/{boxes/mp3/parse-mpeg-header.d.ts → containers/flac/parse-header.d.ts} +4 -3
  23. package/dist/containers/flac/parse-header.js +10 -0
  24. package/dist/{boxes/mp3/parse-mp3.d.ts → containers/flac/parse-metadata.d.ts} +4 -4
  25. package/dist/containers/flac/parse-metadata.js +24 -0
  26. package/dist/{boxes/webm/parse-webm-header.d.ts → containers/flac/parse-streaminfo.d.ts} +2 -4
  27. package/dist/containers/flac/parse-streaminfo.js +53 -0
  28. package/dist/containers/flac/parse-unknown-block.d.ts +8 -0
  29. package/dist/containers/flac/parse-unknown-block.js +11 -0
  30. package/dist/containers/flac/types.d.ts +26 -0
  31. package/dist/containers/iso-base-media/base-media-box.d.ts +40 -0
  32. package/dist/containers/iso-base-media/get-children.d.ts +6 -0
  33. package/dist/containers/iso-base-media/get-children.js +21 -0
  34. package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.d.ts +1 -1
  35. package/dist/containers/iso-base-media/mdat/mdat.d.ts +2 -0
  36. package/dist/containers/iso-base-media/mdat/mdat.js +91 -0
  37. package/dist/containers/iso-base-media/moov/moov.d.ts +12 -0
  38. package/dist/containers/iso-base-media/moov/moov.js +17 -0
  39. package/dist/containers/iso-base-media/parse-boxes.d.ts +3 -0
  40. package/dist/containers/iso-base-media/parse-boxes.js +40 -0
  41. package/dist/containers/iso-base-media/process-box.d.ts +3 -0
  42. package/dist/{boxes → containers}/iso-base-media/process-box.js +49 -147
  43. package/dist/{boxes → containers}/iso-base-media/stsd/mebx.d.ts +1 -6
  44. package/dist/containers/iso-base-media/stsd/mebx.js +22 -0
  45. package/dist/{boxes → containers}/iso-base-media/stsd/samples.d.ts +6 -16
  46. package/dist/{boxes → containers}/iso-base-media/stsd/samples.js +26 -71
  47. package/dist/{boxes → containers}/iso-base-media/stsd/stsd.d.ts +1 -6
  48. package/dist/{boxes → containers}/iso-base-media/stsd/stsd.js +3 -6
  49. package/dist/containers/iso-base-media/trak/trak.d.ts +12 -0
  50. package/dist/containers/iso-base-media/trak/trak.js +17 -0
  51. package/dist/{boxes → containers}/iso-base-media/traversal.d.ts +2 -3
  52. package/dist/{boxes → containers}/iso-base-media/traversal.js +1 -12
  53. package/dist/containers/iso-base-media/void-box.js +2 -0
  54. package/dist/containers/mp3/get-tracks-from-mp3.d.ts +4 -0
  55. package/dist/{boxes → containers}/mp3/get-tracks-from-mp3.js +6 -6
  56. package/dist/containers/mp3/id3.d.ts +4 -0
  57. package/dist/{boxes → containers}/mp3/id3.js +8 -5
  58. package/dist/containers/mp3/parse-mp3.d.ts +3 -0
  59. package/dist/{boxes → containers}/mp3/parse-mp3.js +4 -20
  60. package/dist/containers/mp3/parse-mpeg-header.d.ts +4 -0
  61. package/dist/{boxes → containers}/mp3/parse-mpeg-header.js +2 -1
  62. package/dist/containers/riff/expect-riff-box.d.ts +7 -0
  63. package/dist/containers/riff/expect-riff-box.js +72 -0
  64. package/dist/containers/riff/get-duration.d.ts +3 -0
  65. package/dist/containers/riff/get-duration.js +33 -0
  66. package/dist/{boxes → containers}/riff/get-tracks-from-avi.d.ts +2 -3
  67. package/dist/{boxes → containers}/riff/get-tracks-from-avi.js +6 -10
  68. package/dist/containers/riff/parse-list-box.d.ts +6 -0
  69. package/dist/containers/riff/parse-list-box.js +29 -0
  70. package/dist/containers/riff/parse-movi.d.ts +11 -0
  71. package/dist/{boxes → containers}/riff/parse-movi.js +37 -57
  72. package/dist/containers/riff/parse-riff-body.d.ts +3 -0
  73. package/dist/containers/riff/parse-riff-body.js +22 -0
  74. package/dist/containers/riff/parse-riff-box.d.ts +7 -0
  75. package/dist/{boxes → containers}/riff/parse-riff-box.js +3 -10
  76. package/dist/containers/riff/parse-riff-header.d.ts +3 -0
  77. package/dist/containers/riff/parse-riff-header.js +23 -0
  78. package/dist/containers/riff/parse-riff.d.ts +3 -0
  79. package/dist/containers/riff/parse-riff.js +12 -0
  80. package/dist/containers/riff/parse-strf.d.ts +7 -0
  81. package/dist/{boxes → containers}/riff/parse-strf.js +4 -8
  82. package/dist/{boxes → containers}/riff/parse-strh.js +11 -0
  83. package/dist/containers/riff/parse-video-section.d.ts +2 -0
  84. package/dist/containers/riff/parse-video-section.js +19 -0
  85. package/dist/{boxes → containers}/riff/riff-box.d.ts +8 -14
  86. package/dist/containers/riff/riff-box.js +2 -0
  87. package/dist/{boxes → containers}/riff/traversal.d.ts +1 -3
  88. package/dist/{boxes → containers}/riff/traversal.js +1 -6
  89. package/dist/containers/transport-stream/boxes.js +2 -0
  90. package/dist/containers/transport-stream/get-tracks.d.ts +4 -0
  91. package/dist/{boxes → containers}/transport-stream/get-tracks.js +4 -3
  92. package/dist/containers/transport-stream/parse-packet.d.ts +5 -0
  93. package/dist/{boxes → containers}/transport-stream/parse-packet.js +4 -5
  94. package/dist/containers/transport-stream/parse-stream-packet.d.ts +9 -0
  95. package/dist/{boxes → containers}/transport-stream/parse-stream-packet.js +11 -12
  96. package/dist/containers/transport-stream/parse-transport-stream.d.ts +3 -0
  97. package/dist/{boxes → containers}/transport-stream/parse-transport-stream.js +8 -37
  98. package/dist/{boxes → containers}/transport-stream/process-stream-buffers.d.ts +1 -2
  99. package/dist/{boxes → containers}/transport-stream/process-stream-buffers.js +3 -3
  100. package/dist/containers/wav/get-duration-from-wav.d.ts +3 -0
  101. package/dist/containers/wav/get-duration-from-wav.js +29 -0
  102. package/dist/containers/wav/get-metadata-from-wav.d.ts +3 -0
  103. package/dist/containers/wav/get-metadata-from-wav.js +11 -0
  104. package/dist/containers/wav/parse-data.d.ts +5 -0
  105. package/dist/containers/wav/parse-data.js +25 -0
  106. package/dist/containers/wav/parse-fmt.d.ts +5 -0
  107. package/dist/containers/wav/parse-fmt.js +56 -0
  108. package/dist/containers/wav/parse-header.d.ts +5 -0
  109. package/dist/containers/wav/parse-header.js +17 -0
  110. package/dist/containers/wav/parse-id3.d.ts +5 -0
  111. package/dist/containers/wav/parse-id3.js +17 -0
  112. package/dist/containers/wav/parse-list.d.ts +5 -0
  113. package/dist/containers/wav/parse-list.js +32 -0
  114. package/dist/containers/wav/parse-video-section.d.ts +5 -0
  115. package/dist/containers/wav/parse-video-section.js +37 -0
  116. package/dist/containers/wav/parse-wav.d.ts +3 -0
  117. package/dist/containers/wav/parse-wav.js +36 -0
  118. package/dist/containers/wav/types.d.ts +30 -0
  119. package/dist/containers/wav/types.js +2 -0
  120. package/dist/{boxes → containers}/webm/parse-ebml.d.ts +1 -2
  121. package/dist/{boxes → containers}/webm/parse-ebml.js +6 -2
  122. package/dist/containers/webm/parse-webm-header.d.ts +3 -0
  123. package/dist/containers/webm/parse-webm-header.js +53 -0
  124. package/dist/containers/webm/segments.d.ts +9 -0
  125. package/dist/containers/webm/segments.js +80 -0
  126. package/dist/emit-available-info.d.ts +1 -3
  127. package/dist/emit-available-info.js +86 -76
  128. package/dist/errors.d.ts +1 -1
  129. package/dist/esm/from-node.mjs +8 -9
  130. package/dist/esm/index.mjs +4951 -4693
  131. package/dist/file-types/detect-file-type.d.ts +5 -1
  132. package/dist/file-types/detect-file-type.js +10 -3
  133. package/dist/file-types/index.js +3 -0
  134. package/dist/get-audio-codec.d.ts +4 -5
  135. package/dist/get-audio-codec.js +5 -5
  136. package/dist/get-container.d.ts +2 -2
  137. package/dist/get-container.js +10 -1
  138. package/dist/get-dimensions.d.ts +2 -3
  139. package/dist/get-dimensions.js +14 -10
  140. package/dist/get-duration.d.ts +5 -5
  141. package/dist/get-duration.js +29 -27
  142. package/dist/get-fields-from-callbacks.js +4 -0
  143. package/dist/get-fps.d.ts +1 -1
  144. package/dist/get-fps.js +12 -4
  145. package/dist/get-is-hdr.d.ts +2 -3
  146. package/dist/get-is-hdr.js +4 -4
  147. package/dist/get-keyframes.d.ts +1 -1
  148. package/dist/get-keyframes.js +4 -3
  149. package/dist/get-number-of-audio-channels.d.ts +3 -0
  150. package/dist/get-number-of-audio-channels.js +14 -0
  151. package/dist/get-sample-aspect-ratio.d.ts +8 -8
  152. package/dist/get-sample-aspect-ratio.js +1 -1
  153. package/dist/get-sample-positions-from-lpcm.d.ts +1 -1
  154. package/dist/get-sample-positions-from-lpcm.js +1 -1
  155. package/dist/get-sample-positions.d.ts +6 -6
  156. package/dist/get-sample-rate.d.ts +3 -0
  157. package/dist/get-sample-rate.js +14 -0
  158. package/dist/get-tracks.d.ts +9 -8
  159. package/dist/get-tracks.js +36 -22
  160. package/dist/get-video-codec.d.ts +3 -4
  161. package/dist/get-video-codec.js +6 -6
  162. package/dist/has-all-info.js +26 -15
  163. package/dist/index.d.ts +145 -41
  164. package/dist/index.js +8 -8
  165. package/dist/init-video.d.ts +7 -0
  166. package/dist/init-video.js +114 -0
  167. package/dist/is-audio-structure.d.ts +2 -0
  168. package/dist/is-audio-structure.js +31 -0
  169. package/dist/metadata/get-metadata.js +16 -1
  170. package/dist/metadata/metadata-from-iso.d.ts +2 -1
  171. package/dist/metadata/metadata-from-iso.js +1 -1
  172. package/dist/metadata/metadata-from-matroska.js +1 -1
  173. package/dist/metadata/metadata-from-riff.d.ts +1 -1
  174. package/dist/options.d.ts +64 -38
  175. package/dist/parse-media.js +125 -43
  176. package/dist/parse-result.d.ts +8 -61
  177. package/dist/perform-seek.d.ts +13 -0
  178. package/dist/perform-seek.js +29 -0
  179. package/dist/readers/from-node.js +7 -8
  180. package/dist/readers/reader.d.ts +1 -1
  181. package/dist/register-track.d.ts +3 -3
  182. package/dist/run-parse-iteration.d.ts +8 -0
  183. package/dist/run-parse-iteration.js +48 -0
  184. package/dist/samples-from-moof.js +1 -1
  185. package/dist/state/aac-state.d.ts +13 -0
  186. package/dist/state/aac-state.js +17 -0
  187. package/dist/state/can-skip-tracks.d.ts +8 -1
  188. package/dist/state/can-skip-tracks.js +42 -27
  189. package/dist/state/emitted-fields.js +4 -0
  190. package/dist/state/flac-state.d.ts +4 -0
  191. package/dist/state/flac-state.js +13 -0
  192. package/dist/state/has-tracks-section.d.ts +2 -1
  193. package/dist/state/has-tracks-section.js +4 -1
  194. package/dist/state/iso-base-media/cached-sample-positions.d.ts +15 -0
  195. package/dist/state/iso-base-media/cached-sample-positions.js +42 -0
  196. package/dist/state/iso-base-media/iso-state.d.ts +8 -0
  197. package/dist/state/iso-base-media/iso-state.js +15 -0
  198. package/dist/{may-skip-video-data → state}/may-skip-video-data.d.ts +1 -1
  199. package/dist/{may-skip-video-data → state}/may-skip-video-data.js +6 -2
  200. package/dist/{may-skip-video-data → state}/need-samples-for-fields.js +4 -0
  201. package/dist/state/parser-state.d.ts +131 -17
  202. package/dist/state/parser-state.js +18 -5
  203. package/dist/state/sample-callbacks.d.ts +6 -2
  204. package/dist/state/sample-callbacks.js +5 -2
  205. package/dist/state/slow-duration-fps.d.ts +2 -0
  206. package/dist/state/slow-duration-fps.js +18 -0
  207. package/dist/state/transport-stream.d.ts +8 -0
  208. package/dist/state/transport-stream.js +11 -0
  209. package/dist/state/video-section.d.ts +16 -0
  210. package/dist/state/video-section.js +37 -0
  211. package/dist/state/webm.d.ts +17 -2
  212. package/dist/state/webm.js +33 -1
  213. package/dist/version.d.ts +1 -1
  214. package/dist/version.js +1 -1
  215. package/dist/webcodec-sample-types.d.ts +3 -3
  216. package/package.json +3 -3
  217. package/test.json +663 -0
  218. package/dist/boxes/iso-base-media/get-children.d.ts +0 -14
  219. package/dist/boxes/iso-base-media/get-children.js +0 -39
  220. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +0 -26
  221. package/dist/boxes/iso-base-media/mdat/mdat.js +0 -141
  222. package/dist/boxes/iso-base-media/moov/moov.d.ts +0 -19
  223. package/dist/boxes/iso-base-media/moov/moov.js +0 -27
  224. package/dist/boxes/iso-base-media/parse-boxes.d.ts +0 -15
  225. package/dist/boxes/iso-base-media/parse-boxes.js +0 -129
  226. package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +0 -12
  227. package/dist/boxes/iso-base-media/parse-mdat-partially.js +0 -33
  228. package/dist/boxes/iso-base-media/process-box.d.ts +0 -15
  229. package/dist/boxes/iso-base-media/stsd/mebx.js +0 -32
  230. package/dist/boxes/iso-base-media/trak/trak.d.ts +0 -19
  231. package/dist/boxes/iso-base-media/trak/trak.js +0 -27
  232. package/dist/boxes/mp3/get-tracks-from-mp3.d.ts +0 -4
  233. package/dist/boxes/mp3/id3-v2.d.ts +0 -0
  234. package/dist/boxes/mp3/id3-v2.js +0 -1
  235. package/dist/boxes/mp3/id3.d.ts +0 -8
  236. package/dist/boxes/riff/continue-after-riff-result.d.ts +0 -13
  237. package/dist/boxes/riff/continue-after-riff-result.js +0 -34
  238. package/dist/boxes/riff/expect-riff-box.d.ts +0 -19
  239. package/dist/boxes/riff/expect-riff-box.js +0 -50
  240. package/dist/boxes/riff/parse-box.js +0 -35
  241. package/dist/boxes/riff/parse-fmt-box.d.ts +0 -7
  242. package/dist/boxes/riff/parse-fmt-box.js +0 -33
  243. package/dist/boxes/riff/parse-list-box.d.ts +0 -10
  244. package/dist/boxes/riff/parse-list-box.js +0 -31
  245. package/dist/boxes/riff/parse-movi.d.ts +0 -17
  246. package/dist/boxes/riff/parse-riff-body.d.ts +0 -11
  247. package/dist/boxes/riff/parse-riff-body.js +0 -105
  248. package/dist/boxes/riff/parse-riff-box.d.ts +0 -12
  249. package/dist/boxes/riff/parse-strf.d.ts +0 -7
  250. package/dist/boxes/transport-stream/get-tracks.d.ts +0 -5
  251. package/dist/boxes/transport-stream/parse-packet.d.ts +0 -13
  252. package/dist/boxes/transport-stream/parse-stream-packet.d.ts +0 -15
  253. package/dist/boxes/transport-stream/parse-transport-stream.d.ts +0 -13
  254. package/dist/boxes/webm/parse-webm-header.js +0 -37
  255. package/dist/boxes/webm/segments/parse-children.d.ts +0 -23
  256. package/dist/boxes/webm/segments/parse-children.js +0 -144
  257. package/dist/boxes/webm/segments.d.ts +0 -15
  258. package/dist/boxes/webm/segments.js +0 -161
  259. package/dist/continue-mdat-routine.d.ts +0 -17
  260. package/dist/continue-mdat-routine.js +0 -92
  261. package/dist/parse-video.d.ts +0 -28
  262. package/dist/parse-video.js +0 -130
  263. /package/dist/{boxes/iso-base-media/base-type.js → containers/aac/types.js} +0 -0
  264. /package/dist/{boxes → containers}/avc/codec-string.d.ts +0 -0
  265. /package/dist/{boxes → containers}/avc/codec-string.js +0 -0
  266. /package/dist/{boxes → containers}/avc/color.d.ts +0 -0
  267. /package/dist/{boxes → containers}/avc/color.js +0 -0
  268. /package/dist/{boxes → containers}/avc/create-sps-pps-data.d.ts +0 -0
  269. /package/dist/{boxes → containers}/avc/create-sps-pps-data.js +0 -0
  270. /package/dist/{boxes → containers}/avc/interpret-sps.d.ts +0 -0
  271. /package/dist/{boxes → containers}/avc/interpret-sps.js +0 -0
  272. /package/dist/{boxes → containers}/avc/key.js +0 -0
  273. /package/dist/{boxes → containers}/avc/parse-avc.d.ts +0 -0
  274. /package/dist/{boxes → containers}/avc/parse-avc.js +0 -0
  275. /package/dist/{boxes → containers}/avc/sps-and-pps.d.ts +0 -0
  276. /package/dist/{boxes → containers}/avc/sps-and-pps.js +0 -0
  277. /package/dist/{boxes/iso-base-media/void-box.js → containers/flac/types.js} +0 -0
  278. /package/dist/{boxes/riff/riff-box.js → containers/iso-base-media/base-media-box.js} +0 -0
  279. /package/dist/{boxes → containers}/iso-base-media/base-type.d.ts +0 -0
  280. /package/dist/{boxes/transport-stream/boxes.js → containers/iso-base-media/base-type.js} +0 -0
  281. /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.d.ts +0 -0
  282. /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.js +0 -0
  283. /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.d.ts +0 -0
  284. /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.js +0 -0
  285. /package/dist/{boxes → containers}/iso-base-media/esds/esds.d.ts +0 -0
  286. /package/dist/{boxes → containers}/iso-base-media/esds/esds.js +0 -0
  287. /package/dist/{boxes → containers}/iso-base-media/ftyp.d.ts +0 -0
  288. /package/dist/{boxes → containers}/iso-base-media/ftyp.js +0 -0
  289. /package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.d.ts +0 -0
  290. /package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.js +0 -0
  291. /package/dist/{boxes → containers}/iso-base-media/get-keyframes.d.ts +0 -0
  292. /package/dist/{boxes → containers}/iso-base-media/get-keyframes.js +0 -0
  293. /package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.js +0 -0
  294. /package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.d.ts +0 -0
  295. /package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.js +0 -0
  296. /package/dist/{boxes → containers}/iso-base-media/make-track.d.ts +0 -0
  297. /package/dist/{boxes → containers}/iso-base-media/make-track.js +0 -0
  298. /package/dist/{boxes → containers}/iso-base-media/mdhd.d.ts +0 -0
  299. /package/dist/{boxes → containers}/iso-base-media/mdhd.js +0 -0
  300. /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.d.ts +0 -0
  301. /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.js +0 -0
  302. /package/dist/{boxes → containers}/iso-base-media/meta/ilst.d.ts +0 -0
  303. /package/dist/{boxes → containers}/iso-base-media/meta/ilst.js +0 -0
  304. /package/dist/{boxes → containers}/iso-base-media/mvhd.d.ts +0 -0
  305. /package/dist/{boxes → containers}/iso-base-media/mvhd.js +0 -0
  306. /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.d.ts +0 -0
  307. /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.js +0 -0
  308. /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.d.ts +0 -0
  309. /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.js +0 -0
  310. /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.d.ts +0 -0
  311. /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.js +0 -0
  312. /package/dist/{boxes → containers}/iso-base-media/stsd/colr.d.ts +0 -0
  313. /package/dist/{boxes → containers}/iso-base-media/stsd/colr.js +0 -0
  314. /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.d.ts +0 -0
  315. /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.js +0 -0
  316. /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.d.ts +0 -0
  317. /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.js +0 -0
  318. /package/dist/{boxes → containers}/iso-base-media/stsd/keys.d.ts +0 -0
  319. /package/dist/{boxes → containers}/iso-base-media/stsd/keys.js +0 -0
  320. /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.d.ts +0 -0
  321. /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.js +0 -0
  322. /package/dist/{boxes → containers}/iso-base-media/stsd/stco.d.ts +0 -0
  323. /package/dist/{boxes → containers}/iso-base-media/stsd/stco.js +0 -0
  324. /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.d.ts +0 -0
  325. /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.js +0 -0
  326. /package/dist/{boxes → containers}/iso-base-media/stsd/stss.d.ts +0 -0
  327. /package/dist/{boxes → containers}/iso-base-media/stsd/stss.js +0 -0
  328. /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.d.ts +0 -0
  329. /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.js +0 -0
  330. /package/dist/{boxes → containers}/iso-base-media/stsd/stts.d.ts +0 -0
  331. /package/dist/{boxes → containers}/iso-base-media/stsd/stts.js +0 -0
  332. /package/dist/{boxes → containers}/iso-base-media/tfdt.d.ts +0 -0
  333. /package/dist/{boxes → containers}/iso-base-media/tfdt.js +0 -0
  334. /package/dist/{boxes → containers}/iso-base-media/tfhd.d.ts +0 -0
  335. /package/dist/{boxes → containers}/iso-base-media/tfhd.js +0 -0
  336. /package/dist/{boxes → containers}/iso-base-media/tkhd.d.ts +0 -0
  337. /package/dist/{boxes → containers}/iso-base-media/tkhd.js +0 -0
  338. /package/dist/{boxes → containers}/iso-base-media/to-date.d.ts +0 -0
  339. /package/dist/{boxes → containers}/iso-base-media/to-date.js +0 -0
  340. /package/dist/{boxes → containers}/iso-base-media/trun.d.ts +0 -0
  341. /package/dist/{boxes → containers}/iso-base-media/trun.js +0 -0
  342. /package/dist/{boxes → containers}/iso-base-media/void-box.d.ts +0 -0
  343. /package/dist/{boxes → containers}/mp3/get-duration.d.ts +0 -0
  344. /package/dist/{boxes → containers}/mp3/get-duration.js +0 -0
  345. /package/dist/{boxes → containers}/mp3/get-frame-length.d.ts +0 -0
  346. /package/dist/{boxes → containers}/mp3/get-frame-length.js +0 -0
  347. /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.d.ts +0 -0
  348. /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.js +0 -0
  349. /package/dist/{boxes → containers}/mp3/id3-v1.d.ts +0 -0
  350. /package/dist/{boxes → containers}/mp3/id3-v1.js +0 -0
  351. /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.d.ts +0 -0
  352. /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.js +0 -0
  353. /package/dist/{boxes → containers}/riff/is-movi.d.ts +0 -0
  354. /package/dist/{boxes → containers}/riff/is-movi.js +0 -0
  355. /package/dist/{boxes → containers}/riff/parse-avih.d.ts +0 -0
  356. /package/dist/{boxes → containers}/riff/parse-avih.js +0 -0
  357. /package/dist/{boxes → containers}/riff/parse-isft.d.ts +0 -0
  358. /package/dist/{boxes → containers}/riff/parse-isft.js +0 -0
  359. /package/dist/{boxes → containers}/riff/parse-strh.d.ts +0 -0
  360. /package/dist/{boxes → containers}/riff/timescale.d.ts +0 -0
  361. /package/dist/{boxes → containers}/riff/timescale.js +0 -0
  362. /package/dist/{boxes → containers}/transport-stream/adts-header.d.ts +0 -0
  363. /package/dist/{boxes → containers}/transport-stream/adts-header.js +0 -0
  364. /package/dist/{boxes → containers}/transport-stream/boxes.d.ts +0 -0
  365. /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.d.ts +0 -0
  366. /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.js +0 -0
  367. /package/dist/{boxes → containers}/transport-stream/find-separator.d.ts +0 -0
  368. /package/dist/{boxes → containers}/transport-stream/find-separator.js +0 -0
  369. /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.d.ts +0 -0
  370. /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.js +0 -0
  371. /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.d.ts +0 -0
  372. /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.js +0 -0
  373. /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.d.ts +0 -0
  374. /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.js +0 -0
  375. /package/dist/{boxes → containers}/transport-stream/parse-pat.d.ts +0 -0
  376. /package/dist/{boxes → containers}/transport-stream/parse-pat.js +0 -0
  377. /package/dist/{boxes → containers}/transport-stream/parse-pes.d.ts +0 -0
  378. /package/dist/{boxes → containers}/transport-stream/parse-pes.js +0 -0
  379. /package/dist/{boxes → containers}/transport-stream/parse-pmt.d.ts +0 -0
  380. /package/dist/{boxes → containers}/transport-stream/parse-pmt.js +0 -0
  381. /package/dist/{boxes → containers}/transport-stream/traversal.d.ts +0 -0
  382. /package/dist/{boxes → containers}/transport-stream/traversal.js +0 -0
  383. /package/dist/{boxes → containers}/webm/allowed-partial-segments.d.ts +0 -0
  384. /package/dist/{boxes → containers}/webm/allowed-partial-segments.js +0 -0
  385. /package/dist/{boxes → containers}/webm/av1-codec-private.d.ts +0 -0
  386. /package/dist/{boxes → containers}/webm/av1-codec-private.js +0 -0
  387. /package/dist/{boxes → containers}/webm/color.d.ts +0 -0
  388. /package/dist/{boxes → containers}/webm/color.js +0 -0
  389. /package/dist/{boxes → containers}/webm/description.d.ts +0 -0
  390. /package/dist/{boxes → containers}/webm/description.js +0 -0
  391. /package/dist/{boxes → containers}/webm/get-ready-tracks.d.ts +0 -0
  392. /package/dist/{boxes → containers}/webm/get-ready-tracks.js +0 -0
  393. /package/dist/{boxes → containers}/webm/get-sample-from-block.d.ts +0 -0
  394. /package/dist/{boxes → containers}/webm/get-sample-from-block.js +0 -0
  395. /package/dist/{boxes → containers}/webm/make-track.d.ts +0 -0
  396. /package/dist/{boxes → containers}/webm/make-track.js +0 -0
  397. /package/dist/{boxes → containers}/webm/segments/all-segments.d.ts +0 -0
  398. /package/dist/{boxes → containers}/webm/segments/all-segments.js +0 -0
  399. /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.d.ts +0 -0
  400. /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.js +0 -0
  401. /package/dist/{boxes → containers}/webm/segments/track-entry.d.ts +0 -0
  402. /package/dist/{boxes → containers}/webm/segments/track-entry.js +0 -0
  403. /package/dist/{boxes → containers}/webm/traversal.d.ts +0 -0
  404. /package/dist/{boxes → containers}/webm/traversal.js +0 -0
  405. /package/dist/{may-skip-video-data → state}/need-samples-for-fields.d.ts +0 -0
@@ -1,61 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseTransportStream = void 0;
4
- const has_all_info_1 = require("../../has-all-info");
5
4
  const parse_packet_1 = require("./parse-packet");
6
5
  const process_stream_buffers_1 = require("./process-stream-buffers");
7
- const parseTransportStream = async ({ iterator, state, streamBuffers, fields, nextPesHeaderStore, }) => {
6
+ const parseTransportStream = async (state) => {
8
7
  const structure = state.structure.getStructure();
9
8
  if (structure.type !== 'transport-stream') {
10
9
  throw new Error('Invalid structure type');
11
10
  }
12
- if (iterator.bytesRemaining() === 0) {
13
- await (0, process_stream_buffers_1.processFinalStreamBuffers)({
14
- streamBufferMap: streamBuffers,
15
- state,
16
- structure,
17
- });
18
- return Promise.resolve({
19
- status: 'done',
20
- });
21
- }
22
- const continueParsing = () => {
23
- return (0, exports.parseTransportStream)({
24
- iterator,
25
- state,
26
- streamBuffers,
27
- fields,
28
- nextPesHeaderStore,
29
- });
30
- };
31
- if ((0, has_all_info_1.hasAllInfo)({
32
- fields,
33
- state,
34
- })) {
35
- return Promise.resolve({
36
- status: 'done',
37
- });
38
- }
11
+ const { iterator } = state;
39
12
  if (iterator.bytesRemaining() < 188) {
40
13
  return Promise.resolve({
41
- status: 'incomplete',
42
- continueParsing,
43
14
  skipTo: null,
44
15
  });
45
16
  }
46
17
  const packet = await (0, parse_packet_1.parsePacket)({
47
- iterator,
48
- structure,
49
- streamBuffers,
50
18
  parserState: state,
51
- nextPesHeaderStore,
52
19
  });
53
20
  if (packet) {
54
21
  structure.boxes.push(packet);
55
22
  }
23
+ if (iterator.bytesRemaining() === 0) {
24
+ await (0, process_stream_buffers_1.processFinalStreamBuffers)({
25
+ state,
26
+ structure,
27
+ });
28
+ }
56
29
  return Promise.resolve({
57
- status: 'incomplete',
58
- continueParsing,
59
30
  skipTo: null,
60
31
  });
61
32
  };
@@ -13,8 +13,7 @@ export declare const processStreamBuffer: ({ streamBuffer, state, programId, str
13
13
  programId: number;
14
14
  structure: TransportStreamStructure;
15
15
  }) => Promise<void>;
16
- export declare const processFinalStreamBuffers: ({ streamBufferMap, state, structure, }: {
17
- streamBufferMap: StreamBufferMap;
16
+ export declare const processFinalStreamBuffers: ({ state, structure, }: {
18
17
  state: ParserState;
19
18
  structure: TransportStreamStructure;
20
19
  }) => Promise<void>;
@@ -36,8 +36,8 @@ const processStreamBuffer = async ({ streamBuffer, state, programId, structure,
36
36
  }
37
37
  };
38
38
  exports.processStreamBuffer = processStreamBuffer;
39
- const processFinalStreamBuffers = async ({ streamBufferMap, state, structure, }) => {
40
- for (const [programId, buffer] of streamBufferMap) {
39
+ const processFinalStreamBuffers = async ({ state, structure, }) => {
40
+ for (const [programId, buffer] of state.transportStream.streamBuffers) {
41
41
  if (buffer.buffer.byteLength > 0) {
42
42
  await (0, exports.processStreamBuffer)({
43
43
  streamBuffer: buffer,
@@ -45,7 +45,7 @@ const processFinalStreamBuffers = async ({ streamBufferMap, state, structure, })
45
45
  programId,
46
46
  structure,
47
47
  });
48
- streamBufferMap.delete(programId);
48
+ state.transportStream.streamBuffers.delete(programId);
49
49
  }
50
50
  }
51
51
  };
@@ -0,0 +1,3 @@
1
+ import type { ParserState } from '../../state/parser-state';
2
+ export declare const getDurationFromWav: (state: ParserState) => number;
3
+ export declare const hasDurationFromWav: (state: ParserState) => number | false;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasDurationFromWav = exports.getDurationFromWav = void 0;
4
+ const getDurationFromWav = (state) => {
5
+ const structure = state.structure.getStructure();
6
+ if (structure.type !== 'wav') {
7
+ throw new Error('Expected wav structure');
8
+ }
9
+ const fmt = structure.boxes.find((b) => b.type === 'wav-fmt');
10
+ if (!fmt) {
11
+ throw new Error('Expected fmt box');
12
+ }
13
+ const dataBox = structure.boxes.find((b) => b.type === 'wav-data');
14
+ if (!dataBox) {
15
+ throw new Error('Expected data box');
16
+ }
17
+ const durationInSeconds = dataBox.dataSize / (fmt.sampleRate * fmt.blockAlign);
18
+ return durationInSeconds;
19
+ };
20
+ exports.getDurationFromWav = getDurationFromWav;
21
+ const hasDurationFromWav = (state) => {
22
+ try {
23
+ return (0, exports.getDurationFromWav)(state);
24
+ }
25
+ catch (_a) {
26
+ return false;
27
+ }
28
+ };
29
+ exports.hasDurationFromWav = hasDurationFromWav;
@@ -0,0 +1,3 @@
1
+ import type { MetadataEntry } from '../../metadata/get-metadata';
2
+ import type { WavStructure } from './types';
3
+ export declare const getMetadataFromWav: (structure: WavStructure) => MetadataEntry[] | null;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMetadataFromWav = void 0;
4
+ const getMetadataFromWav = (structure) => {
5
+ const list = structure.boxes.find((b) => b.type === 'wav-list');
6
+ if (!list) {
7
+ return null;
8
+ }
9
+ return list.metadata;
10
+ };
11
+ exports.getMetadataFromWav = getMetadataFromWav;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseData: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseData = void 0;
4
+ const may_skip_video_data_1 = require("../../state/may-skip-video-data");
5
+ const parseData = ({ state, }) => {
6
+ const { iterator } = state;
7
+ const ckSize = iterator.getUint32Le(); // chunkSize
8
+ const box = {
9
+ type: 'wav-data',
10
+ dataSize: ckSize,
11
+ };
12
+ state.structure.getStructure().boxes.push(box);
13
+ state.callbacks.tracks.setIsDone();
14
+ state.videoSection.setVideoSection({
15
+ size: ckSize,
16
+ start: iterator.counter.getOffset(),
17
+ });
18
+ if ((0, may_skip_video_data_1.maySkipVideoData)({ state })) {
19
+ return Promise.resolve({
20
+ skipTo: iterator.counter.getOffset() + ckSize,
21
+ });
22
+ }
23
+ return Promise.resolve({ skipTo: null });
24
+ };
25
+ exports.parseData = parseData;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseFmt: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFmt = void 0;
4
+ const register_track_1 = require("../../register-track");
5
+ const parseFmt = async ({ state, }) => {
6
+ const { iterator } = state;
7
+ const ckSize = iterator.getUint32Le(); // chunkSize
8
+ const box = iterator.startBox(ckSize);
9
+ const audioFormat = iterator.getUint16Le();
10
+ if (audioFormat !== 1) {
11
+ throw new Error(`Only supporting WAVE with PCM audio format, but got ${audioFormat}`);
12
+ }
13
+ const numberOfChannels = iterator.getUint16Le();
14
+ const sampleRate = iterator.getUint32Le();
15
+ const byteRate = iterator.getUint32Le();
16
+ const blockAlign = iterator.getUint16Le();
17
+ const bitsPerSample = iterator.getUint16Le();
18
+ const format = bitsPerSample === 16
19
+ ? 'pcm-s16'
20
+ : bitsPerSample === 32
21
+ ? 'pcm-s32'
22
+ : bitsPerSample === 24
23
+ ? 'pcm-s24'
24
+ : null;
25
+ if (format === null) {
26
+ throw new Error(`Unsupported bits per sample: ${bitsPerSample}`);
27
+ }
28
+ const wavHeader = {
29
+ bitsPerSample,
30
+ blockAlign,
31
+ byteRate,
32
+ numberOfChannels,
33
+ sampleRate,
34
+ type: 'wav-fmt',
35
+ };
36
+ state.structure.getStructure().boxes.push(wavHeader);
37
+ await (0, register_track_1.registerTrack)({
38
+ state,
39
+ track: {
40
+ type: 'audio',
41
+ codec: format,
42
+ codecPrivate: null,
43
+ description: undefined,
44
+ codecWithoutConfig: format,
45
+ numberOfChannels,
46
+ sampleRate,
47
+ timescale: 1000000,
48
+ trackId: 0,
49
+ trakBox: null,
50
+ },
51
+ container: 'wav',
52
+ });
53
+ box.expectNoMoreBytes();
54
+ return Promise.resolve({ skipTo: null });
55
+ };
56
+ exports.parseFmt = parseFmt;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseHeader: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHeader = void 0;
4
+ const parseHeader = ({ state, }) => {
5
+ const fileSize = state.iterator.getUint32Le();
6
+ const fileType = state.iterator.getByteString(4, false);
7
+ if (fileType !== 'WAVE') {
8
+ throw new Error(`Expected WAVE, got ${fileType}`);
9
+ }
10
+ const header = {
11
+ type: 'wav-header',
12
+ fileSize,
13
+ };
14
+ state.structure.getStructure().boxes.push(header);
15
+ return Promise.resolve({ skipTo: null });
16
+ };
17
+ exports.parseHeader = parseHeader;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseId3: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseId3 = void 0;
4
+ // non-standard, we discard it in favor of LIST boxes
5
+ const parseId3 = ({ state, }) => {
6
+ const { iterator } = state;
7
+ const id3Size = iterator.getUint32Le();
8
+ iterator.discard(id3Size);
9
+ const id3Box = {
10
+ type: 'wav-id3',
11
+ };
12
+ state.structure.getStructure().boxes.push(id3Box);
13
+ return Promise.resolve({
14
+ skipTo: null,
15
+ });
16
+ };
17
+ exports.parseId3 = parseId3;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseList: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseList = void 0;
4
+ const parseList = ({ state, }) => {
5
+ const { iterator } = state;
6
+ const ckSize = iterator.getUint32Le(); // chunkSize
7
+ const box = iterator.startBox(ckSize);
8
+ const startOffset = iterator.counter.getOffset();
9
+ const type = iterator.getByteString(4, false);
10
+ if (type !== 'INFO') {
11
+ throw new Error(`Only supporting LIST INFO, but got ${type}`);
12
+ }
13
+ const metadata = [];
14
+ while (iterator.counter.getOffset() < startOffset + ckSize) {
15
+ const key = iterator.getByteString(4, false);
16
+ const size = iterator.getUint32Le();
17
+ const value = iterator.getByteString(size, true);
18
+ metadata.push({
19
+ key,
20
+ trackId: null,
21
+ value,
22
+ });
23
+ }
24
+ const wavList = {
25
+ type: 'wav-list',
26
+ metadata,
27
+ };
28
+ state.structure.getStructure().boxes.push(wavList);
29
+ box.expectNoMoreBytes();
30
+ return Promise.resolve({ skipTo: null });
31
+ };
32
+ exports.parseList = parseList;
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseVideoSection: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseVideoSection = void 0;
4
+ const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
5
+ const parseVideoSection = async ({ state, }) => {
6
+ const { iterator } = state;
7
+ const structure = state.structure.getStructure();
8
+ if (structure.type !== 'wav') {
9
+ throw new Error('Expected wav structure');
10
+ }
11
+ const videoSection = state.videoSection.getVideoSection();
12
+ const maxOffset = videoSection.start + videoSection.size;
13
+ const maxRead = maxOffset - iterator.counter.getOffset();
14
+ const offset = iterator.counter.getOffset();
15
+ const fmtBox = structure.boxes.find((box) => box.type === 'wav-fmt');
16
+ if (!fmtBox) {
17
+ throw new Error('Expected fmt box');
18
+ }
19
+ const secondsToRead = 1;
20
+ const toRead = Math.min(maxRead, fmtBox.sampleRate * fmtBox.blockAlign * secondsToRead);
21
+ const duration = toRead / (fmtBox.sampleRate * fmtBox.blockAlign);
22
+ const timestamp = (offset - videoSection.start) / (fmtBox.sampleRate * fmtBox.blockAlign);
23
+ const data = iterator.getSlice(toRead);
24
+ await state.callbacks.onAudioSample(0, (0, convert_audio_or_video_sample_1.convertAudioOrVideoSampleToWebCodecsTimestamps)({
25
+ cts: timestamp,
26
+ dts: timestamp,
27
+ data,
28
+ duration,
29
+ timestamp,
30
+ trackId: 0,
31
+ type: 'key',
32
+ offset,
33
+ timescale: 1000000,
34
+ }, 1));
35
+ return { skipTo: null };
36
+ };
37
+ exports.parseVideoSection = parseVideoSection;
@@ -0,0 +1,3 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseWav: (state: ParserState) => Promise<ParseResult>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseWav = void 0;
4
+ const log_1 = require("../../log");
5
+ const parse_data_1 = require("./parse-data");
6
+ const parse_fmt_1 = require("./parse-fmt");
7
+ const parse_header_1 = require("./parse-header");
8
+ const parse_id3_1 = require("./parse-id3");
9
+ const parse_list_1 = require("./parse-list");
10
+ const parse_video_section_1 = require("./parse-video-section");
11
+ const parseWav = (state) => {
12
+ const { iterator } = state;
13
+ const insideVideoSection = state.videoSection.isInVideoSectionState(iterator);
14
+ if (insideVideoSection === 'in-section') {
15
+ return (0, parse_video_section_1.parseVideoSection)({ state });
16
+ }
17
+ const type = iterator.getByteString(4, false);
18
+ log_1.Log.trace(state.logLevel, `Processing box type ${type}`);
19
+ if (type === 'RIFF') {
20
+ return (0, parse_header_1.parseHeader)({ state });
21
+ }
22
+ if (type === 'fmt') {
23
+ return (0, parse_fmt_1.parseFmt)({ state });
24
+ }
25
+ if (type === 'data') {
26
+ return (0, parse_data_1.parseData)({ state });
27
+ }
28
+ if (type === 'LIST') {
29
+ return (0, parse_list_1.parseList)({ state });
30
+ }
31
+ if (type === 'id3') {
32
+ return (0, parse_id3_1.parseId3)({ state });
33
+ }
34
+ throw new Error(`Unknown WAV box type ${type}`);
35
+ };
36
+ exports.parseWav = parseWav;
@@ -0,0 +1,30 @@
1
+ import type { MetadataEntry } from '../../metadata/get-metadata';
2
+ export type WavHeader = {
3
+ type: 'wav-header';
4
+ fileSize: number;
5
+ };
6
+ export type WavFmt = {
7
+ type: 'wav-fmt';
8
+ numberOfChannels: number;
9
+ sampleRate: number;
10
+ byteRate: number;
11
+ blockAlign: number;
12
+ bitsPerSample: number;
13
+ };
14
+ export type WavList = {
15
+ type: 'wav-list';
16
+ metadata: MetadataEntry[];
17
+ };
18
+ export type WavId3 = {
19
+ type: 'wav-id3';
20
+ };
21
+ export type WavData = {
22
+ type: 'wav-data';
23
+ dataSize: number;
24
+ };
25
+ type WavBox = WavHeader | WavFmt | WavList | WavId3 | WavData;
26
+ export type WavStructure = {
27
+ type: 'wav';
28
+ boxes: WavBox[];
29
+ };
30
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +1,9 @@
1
- import { type BufferIterator } from '../../buffer-iterator';
2
1
  import type { ParserState } from '../../state/parser-state';
3
2
  import type { PossibleEbml } from './segments/all-segments';
4
3
  export type Prettify<T> = {
5
4
  [K in keyof T]: T[K];
6
5
  } & {};
7
- export declare const parseEbml: (iterator: BufferIterator, state: ParserState) => Promise<Prettify<PossibleEbml>>;
6
+ export declare const parseEbml: (state: ParserState) => Promise<Prettify<PossibleEbml>>;
8
7
  export declare const postprocessEbml: ({ offset, ebml, state, }: {
9
8
  offset: number;
10
9
  ebml: Prettify<PossibleEbml>;
@@ -5,7 +5,8 @@ const register_track_1 = require("../../register-track");
5
5
  const get_sample_from_block_1 = require("./get-sample-from-block");
6
6
  const make_track_1 = require("./make-track");
7
7
  const all_segments_1 = require("./segments/all-segments");
8
- const parseEbml = async (iterator, state) => {
8
+ const parseEbml = async (state) => {
9
+ const { iterator } = state;
9
10
  const hex = iterator.getMatroskaSegmentId();
10
11
  if (hex === null) {
11
12
  throw new Error('Not enough bytes left to parse EBML - this should not happen');
@@ -83,7 +84,7 @@ const parseEbml = async (iterator, state) => {
83
84
  break;
84
85
  }
85
86
  const offset = iterator.counter.getOffset();
86
- const value = await (0, exports.parseEbml)(iterator, state);
87
+ const value = await (0, exports.parseEbml)(state);
87
88
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
88
89
  const remapped = await (0, exports.postprocessEbml)({
89
90
  offset,
@@ -109,6 +110,9 @@ const postprocessEbml = async ({ offset, ebml, state, }) => {
109
110
  if (ebml.type === 'TimestampScale') {
110
111
  state.webm.setTimescale(ebml.value.value);
111
112
  }
113
+ if (ebml.type === 'Tracks') {
114
+ state.callbacks.tracks.setIsDone();
115
+ }
112
116
  if (ebml.type === 'TrackEntry') {
113
117
  state.webm.onTrackEntrySegment(ebml);
114
118
  const track = (0, make_track_1.getTrack)({
@@ -0,0 +1,3 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseWebm: (state: ParserState) => Promise<ParseResult>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseWebm = void 0;
4
+ const segments_1 = require("./segments");
5
+ // Parsing according to https://darkcoding.net/software/reading-mediarecorders-webm-opus-output/
6
+ const parseWebm = async (state) => {
7
+ const structure = state.structure.getStructure();
8
+ if (structure.type !== 'matroska') {
9
+ throw new Error('Invalid structure type');
10
+ }
11
+ const { iterator } = state;
12
+ const isInsideSegment = state.webm.isInsideSegment(iterator);
13
+ const isInsideCluster = state.webm.isInsideCluster(iterator);
14
+ const results = await (0, segments_1.expectSegment)({
15
+ state,
16
+ isInsideSegment,
17
+ });
18
+ if (results === null) {
19
+ return {
20
+ skipTo: null,
21
+ };
22
+ }
23
+ if (isInsideCluster) {
24
+ const segments = structure.boxes.filter((box) => box.type === 'Segment');
25
+ const segment = segments[isInsideCluster.segment];
26
+ if (!segment) {
27
+ throw new Error('Expected segment');
28
+ }
29
+ const clusters = segment.value.find((box) => box.type === 'Cluster');
30
+ if (!clusters) {
31
+ throw new Error('Expected cluster');
32
+ }
33
+ // let's not add it to the cluster
34
+ if (results.type !== 'Block' && results.type !== 'SimpleBlock') {
35
+ clusters.value.push(results);
36
+ }
37
+ }
38
+ else if (isInsideSegment) {
39
+ const segments = structure.boxes.filter((box) => box.type === 'Segment');
40
+ const segment = segments[isInsideSegment.index];
41
+ if (!segment) {
42
+ throw new Error('Expected segment');
43
+ }
44
+ segment.value.push(results);
45
+ }
46
+ else {
47
+ structure.boxes.push(results);
48
+ }
49
+ return {
50
+ skipTo: null,
51
+ };
52
+ };
53
+ exports.parseWebm = parseWebm;
@@ -0,0 +1,9 @@
1
+ import type { ParserState } from '../../state/parser-state';
2
+ import type { SegmentSection } from '../../state/webm';
3
+ import { type PossibleEbml, type TrackEntry } from './segments/all-segments';
4
+ export type MatroskaSegment = PossibleEbml;
5
+ export type OnTrackEntrySegment = (trackEntry: TrackEntry) => void;
6
+ export declare const expectSegment: ({ state, isInsideSegment, }: {
7
+ state: ParserState;
8
+ isInsideSegment: SegmentSection | null;
9
+ }) => Promise<MatroskaSegment | null>;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectSegment = void 0;
4
+ /* eslint-disable @typescript-eslint/no-use-before-define */
5
+ const log_1 = require("../../log");
6
+ const parse_ebml_1 = require("./parse-ebml");
7
+ const all_segments_1 = require("./segments/all-segments");
8
+ const expectSegment = async ({ state, isInsideSegment, }) => {
9
+ var _a;
10
+ const { iterator } = state;
11
+ if (iterator.bytesRemaining() === 0) {
12
+ throw new Error('has no bytes');
13
+ }
14
+ const offset = iterator.counter.getOffset();
15
+ const { returnToCheckpoint } = iterator.startCheckpoint();
16
+ const segmentId = iterator.getMatroskaSegmentId();
17
+ if (segmentId === null) {
18
+ returnToCheckpoint();
19
+ return null;
20
+ }
21
+ const offsetBeforeVInt = iterator.counter.getOffset();
22
+ const size = iterator.getVint();
23
+ const offsetAfterVInt = iterator.counter.getOffset();
24
+ if (size === null) {
25
+ returnToCheckpoint();
26
+ return null;
27
+ }
28
+ const bytesRemainingNow = iterator.bytesRemaining();
29
+ log_1.Log.trace(state.logLevel, 'Segment ID:', (_a = all_segments_1.ebmlMap[segmentId]) === null || _a === void 0 ? void 0 : _a.name, 'Size:' + size, bytesRemainingNow);
30
+ if (segmentId === all_segments_1.matroskaElements.Segment) {
31
+ state.webm.addSegment({
32
+ start: offset,
33
+ size,
34
+ });
35
+ const newSegment = {
36
+ type: 'Segment',
37
+ minVintWidth: offsetAfterVInt - offsetBeforeVInt,
38
+ value: [],
39
+ };
40
+ return newSegment;
41
+ }
42
+ if (segmentId === all_segments_1.matroskaElements.Cluster) {
43
+ if (isInsideSegment === null) {
44
+ throw new Error('Expected to be inside segment');
45
+ }
46
+ state.webm.addCluster({
47
+ start: offset,
48
+ size,
49
+ segment: isInsideSegment.index,
50
+ });
51
+ const newSegment = {
52
+ type: 'Cluster',
53
+ minVintWidth: offsetAfterVInt - offsetBeforeVInt,
54
+ value: [],
55
+ };
56
+ return newSegment;
57
+ }
58
+ if (bytesRemainingNow < size) {
59
+ returnToCheckpoint();
60
+ return null;
61
+ }
62
+ const segment = await parseSegment({
63
+ segmentId,
64
+ length: size,
65
+ state,
66
+ headerReadSoFar: iterator.counter.getOffset() - offset,
67
+ });
68
+ return segment;
69
+ };
70
+ exports.expectSegment = expectSegment;
71
+ const parseSegment = async ({ segmentId, length, state, headerReadSoFar, }) => {
72
+ if (length < 0) {
73
+ throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
74
+ }
75
+ state.iterator.counter.decrement(headerReadSoFar);
76
+ const offset = state.iterator.counter.getOffset();
77
+ const ebml = await (0, parse_ebml_1.parseEbml)(state);
78
+ const remapped = await (0, parse_ebml_1.postprocessEbml)({ offset, ebml, state });
79
+ return remapped;
80
+ };