@remotion/media-parser 4.0.269 → 4.0.271

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 (339) hide show
  1. package/dist/aac-codecprivate.js +6 -13
  2. package/dist/add-avc-profile-to-track.js +5 -9
  3. package/dist/buffer-iterator.js +8 -13
  4. package/dist/combine-uint8-arrays.js +1 -5
  5. package/dist/containers/aac/parse-aac.js +9 -13
  6. package/dist/containers/aac/types.js +1 -2
  7. package/dist/containers/avc/codec-string.js +1 -5
  8. package/dist/containers/avc/color.js +3 -9
  9. package/dist/containers/avc/create-sps-pps-data.js +5 -9
  10. package/dist/containers/avc/interpret-sps.js +7 -13
  11. package/dist/containers/avc/key.js +1 -5
  12. package/dist/containers/avc/parse-avc.js +3 -7
  13. package/dist/containers/avc/sps-and-pps.js +1 -5
  14. package/dist/containers/flac/get-block-size.js +1 -5
  15. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  16. package/dist/containers/flac/get-channel-count.js +1 -5
  17. package/dist/containers/flac/get-duration-from-flac.js +1 -5
  18. package/dist/containers/flac/get-metadata-from-flac.js +1 -5
  19. package/dist/containers/flac/get-sample-rate.js +1 -5
  20. package/dist/containers/flac/parse-flac-frame.js +14 -19
  21. package/dist/containers/flac/parse-flac.js +15 -19
  22. package/dist/containers/flac/parse-header.js +1 -5
  23. package/dist/containers/flac/parse-metadata.js +1 -5
  24. package/dist/containers/flac/parse-streaminfo.js +3 -7
  25. package/dist/containers/flac/parse-unknown-block.js +1 -5
  26. package/dist/containers/flac/types.d.ts +2 -2
  27. package/dist/containers/flac/types.js +1 -2
  28. package/dist/containers/iso-base-media/base-media-box.js +1 -2
  29. package/dist/containers/iso-base-media/base-type.js +1 -2
  30. package/dist/containers/iso-base-media/esds/decoder-specific-config.js +1 -5
  31. package/dist/containers/iso-base-media/esds/esds-descriptors.js +5 -10
  32. package/dist/containers/iso-base-media/esds/esds.js +3 -7
  33. package/dist/containers/iso-base-media/ftyp.js +1 -5
  34. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +4 -8
  35. package/dist/containers/iso-base-media/get-children.js +3 -7
  36. package/dist/containers/iso-base-media/get-keyframes.js +7 -11
  37. package/dist/containers/iso-base-media/get-moov-atom.js +22 -15
  38. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +20 -24
  39. package/dist/containers/iso-base-media/get-video-codec-from-iso-track.d.ts +1 -1
  40. package/dist/containers/iso-base-media/get-video-codec-from-iso-track.js +3 -7
  41. package/dist/containers/iso-base-media/make-track.js +30 -34
  42. package/dist/containers/iso-base-media/mdat/mdat.js +16 -20
  43. package/dist/containers/iso-base-media/mdhd.js +1 -5
  44. package/dist/containers/iso-base-media/meta/hdlr.js +1 -5
  45. package/dist/containers/iso-base-media/meta/ilst.js +1 -5
  46. package/dist/containers/iso-base-media/moov/moov.js +3 -7
  47. package/dist/containers/iso-base-media/mvhd.js +7 -11
  48. package/dist/containers/iso-base-media/parse-boxes.js +5 -9
  49. package/dist/containers/iso-base-media/parse-icc-profile.js +4 -8
  50. package/dist/containers/iso-base-media/process-box.js +63 -67
  51. package/dist/containers/iso-base-media/stsd/av1c.js +1 -5
  52. package/dist/containers/iso-base-media/stsd/avcc.js +1 -5
  53. package/dist/containers/iso-base-media/stsd/colr.js +3 -7
  54. package/dist/containers/iso-base-media/stsd/ctts.js +1 -5
  55. package/dist/containers/iso-base-media/stsd/hvcc.js +3 -7
  56. package/dist/containers/iso-base-media/stsd/keys.js +1 -5
  57. package/dist/containers/iso-base-media/stsd/mebx.js +3 -7
  58. package/dist/containers/iso-base-media/stsd/pasp.js +1 -5
  59. package/dist/containers/iso-base-media/stsd/samples.js +8 -13
  60. package/dist/containers/iso-base-media/stsd/stco.js +1 -5
  61. package/dist/containers/iso-base-media/stsd/stsc.js +1 -5
  62. package/dist/containers/iso-base-media/stsd/stsd.js +3 -7
  63. package/dist/containers/iso-base-media/stsd/stss.js +1 -5
  64. package/dist/containers/iso-base-media/stsd/stsz.js +1 -5
  65. package/dist/containers/iso-base-media/stsd/stts.js +1 -5
  66. package/dist/containers/iso-base-media/tfdt.js +1 -5
  67. package/dist/containers/iso-base-media/tfhd.js +1 -5
  68. package/dist/containers/iso-base-media/tkhd.js +4 -8
  69. package/dist/containers/iso-base-media/to-date.js +1 -5
  70. package/dist/containers/iso-base-media/trak/trak.js +3 -7
  71. package/dist/containers/iso-base-media/traversal.d.ts +3 -2
  72. package/dist/containers/iso-base-media/traversal.js +42 -57
  73. package/dist/containers/iso-base-media/trun.js +2 -6
  74. package/dist/containers/iso-base-media/void-box.js +1 -2
  75. package/dist/containers/m3u/after-manifest-fetch.d.ts +8 -8
  76. package/dist/containers/m3u/after-manifest-fetch.js +33 -51
  77. package/dist/containers/m3u/fetch-m3u8-stream.d.ts +5 -2
  78. package/dist/containers/m3u/fetch-m3u8-stream.js +4 -12
  79. package/dist/containers/m3u/get-chunks.d.ts +1 -0
  80. package/dist/containers/m3u/get-chunks.js +6 -6
  81. package/dist/containers/m3u/get-duration-from-m3u.d.ts +2 -2
  82. package/dist/containers/m3u/get-duration-from-m3u.js +9 -8
  83. package/dist/containers/m3u/get-playlist.d.ts +6 -1
  84. package/dist/containers/m3u/get-playlist.js +19 -16
  85. package/dist/containers/m3u/get-streams.d.ts +14 -7
  86. package/dist/containers/m3u/get-streams.js +15 -18
  87. package/dist/containers/m3u/iterate-over-segment-files.d.ts +19 -0
  88. package/dist/containers/m3u/iterate-over-segment-files.js +106 -0
  89. package/dist/containers/m3u/m3u-child-stream.d.ts +0 -0
  90. package/dist/containers/m3u/m3u-child-stream.js +1 -0
  91. package/dist/containers/m3u/parse-directive.js +37 -10
  92. package/dist/containers/m3u/parse-m3u-manifest.js +3 -7
  93. package/dist/containers/m3u/parse-m3u-media-directive.d.ts +1 -0
  94. package/dist/containers/m3u/parse-m3u-media-directive.js +7 -7
  95. package/dist/containers/m3u/parse-m3u.js +18 -11
  96. package/dist/containers/m3u/parse-m3u8-text.js +3 -7
  97. package/dist/containers/m3u/parse-stream-inf.js +2 -7
  98. package/dist/containers/m3u/return-packets.d.ts +3 -2
  99. package/dist/containers/m3u/return-packets.js +92 -54
  100. package/dist/containers/m3u/run-over-m3u.d.ts +9 -0
  101. package/dist/containers/m3u/run-over-m3u.js +85 -0
  102. package/dist/containers/m3u/sample-sorter.d.ts +13 -0
  103. package/dist/containers/m3u/sample-sorter.js +60 -0
  104. package/dist/containers/m3u/select-stream.d.ts +10 -1
  105. package/dist/containers/m3u/select-stream.js +23 -7
  106. package/dist/containers/m3u/types.d.ts +15 -1
  107. package/dist/containers/m3u/types.js +1 -2
  108. package/dist/containers/mp3/get-duration.js +5 -9
  109. package/dist/containers/mp3/get-frame-length.js +2 -7
  110. package/dist/containers/mp3/get-metadata-from-mp3.d.ts +2 -2
  111. package/dist/containers/mp3/get-metadata-from-mp3.js +1 -5
  112. package/dist/containers/mp3/id3-v1.js +1 -5
  113. package/dist/containers/mp3/id3.js +1 -5
  114. package/dist/containers/mp3/parse-mp3.js +7 -11
  115. package/dist/containers/mp3/parse-mpeg-header.js +10 -14
  116. package/dist/containers/mp3/samples-per-mpeg-file.js +1 -5
  117. package/dist/containers/riff/expect-riff-box.js +11 -15
  118. package/dist/containers/riff/get-duration.js +7 -12
  119. package/dist/containers/riff/get-tracks-from-avi.js +20 -28
  120. package/dist/containers/riff/is-movi.js +1 -5
  121. package/dist/containers/riff/parse-avih.js +1 -5
  122. package/dist/containers/riff/parse-isft.js +1 -5
  123. package/dist/containers/riff/parse-list-box.js +3 -7
  124. package/dist/containers/riff/parse-movi.js +13 -18
  125. package/dist/containers/riff/parse-riff-body.js +9 -13
  126. package/dist/containers/riff/parse-riff-box.js +9 -13
  127. package/dist/containers/riff/parse-riff-header.js +1 -5
  128. package/dist/containers/riff/parse-riff.js +5 -9
  129. package/dist/containers/riff/parse-strf.js +1 -5
  130. package/dist/containers/riff/parse-strh.js +3 -7
  131. package/dist/containers/riff/parse-video-section.js +7 -11
  132. package/dist/containers/riff/riff-box.js +1 -2
  133. package/dist/containers/riff/timescale.js +1 -4
  134. package/dist/containers/riff/traversal.js +7 -15
  135. package/dist/containers/transport-stream/adts-header.js +6 -10
  136. package/dist/containers/transport-stream/boxes.js +1 -2
  137. package/dist/containers/transport-stream/discard-rest-of-packet.js +2 -7
  138. package/dist/containers/transport-stream/find-separator.js +1 -4
  139. package/dist/containers/transport-stream/get-tracks.js +7 -12
  140. package/dist/containers/transport-stream/handle-aac-packet.js +12 -16
  141. package/dist/containers/transport-stream/handle-avc-packet.js +22 -26
  142. package/dist/containers/transport-stream/next-pes-header-store.js +1 -5
  143. package/dist/containers/transport-stream/parse-packet.js +13 -17
  144. package/dist/containers/transport-stream/parse-pat.js +5 -10
  145. package/dist/containers/transport-stream/parse-pes.js +1 -5
  146. package/dist/containers/transport-stream/parse-pmt.js +3 -7
  147. package/dist/containers/transport-stream/parse-stream-packet.js +13 -17
  148. package/dist/containers/transport-stream/parse-transport-stream.js +5 -9
  149. package/dist/containers/transport-stream/process-stream-buffers.js +10 -15
  150. package/dist/containers/transport-stream/traversal.js +4 -10
  151. package/dist/containers/wav/get-duration-from-wav.js +3 -8
  152. package/dist/containers/wav/get-metadata-from-wav.d.ts +2 -2
  153. package/dist/containers/wav/get-metadata-from-wav.js +1 -5
  154. package/dist/containers/wav/parse-data.js +5 -9
  155. package/dist/containers/wav/parse-fmt.js +3 -7
  156. package/dist/containers/wav/parse-header.js +1 -5
  157. package/dist/containers/wav/parse-id3.js +1 -5
  158. package/dist/containers/wav/parse-list.js +10 -6
  159. package/dist/containers/wav/parse-video-section.js +3 -7
  160. package/dist/containers/wav/parse-wav.js +15 -19
  161. package/dist/containers/wav/types.d.ts +2 -2
  162. package/dist/containers/wav/types.js +1 -2
  163. package/dist/containers/webm/allowed-partial-segments.js +1 -4
  164. package/dist/containers/webm/av1-codec-private.js +3 -7
  165. package/dist/containers/webm/color.js +6 -10
  166. package/dist/containers/webm/description.js +6 -10
  167. package/dist/containers/webm/get-ready-tracks.js +13 -18
  168. package/dist/containers/webm/get-sample-from-block.js +12 -16
  169. package/dist/containers/webm/make-track.js +43 -48
  170. package/dist/containers/webm/parse-ebml.js +14 -19
  171. package/dist/containers/webm/parse-webm-header.js +3 -7
  172. package/dist/containers/webm/segments/all-segments.js +168 -173
  173. package/dist/containers/webm/segments/block-simple-block-flags.js +4 -8
  174. package/dist/containers/webm/segments/track-entry.js +1 -5
  175. package/dist/containers/webm/segments.js +9 -13
  176. package/dist/containers/webm/traversal.js +37 -67
  177. package/dist/convert-audio-or-video-sample.js +1 -5
  178. package/dist/download-and-parse-media.js +44 -46
  179. package/dist/emit-available-info.js +38 -38
  180. package/dist/emitter.js +1 -5
  181. package/dist/errors.d.ts +2 -17
  182. package/dist/errors.js +10 -30
  183. package/dist/esm/fetch.mjs +93 -67
  184. package/dist/esm/index.mjs +1189 -355
  185. package/dist/esm/node.mjs +59 -36
  186. package/dist/esm/universal.mjs +323 -0
  187. package/dist/esm/web-file.mjs +55 -43
  188. package/dist/esm/web.mjs +257 -0
  189. package/dist/esm/worker-server-entry.mjs +13056 -0
  190. package/dist/esm/worker-server.mjs +12914 -0
  191. package/dist/esm/worker-web-entry.mjs +12969 -0
  192. package/dist/esm/worker.mjs +439 -0
  193. package/dist/fetch.js +1 -17
  194. package/dist/file-types/bmp.js +3 -7
  195. package/dist/file-types/detect-file-type.js +24 -38
  196. package/dist/file-types/index.js +22 -26
  197. package/dist/file-types/jpeg.js +4 -9
  198. package/dist/file-types/pdf.js +3 -7
  199. package/dist/file-types/png.js +4 -9
  200. package/dist/file-types/webp.js +3 -7
  201. package/dist/forward-controller.js +1 -5
  202. package/dist/get-audio-codec.js +25 -38
  203. package/dist/get-container.d.ts +3 -3
  204. package/dist/get-container.js +5 -10
  205. package/dist/get-dimensions.js +8 -13
  206. package/dist/get-duration.js +27 -34
  207. package/dist/get-fields-from-callbacks.js +1 -5
  208. package/dist/get-fps.js +24 -34
  209. package/dist/get-is-hdr.js +5 -10
  210. package/dist/get-keyframes.js +6 -11
  211. package/dist/get-location.js +4 -9
  212. package/dist/get-number-of-audio-channels.js +2 -7
  213. package/dist/get-sample-aspect-ratio.js +17 -30
  214. package/dist/get-sample-positions-from-lpcm.js +5 -9
  215. package/dist/get-sample-positions.js +1 -5
  216. package/dist/get-sample-rate.js +2 -7
  217. package/dist/get-tracks.d.ts +5 -0
  218. package/dist/get-tracks.js +37 -44
  219. package/dist/get-video-codec.js +26 -34
  220. package/dist/has-all-info.js +33 -38
  221. package/dist/index.d.ts +44 -36
  222. package/dist/index.js +34 -47
  223. package/dist/init-video.d.ts +1 -1
  224. package/dist/init-video.js +47 -20
  225. package/dist/internal-parse-media.js +39 -41
  226. package/dist/is-audio-structure.d.ts +2 -2
  227. package/dist/is-audio-structure.js +1 -5
  228. package/dist/log.js +8 -12
  229. package/dist/make-hvc1-codec-strings.js +1 -5
  230. package/dist/media-parser-controller.js +7 -11
  231. package/dist/metadata/get-metadata.d.ts +4 -4
  232. package/dist/metadata/get-metadata.js +17 -22
  233. package/dist/metadata/metadata-from-iso.d.ts +3 -3
  234. package/dist/metadata/metadata-from-iso.js +12 -17
  235. package/dist/metadata/metadata-from-matroska.d.ts +2 -2
  236. package/dist/metadata/metadata-from-matroska.js +3 -7
  237. package/dist/metadata/metadata-from-riff.d.ts +2 -2
  238. package/dist/metadata/metadata-from-riff.js +3 -7
  239. package/dist/node-writer.js +1 -17
  240. package/dist/node.js +1 -17
  241. package/dist/options.d.ts +32 -25
  242. package/dist/options.js +1 -2
  243. package/dist/parse-media-on-browser-worker.d.ts +2 -0
  244. package/dist/parse-media-on-browser-worker.js +4 -0
  245. package/dist/parse-media-on-server-worker.d.ts +2 -0
  246. package/dist/parse-media-on-server-worker.js +4 -0
  247. package/dist/parse-media-on-web-worker.d.ts +2 -0
  248. package/dist/parse-media-on-web-worker.js +4 -0
  249. package/dist/parse-media-on-worker-entry.d.ts +2 -0
  250. package/dist/parse-media-on-worker-entry.js +269 -0
  251. package/dist/parse-media-on-worker.d.ts +2 -0
  252. package/dist/parse-media-on-worker.js +4 -0
  253. package/dist/parse-media.js +10 -12
  254. package/dist/parse-result.d.ts +3 -3
  255. package/dist/parse-result.js +1 -2
  256. package/dist/pause-signal.js +1 -5
  257. package/dist/perform-seek.js +6 -10
  258. package/dist/readers/fetch/get-body-and-reader.js +1 -5
  259. package/dist/readers/fetch/resolve-url.d.ts +1 -1
  260. package/dist/readers/fetch/resolve-url.js +1 -5
  261. package/dist/readers/from-fetch.d.ts +4 -1
  262. package/dist/readers/from-fetch.js +109 -94
  263. package/dist/readers/from-node.d.ts +4 -1
  264. package/dist/readers/from-node.js +58 -41
  265. package/dist/readers/from-web-file.d.ts +4 -1
  266. package/dist/readers/from-web-file.js +55 -49
  267. package/dist/readers/reader.d.ts +5 -1
  268. package/dist/readers/reader.js +1 -2
  269. package/dist/readers/universal.d.ts +2 -0
  270. package/dist/readers/universal.js +35 -0
  271. package/dist/readers/web.d.ts +2 -0
  272. package/dist/readers/web.js +22 -0
  273. package/dist/register-track.js +9 -15
  274. package/dist/remotion-license-acknowledge.js +4 -8
  275. package/dist/run-parse-iteration.js +26 -25
  276. package/dist/samples-from-moof.js +8 -12
  277. package/dist/skip.js +1 -5
  278. package/dist/state/aac-state.js +1 -5
  279. package/dist/state/can-skip-tracks.d.ts +2 -2
  280. package/dist/state/can-skip-tracks.js +3 -8
  281. package/dist/state/emitted-fields.js +1 -5
  282. package/dist/state/flac-state.js +1 -5
  283. package/dist/state/has-tracks-section.js +3 -7
  284. package/dist/state/images.js +1 -5
  285. package/dist/state/iso-base-media/cached-sample-positions.js +8 -13
  286. package/dist/state/iso-base-media/iso-state.js +5 -9
  287. package/dist/state/iso-base-media/moov-box.js +1 -5
  288. package/dist/state/keyframes.js +1 -5
  289. package/dist/state/last-eventloop-break.js +3 -7
  290. package/dist/state/m3u-state.d.ts +37 -16
  291. package/dist/state/m3u-state.js +98 -29
  292. package/dist/state/may-skip-video-data.js +3 -7
  293. package/dist/state/mp3.js +1 -5
  294. package/dist/state/need-samples-for-fields.js +1 -5
  295. package/dist/state/parser-state.d.ts +39 -33
  296. package/dist/state/parser-state.js +37 -41
  297. package/dist/state/riff.js +1 -5
  298. package/dist/state/sample-callbacks.js +8 -12
  299. package/dist/state/slow-duration-fps.js +1 -5
  300. package/dist/state/structure.d.ts +4 -4
  301. package/dist/state/structure.js +1 -5
  302. package/dist/state/transport-stream.js +3 -7
  303. package/dist/state/video-section.js +1 -5
  304. package/dist/state/webm.js +5 -9
  305. package/dist/throttled-progress.js +21 -14
  306. package/dist/truthy.js +1 -4
  307. package/dist/universal.d.ts +1 -0
  308. package/dist/universal.js +1 -0
  309. package/dist/version.d.ts +1 -1
  310. package/dist/version.js +1 -4
  311. package/dist/web-file.js +1 -17
  312. package/dist/web.d.ts +1 -0
  313. package/dist/web.js +1 -0
  314. package/dist/webcodec-sample-types.d.ts +6 -4
  315. package/dist/webcodec-sample-types.js +1 -2
  316. package/dist/worker/forward-controller.d.ts +3 -0
  317. package/dist/worker/forward-controller.js +20 -0
  318. package/dist/worker/serialize-error.d.ts +4 -0
  319. package/dist/worker/serialize-error.js +95 -0
  320. package/dist/worker/worker-types.d.ts +243 -0
  321. package/dist/worker/worker-types.js +1 -0
  322. package/dist/worker-bun-entry.d.ts +1 -0
  323. package/dist/worker-bun-entry.js +5 -0
  324. package/dist/worker-entry.d.ts +1 -0
  325. package/dist/worker-entry.js +5 -0
  326. package/dist/worker-server-entry.d.ts +1 -0
  327. package/dist/worker-server-entry.js +5 -0
  328. package/dist/worker-server.d.ts +2 -0
  329. package/dist/worker-server.js +381 -0
  330. package/dist/worker-web-entry.d.ts +1 -0
  331. package/dist/worker-web-entry.js +5 -0
  332. package/dist/worker.d.ts +2 -0
  333. package/dist/worker.js +267 -0
  334. package/dist/writers/node.js +16 -23
  335. package/dist/writers/writer.js +1 -2
  336. package/package.json +40 -21
  337. package/fetch.js +0 -2
  338. package/test.json +0 -663
  339. package/web-file.js +0 -2
package/dist/options.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import type { M3uStream } from './containers/m3u/get-streams';
2
- import type { SelectM3uStreamFn } from './containers/m3u/select-stream';
2
+ import type { SelectM3uAssociatedPlaylistsFn, SelectM3uStreamFn } from './containers/m3u/select-stream';
3
3
  import type { Dimensions } from './get-dimensions';
4
4
  import type { MediaParserLocation } from './get-location';
5
5
  import type { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, VideoTrack } from './get-tracks';
6
6
  import type { LogLevel } from './log';
7
7
  import type { MediaParserController } from './media-parser-controller';
8
- import type { MetadataEntry } from './metadata/get-metadata';
9
- import type { Structure } from './parse-result';
8
+ import type { MediaParserMetadataEntry } from './metadata/get-metadata';
9
+ import type { IsoBaseMediaStructure, MediaParserStructureUnstable } from './parse-result';
10
10
  import type { ReaderInterface } from './readers/reader';
11
11
  import type { MediaParserEmbeddedImage } from './state/images';
12
12
  import type { InternalStats } from './state/parser-state';
@@ -104,7 +104,7 @@ export type AllOptions<Fields extends ParseMediaFields> = {
104
104
  m3uStreams: Fields['m3uStreams'];
105
105
  };
106
106
  export type Options<Fields extends ParseMediaFields> = Partial<AllOptions<Fields>>;
107
- export type TracksField = {
107
+ export type MediaParserTracks = {
108
108
  videoTracks: VideoTrack[];
109
109
  audioTracks: AudioTrack[];
110
110
  };
@@ -116,16 +116,16 @@ export type MediaParserKeyframe = {
116
116
  decodingTimeInSeconds: number;
117
117
  trackId: number;
118
118
  };
119
- export type MandatoryParseMediaCallbacks = {
119
+ export type ParseMediaCallbacksMandatory = {
120
120
  onDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
121
121
  onDurationInSeconds: null | ((durationInSeconds: number | null) => unknown | Promise<unknown>);
122
122
  onSlowDurationInSeconds: null | ((durationInSeconds: number) => unknown | Promise<unknown>);
123
123
  onSlowFps: null | ((fps: number) => unknown | Promise<unknown>);
124
- onStructure: null | ((structure: Structure) => unknown | Promise<unknown>);
124
+ onStructure: null | ((structure: MediaParserStructureUnstable) => unknown | Promise<unknown>);
125
125
  onFps: null | ((fps: number | null) => unknown | Promise<unknown>);
126
126
  onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => unknown | Promise<unknown>);
127
127
  onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => unknown | Promise<unknown>);
128
- onTracks: null | ((tracks: TracksField) => unknown | Promise<unknown>);
128
+ onTracks: null | ((tracks: MediaParserTracks) => unknown | Promise<unknown>);
129
129
  onRotation: null | ((rotation: number | null) => unknown | Promise<unknown>);
130
130
  onUnrotatedDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
131
131
  onInternalStats: null | ((internalStats: InternalStats) => unknown | Promise<unknown>);
@@ -133,7 +133,7 @@ export type MandatoryParseMediaCallbacks = {
133
133
  onName: null | ((name: string) => unknown | Promise<unknown>);
134
134
  onContainer: null | ((container: MediaParserContainer) => unknown | Promise<unknown>);
135
135
  onIsHdr: null | ((isHdr: boolean) => unknown | Promise<unknown>);
136
- onMetadata: null | ((metadata: MetadataEntry[]) => unknown | Promise<unknown>);
136
+ onMetadata: null | ((metadata: MediaParserMetadataEntry[]) => unknown | Promise<unknown>);
137
137
  onLocation: null | ((location: MediaParserLocation | null) => unknown | Promise<unknown>);
138
138
  onMimeType: null | ((mimeType: string | null) => unknown | Promise<unknown>);
139
139
  onKeyframes: null | ((keyframes: MediaParserKeyframe[] | null) => unknown | Promise<unknown>);
@@ -146,24 +146,24 @@ export type MandatoryParseMediaCallbacks = {
146
146
  onSlowAudioBitrate: null | ((audioBitrate: number | null) => unknown | Promise<unknown>);
147
147
  onM3uStreams: null | ((streams: M3uStream[] | null) => unknown | Promise<unknown>);
148
148
  };
149
- export type ParseMediaCallbacks = Partial<MandatoryParseMediaCallbacks>;
149
+ export type ParseMediaCallbacks = Partial<ParseMediaCallbacksMandatory>;
150
150
  export interface ParseMediaData {
151
151
  dimensions: Dimensions | null;
152
152
  durationInSeconds: number | null;
153
153
  slowDurationInSeconds: number;
154
154
  slowFps: number;
155
- structure: Structure;
155
+ structure: MediaParserStructureUnstable;
156
156
  fps: number | null;
157
157
  videoCodec: MediaParserVideoCodec | null;
158
158
  audioCodec: MediaParserAudioCodec | null;
159
- tracks: TracksField;
159
+ tracks: MediaParserTracks;
160
160
  rotation: number | null;
161
161
  unrotatedDimensions: Dimensions | null;
162
162
  isHdr: boolean;
163
163
  internalStats: InternalStats;
164
164
  size: number | null;
165
165
  name: string;
166
- metadata: MetadataEntry[];
166
+ metadata: MediaParserMetadataEntry[];
167
167
  location: MediaParserLocation | null;
168
168
  container: MediaParserContainer;
169
169
  mimeType: string | null;
@@ -186,22 +186,28 @@ export type ParseMediaProgress = {
186
186
  totalBytes: number | null;
187
187
  };
188
188
  export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
189
- type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
189
+ type ReaderParams = {
190
190
  reader: ReaderInterface;
191
- controller: MediaParserController | undefined;
191
+ };
192
+ export type SerializeableOptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
192
193
  logLevel: LogLevel;
193
- onParseProgress: ParseMediaOnProgress | null;
194
194
  progressIntervalInMs: number | null;
195
195
  fields: F | null;
196
196
  acknowledgeRemotionLicense: boolean;
197
+ mp4HeaderSegment: IsoBaseMediaStructure | null;
198
+ };
199
+ type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = SerializeableOptionalParseMediaParams<F> & {
200
+ controller: MediaParserController | undefined;
201
+ onParseProgress: ParseMediaOnProgress | null;
197
202
  selectM3uStream: SelectM3uStreamFn;
198
- } & MandatoryParseMediaCallbacks;
203
+ selectM3uAssociatedPlaylists: SelectM3uAssociatedPlaylistsFn;
204
+ };
199
205
  type ParseMediaSampleCallbacks = {
200
206
  onAudioTrack: OnAudioTrack | null;
201
207
  onVideoTrack: OnVideoTrack | null;
202
208
  };
203
209
  export type ParseMediaMode = 'query' | 'download';
204
- export type ParseMediaSrc = string | Blob;
210
+ export type ParseMediaSrc = string | Blob | URL;
205
211
  export type OnDiscardedData = (data: Uint8Array) => Promise<void>;
206
212
  export type ContinueAfterError = {
207
213
  action: 'fail';
@@ -209,24 +215,25 @@ export type ContinueAfterError = {
209
215
  action: 'download';
210
216
  };
211
217
  export type ParseMediaOnError = (error: Error) => ContinueAfterError | Promise<ContinueAfterError>;
212
- export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = {
213
- src: ParseMediaSrc;
214
- } & OptionalParseMediaParams<F> & ParseMediaSampleCallbacks & {
218
+ type InternalOptions = {
215
219
  onDiscardedData: OnDiscardedData | null;
216
220
  mode: ParseMediaMode;
217
221
  onError: ParseMediaOnError;
218
222
  apiName: string;
219
223
  };
220
- export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
224
+ export type ParseMediaMandatoryOptions = {
221
225
  src: ParseMediaSrc;
222
- } & Partial<OptionalParseMediaParams<F>> & Partial<ParseMediaSampleCallbacks>;
223
- export type DownloadAndParseMediaOptions<F extends Options<ParseMediaFields>> = {
224
- src: ParseMediaSrc;
225
- } & Partial<OptionalParseMediaParams<F>> & {
226
+ };
227
+ type DownloadOptions = {
226
228
  writer: WriterInterface;
227
229
  onError?: ParseMediaOnError;
228
230
  };
231
+ export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & OptionalParseMediaParams<F> & ReaderParams & ParseMediaCallbacks & ParseMediaSampleCallbacks & InternalOptions;
232
+ export type ParseMediaOnWorkerOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & Partial<OptionalParseMediaParams<F>> & Partial<ParseMediaCallbacks> & Partial<ParseMediaSampleCallbacks>;
233
+ export type ParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaOnWorkerOptions<F> & Partial<ReaderParams>;
234
+ export type DownloadAndParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & DownloadOptions & Partial<OptionalParseMediaParams<F>> & Partial<ReaderParams> & Partial<ParseMediaCallbacks> & Partial<ParseMediaSampleCallbacks>;
229
235
  export type InternalParseMedia = <F extends Options<ParseMediaFields>>(options: InternalParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
230
236
  export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
237
+ export type ParseMediaOnWorker = <F extends Options<ParseMediaFields>>(options: ParseMediaOnWorkerOptions<F>) => Promise<ParseMediaResult<F>>;
231
238
  export type DownloadAndParseMedia = <F extends Options<ParseMediaFields>>(options: DownloadAndParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
232
239
  export {};
package/dist/options.js CHANGED
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { ParseMediaOnWorker } from './options';
2
+ export declare const parseMediaOnWebWorker: ParseMediaOnWorker;
@@ -0,0 +1,4 @@
1
+ import { parseMediaOnWorkerImplementation } from './parse-media-on-worker-entry';
2
+ export const parseMediaOnWebWorker = (params) => {
3
+ return parseMediaOnWorkerImplementation(params, new URL('./worker-web-entry', import.meta.url), 'parseMediaOnWebWorker');
4
+ };
@@ -0,0 +1,2 @@
1
+ import type { ParseMedia } from './options';
2
+ export declare const parseMediaOnServerWorker: ParseMedia;
@@ -0,0 +1,4 @@
1
+ import { parseMediaOnWorkerImplementation } from './parse-media-on-worker-entry';
2
+ export const parseMediaOnServerWorker = (params) => {
3
+ return parseMediaOnWorkerImplementation(params, new URL('./worker-server-entry', import.meta.url), 'parseMediaOnServerWorker');
4
+ };
@@ -0,0 +1,2 @@
1
+ import type { ParseMediaOnWorker } from './options';
2
+ export declare const parseMediaOnWebWorker: ParseMediaOnWorker;
@@ -0,0 +1,4 @@
1
+ import { parseMediaOnWorkerImplementation } from './parse-media-on-worker-entry';
2
+ export const parseMediaOnWebWorker = (params) => {
3
+ return parseMediaOnWorkerImplementation(params, new URL('./worker-web-entry', import.meta.url), 'parseMediaOnWebWorker');
4
+ };
@@ -0,0 +1,2 @@
1
+ import type { Options, ParseMediaFields, ParseMediaOptions, ParseMediaResult } from './options';
2
+ export declare const parseMediaOnWorkerImplementation: <F extends Options<ParseMediaFields>>({ controller, reader, ...params }: ParseMediaOptions<F>, workerUrlEntry: URL, apiName: string) => Promise<ParseMediaResult<F>>;
@@ -0,0 +1,269 @@
1
+ import { deserializeError } from './worker/serialize-error';
2
+ const convertToWorkerPayload = (
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ payload) => {
5
+ const { onAudioCodec, onContainer, onDimensions, onUnrotatedDimensions, onVideoCodec, onFps, onAudioTrack, onDurationInSeconds, onImages, onInternalStats, onIsHdr, onKeyframes, onLocation, onM3uStreams, onMetadata, onMimeType, onName, onNumberOfAudioChannels, onParseProgress, onRotation, onSampleRate, onSlowAudioBitrate, onSize, onSlowDurationInSeconds, onSlowFps, onSlowKeyframes, onSlowNumberOfFrames, onSlowVideoBitrate, onStructure, onTracks, onVideoTrack, selectM3uStream, selectM3uAssociatedPlaylists, src, ...others } = payload;
6
+ return {
7
+ type: 'request-worker',
8
+ payload: others,
9
+ postAudioCodec: Boolean(onAudioCodec),
10
+ postContainer: Boolean(onContainer),
11
+ postDimensions: Boolean(onDimensions),
12
+ postDurationInSeconds: Boolean(onDurationInSeconds),
13
+ postFps: Boolean(onFps),
14
+ postImages: Boolean(onImages),
15
+ postInternalStats: Boolean(onInternalStats),
16
+ postIsHdr: Boolean(onIsHdr),
17
+ postKeyframes: Boolean(onKeyframes),
18
+ postLocation: Boolean(onLocation),
19
+ postM3uStreams: Boolean(onM3uStreams),
20
+ postMetadata: Boolean(onMetadata),
21
+ postMimeType: Boolean(onMimeType),
22
+ postName: Boolean(onName),
23
+ postNumberOfAudioChannels: Boolean(onNumberOfAudioChannels),
24
+ postRotation: Boolean(onRotation),
25
+ postSampleRate: Boolean(onSampleRate),
26
+ postSlowAudioBitrate: Boolean(onSlowAudioBitrate),
27
+ postSlowDurationInSeconds: Boolean(onSlowDurationInSeconds),
28
+ postSlowFps: Boolean(onSlowFps),
29
+ postSlowKeyframes: Boolean(onSlowKeyframes),
30
+ postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
31
+ postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
32
+ postStructure: Boolean(onStructure),
33
+ postTracks: Boolean(onTracks),
34
+ postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
35
+ postVideoCodec: Boolean(onVideoCodec),
36
+ postSize: Boolean(onSize),
37
+ postParseProgress: Boolean(onParseProgress),
38
+ postM3uStreamSelection: Boolean(selectM3uStream),
39
+ postM3uAssociatedPlaylistsSelection: Boolean(selectM3uAssociatedPlaylists),
40
+ postOnAudioTrack: Boolean(onAudioTrack),
41
+ postOnVideoTrack: Boolean(onVideoTrack),
42
+ src,
43
+ };
44
+ };
45
+ const post = (worker, payload) => {
46
+ worker.postMessage(payload);
47
+ };
48
+ export const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, workerUrlEntry, apiName) => {
49
+ if (typeof Worker === 'undefined') {
50
+ throw new Error('"Worker" is not available. Cannot call workerClient()');
51
+ }
52
+ if (reader) {
53
+ throw new Error(`\`reader\` should not be provided to \`${apiName}\`. If you want to use it in the browser, use parseMediaOnWorker(). If you also want to read files from the file system, use parseMediaOnServerWorker().`);
54
+ }
55
+ const worker = new Worker(workerUrlEntry);
56
+ post(worker, convertToWorkerPayload(params));
57
+ const { promise, resolve, reject } = Promise.withResolvers();
58
+ const onAbort = () => {
59
+ post(worker, { type: 'request-abort' });
60
+ };
61
+ const onResume = () => {
62
+ post(worker, { type: 'request-resume' });
63
+ };
64
+ const onPause = () => {
65
+ post(worker, { type: 'request-pause' });
66
+ };
67
+ const callbacks = {};
68
+ function onMessage(message) {
69
+ const data = message.data;
70
+ if (data.type === 'response-done') {
71
+ resolve(data.payload);
72
+ }
73
+ if (data.type === 'response-error') {
74
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
75
+ cleanup();
76
+ reject(deserializeError(data));
77
+ }
78
+ if (data.type === 'response-on-callback-request') {
79
+ Promise.resolve()
80
+ .then(async () => {
81
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
82
+ if (data.payload.callbackType === 'audio-codec') {
83
+ await ((_a = params.onAudioCodec) === null || _a === void 0 ? void 0 : _a.call(params, data.payload.value));
84
+ return { payloadType: 'void' };
85
+ }
86
+ if (data.payload.callbackType === 'container') {
87
+ await ((_b = params.onContainer) === null || _b === void 0 ? void 0 : _b.call(params, data.payload.value));
88
+ return { payloadType: 'void' };
89
+ }
90
+ if (data.payload.callbackType === 'dimensions') {
91
+ await ((_c = params.onDimensions) === null || _c === void 0 ? void 0 : _c.call(params, data.payload.value));
92
+ return { payloadType: 'void' };
93
+ }
94
+ if (data.payload.callbackType === 'unrotated-dimensions') {
95
+ await ((_d = params.onUnrotatedDimensions) === null || _d === void 0 ? void 0 : _d.call(params, data.payload.value));
96
+ return { payloadType: 'void' };
97
+ }
98
+ if (data.payload.callbackType === 'video-codec') {
99
+ await ((_e = params.onVideoCodec) === null || _e === void 0 ? void 0 : _e.call(params, data.payload.value));
100
+ return { payloadType: 'void' };
101
+ }
102
+ if (data.payload.callbackType === 'tracks') {
103
+ await ((_f = params.onTracks) === null || _f === void 0 ? void 0 : _f.call(params, data.payload.value));
104
+ return { payloadType: 'void' };
105
+ }
106
+ if (data.payload.callbackType === 'rotation') {
107
+ await ((_g = params.onRotation) === null || _g === void 0 ? void 0 : _g.call(params, data.payload.value));
108
+ return { payloadType: 'void' };
109
+ }
110
+ if (data.payload.callbackType === 'sample-rate') {
111
+ await ((_h = params.onSampleRate) === null || _h === void 0 ? void 0 : _h.call(params, data.payload.value));
112
+ return { payloadType: 'void' };
113
+ }
114
+ if (data.payload.callbackType === 'slow-audio-bitrate') {
115
+ await ((_j = params.onSlowAudioBitrate) === null || _j === void 0 ? void 0 : _j.call(params, data.payload.value));
116
+ return { payloadType: 'void' };
117
+ }
118
+ if (data.payload.callbackType === 'slow-duration-in-seconds') {
119
+ await ((_k = params.onSlowDurationInSeconds) === null || _k === void 0 ? void 0 : _k.call(params, data.payload.value));
120
+ return { payloadType: 'void' };
121
+ }
122
+ if (data.payload.callbackType === 'slow-fps') {
123
+ await ((_l = params.onSlowFps) === null || _l === void 0 ? void 0 : _l.call(params, data.payload.value));
124
+ return { payloadType: 'void' };
125
+ }
126
+ if (data.payload.callbackType === 'slow-keyframes') {
127
+ await ((_m = params.onSlowKeyframes) === null || _m === void 0 ? void 0 : _m.call(params, data.payload.value));
128
+ return { payloadType: 'void' };
129
+ }
130
+ if (data.payload.callbackType === 'slow-number-of-frames') {
131
+ await ((_o = params.onSlowNumberOfFrames) === null || _o === void 0 ? void 0 : _o.call(params, data.payload.value));
132
+ return { payloadType: 'void' };
133
+ }
134
+ if (data.payload.callbackType === 'slow-video-bitrate') {
135
+ await ((_p = params.onSlowVideoBitrate) === null || _p === void 0 ? void 0 : _p.call(params, data.payload.value));
136
+ return { payloadType: 'void' };
137
+ }
138
+ if (data.payload.callbackType === 'structure') {
139
+ await ((_q = params.onStructure) === null || _q === void 0 ? void 0 : _q.call(params, data.payload.value));
140
+ return { payloadType: 'void' };
141
+ }
142
+ if (data.payload.callbackType === 'fps') {
143
+ await ((_r = params.onFps) === null || _r === void 0 ? void 0 : _r.call(params, data.payload.value));
144
+ return { payloadType: 'void' };
145
+ }
146
+ if (data.payload.callbackType === 'images') {
147
+ await ((_s = params.onImages) === null || _s === void 0 ? void 0 : _s.call(params, data.payload.value));
148
+ return { payloadType: 'void' };
149
+ }
150
+ if (data.payload.callbackType === 'internal-stats') {
151
+ await ((_t = params.onInternalStats) === null || _t === void 0 ? void 0 : _t.call(params, data.payload.value));
152
+ return { payloadType: 'void' };
153
+ }
154
+ if (data.payload.callbackType === 'is-hdr') {
155
+ await ((_u = params.onIsHdr) === null || _u === void 0 ? void 0 : _u.call(params, data.payload.value));
156
+ return { payloadType: 'void' };
157
+ }
158
+ if (data.payload.callbackType === 'keyframes') {
159
+ await ((_v = params.onKeyframes) === null || _v === void 0 ? void 0 : _v.call(params, data.payload.value));
160
+ return { payloadType: 'void' };
161
+ }
162
+ if (data.payload.callbackType === 'location') {
163
+ await ((_w = params.onLocation) === null || _w === void 0 ? void 0 : _w.call(params, data.payload.value));
164
+ return { payloadType: 'void' };
165
+ }
166
+ if (data.payload.callbackType === 'm3u-streams') {
167
+ await ((_x = params.onM3uStreams) === null || _x === void 0 ? void 0 : _x.call(params, data.payload.value));
168
+ return { payloadType: 'void' };
169
+ }
170
+ if (data.payload.callbackType === 'metadata') {
171
+ await ((_y = params.onMetadata) === null || _y === void 0 ? void 0 : _y.call(params, data.payload.value));
172
+ return { payloadType: 'void' };
173
+ }
174
+ if (data.payload.callbackType === 'mime-type') {
175
+ await ((_z = params.onMimeType) === null || _z === void 0 ? void 0 : _z.call(params, data.payload.value));
176
+ return { payloadType: 'void' };
177
+ }
178
+ if (data.payload.callbackType === 'name') {
179
+ await ((_0 = params.onName) === null || _0 === void 0 ? void 0 : _0.call(params, data.payload.value));
180
+ return { payloadType: 'void' };
181
+ }
182
+ if (data.payload.callbackType === 'number-of-audio-channels') {
183
+ await ((_1 = params.onNumberOfAudioChannels) === null || _1 === void 0 ? void 0 : _1.call(params, data.payload.value));
184
+ return { payloadType: 'void' };
185
+ }
186
+ if (data.payload.callbackType === 'size') {
187
+ await ((_2 = params.onSize) === null || _2 === void 0 ? void 0 : _2.call(params, data.payload.value));
188
+ return { payloadType: 'void' };
189
+ }
190
+ if (data.payload.callbackType === 'duration-in-seconds') {
191
+ await ((_3 = params.onDurationInSeconds) === null || _3 === void 0 ? void 0 : _3.call(params, data.payload.value));
192
+ return { payloadType: 'void' };
193
+ }
194
+ if (data.payload.callbackType === 'parse-progress') {
195
+ await ((_4 = params.onParseProgress) === null || _4 === void 0 ? void 0 : _4.call(params, data.payload.value));
196
+ return { payloadType: 'void' };
197
+ }
198
+ if (data.payload.callbackType === 'm3u-stream-selection') {
199
+ const selection = await params.selectM3uStream(data.payload.value);
200
+ return { payloadType: 'm3u-stream-selection', value: selection };
201
+ }
202
+ if (data.payload.callbackType === 'm3u-associated-playlists-selection') {
203
+ const selection = await params.selectM3uAssociatedPlaylists(data.payload.value);
204
+ return {
205
+ payloadType: 'm3u-associated-playlists-selection',
206
+ value: selection,
207
+ };
208
+ }
209
+ if (data.payload.callbackType === 'on-audio-track') {
210
+ const possibleCallback = await ((_5 = params.onAudioTrack) === null || _5 === void 0 ? void 0 : _5.call(params, data.payload.value));
211
+ if (possibleCallback) {
212
+ callbacks[data.payload.value.track.trackId] = possibleCallback;
213
+ }
214
+ return {
215
+ payloadType: 'on-audio-track-response',
216
+ registeredCallback: Boolean(possibleCallback),
217
+ };
218
+ }
219
+ if (data.payload.callbackType === 'on-video-track') {
220
+ const possibleCallback = await ((_6 = params.onVideoTrack) === null || _6 === void 0 ? void 0 : _6.call(params, data.payload.value));
221
+ if (possibleCallback) {
222
+ callbacks[data.payload.value.track.trackId] = possibleCallback;
223
+ }
224
+ return {
225
+ payloadType: 'on-video-track-response',
226
+ registeredCallback: Boolean(possibleCallback),
227
+ };
228
+ }
229
+ if (data.payload.callbackType === 'on-audio-video-sample') {
230
+ const callback = callbacks[data.payload.trackId];
231
+ if (!callback) {
232
+ throw new Error(`No callback registered for track ${data.payload.trackId}`);
233
+ }
234
+ await callback(data.payload.value);
235
+ return { payloadType: 'void' };
236
+ }
237
+ throw new Error(`Unknown callback type: ${data.payload}`);
238
+ })
239
+ .then((payload) => {
240
+ post(worker, {
241
+ type: 'acknowledge-callback',
242
+ nonce: data.nonce,
243
+ ...payload,
244
+ });
245
+ })
246
+ .catch((err) => {
247
+ reject(err);
248
+ post(worker, {
249
+ type: 'signal-error-in-callback',
250
+ nonce: data.nonce,
251
+ });
252
+ });
253
+ }
254
+ }
255
+ worker.addEventListener('message', onMessage);
256
+ controller === null || controller === void 0 ? void 0 : controller.addEventListener('abort', onAbort);
257
+ controller === null || controller === void 0 ? void 0 : controller.addEventListener('resume', onResume);
258
+ controller === null || controller === void 0 ? void 0 : controller.addEventListener('pause', onPause);
259
+ function cleanup() {
260
+ worker.removeEventListener('message', onMessage);
261
+ controller === null || controller === void 0 ? void 0 : controller.removeEventListener('abort', onAbort);
262
+ controller === null || controller === void 0 ? void 0 : controller.removeEventListener('resume', onResume);
263
+ controller === null || controller === void 0 ? void 0 : controller.removeEventListener('pause', onPause);
264
+ worker.terminate();
265
+ }
266
+ const val = await promise;
267
+ cleanup();
268
+ return val;
269
+ };
@@ -0,0 +1,2 @@
1
+ import type { ParseMediaOnWorker } from './options';
2
+ export declare const parseMediaOnBrowserWorker: ParseMediaOnWorker;
@@ -0,0 +1,4 @@
1
+ import { parseMediaOnWorkerImplementation } from './parse-media-on-worker-entry';
2
+ export const parseMediaOnBrowserWorker = (params) => {
3
+ return parseMediaOnWorkerImplementation(params, new URL('./worker-web-entry', import.meta.url), 'parseMediaOnBrowserWorker');
4
+ };
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseMedia = void 0;
4
- const select_stream_1 = require("./containers/m3u/select-stream");
5
- const internal_parse_media_1 = require("./internal-parse-media");
6
- const from_fetch_1 = require("./readers/from-fetch");
7
- const parseMedia = (options) => {
8
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
9
- return (0, internal_parse_media_1.internalParseMedia)({
1
+ import { defaultSelectM3uAssociatedPlaylists, defaultSelectM3uStreamFn, } from './containers/m3u/select-stream';
2
+ import { internalParseMedia } from './internal-parse-media';
3
+ import { webReader } from './web';
4
+ export const parseMedia = (options) => {
5
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14;
6
+ return internalParseMedia({
10
7
  fields: (_a = options.fields) !== null && _a !== void 0 ? _a : null,
11
8
  logLevel: (_b = options.logLevel) !== null && _b !== void 0 ? _b : 'info',
12
9
  onAudioCodec: (_c = options.onAudioCodec) !== null && _c !== void 0 ? _c : null,
@@ -41,9 +38,11 @@ const parseMedia = (options) => {
41
38
  onVideoCodec: (_7 = options.onVideoCodec) !== null && _7 !== void 0 ? _7 : null,
42
39
  onVideoTrack: (_8 = options.onVideoTrack) !== null && _8 !== void 0 ? _8 : null,
43
40
  progressIntervalInMs: (_9 = options.progressIntervalInMs) !== null && _9 !== void 0 ? _9 : null,
44
- reader: (_10 = options.reader) !== null && _10 !== void 0 ? _10 : from_fetch_1.fetchReader,
41
+ reader: (_10 = options.reader) !== null && _10 !== void 0 ? _10 : webReader,
45
42
  controller: (_11 = options.controller) !== null && _11 !== void 0 ? _11 : undefined,
46
- selectM3uStream: (_12 = options.selectM3uStream) !== null && _12 !== void 0 ? _12 : select_stream_1.defaultSelectM3uStreamFn,
43
+ selectM3uStream: (_12 = options.selectM3uStream) !== null && _12 !== void 0 ? _12 : defaultSelectM3uStreamFn,
44
+ selectM3uAssociatedPlaylists: (_13 = options.selectM3uAssociatedPlaylists) !== null && _13 !== void 0 ? _13 : defaultSelectM3uAssociatedPlaylists,
45
+ mp4HeaderSegment: (_14 = options.mp4HeaderSegment) !== null && _14 !== void 0 ? _14 : null,
47
46
  src: options.src,
48
47
  mode: 'query',
49
48
  onDiscardedData: null,
@@ -52,4 +51,3 @@ const parseMedia = (options) => {
52
51
  apiName: 'parseMedia()',
53
52
  });
54
53
  };
55
- exports.parseMedia = parseMedia;
@@ -6,7 +6,7 @@ import type { RiffBox, RiffStructure } from './containers/riff/riff-box';
6
6
  import type { TransportStreamBox } from './containers/transport-stream/boxes';
7
7
  import type { WavStructure } from './containers/wav/types';
8
8
  import type { MatroskaSegment } from './containers/webm/segments';
9
- import type { MetadataEntry } from './metadata/get-metadata';
9
+ import type { MediaParserMetadataEntry } from './metadata/get-metadata';
10
10
  import type { Skip } from './skip';
11
11
  type Mp3Id3Header = {
12
12
  type: 'id3-header';
@@ -14,7 +14,7 @@ type Mp3Id3Header = {
14
14
  versionMinor: number;
15
15
  flags: number;
16
16
  size: number;
17
- metatags: MetadataEntry[];
17
+ metatags: MediaParserMetadataEntry[];
18
18
  };
19
19
  export type Mp3Box = Mp3Id3Header;
20
20
  export type AnySegment = MatroskaSegment | IsoBaseMediaBox | RiffBox | TransportStreamBox;
@@ -34,6 +34,6 @@ export type Mp3Structure = {
34
34
  type: 'mp3';
35
35
  boxes: Mp3Box[];
36
36
  };
37
- export type Structure = IsoBaseMediaStructure | RiffStructure | MatroskaStructure | TransportStreamStructure | Mp3Structure | AacStructure | WavStructure | M3uStructure | FlacStructure;
37
+ export type MediaParserStructureUnstable = IsoBaseMediaStructure | RiffStructure | MatroskaStructure | TransportStreamStructure | Mp3Structure | AacStructure | WavStructure | M3uStructure | FlacStructure;
38
38
  export type ParseResult = Skip | null;
39
39
  export {};
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makePauseSignal = void 0;
4
- const makePauseSignal = (emitter) => {
1
+ export const makePauseSignal = (emitter) => {
5
2
  const waiterFns = [];
6
3
  let paused = false;
7
4
  return {
@@ -35,4 +32,3 @@ const makePauseSignal = (emitter) => {
35
32
  },
36
33
  };
37
34
  };
38
- exports.makePauseSignal = makePauseSignal;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.performSeek = void 0;
4
- const log_1 = require("./log");
5
- const performSeek = async ({ seekTo, state, currentReader, readerInterface, src, }) => {
1
+ import { Log } from './log';
2
+ export const performSeek = async ({ seekTo, state, currentReader, readerInterface, src, }) => {
6
3
  const { iterator, logLevel, controller, mode, contentLength } = state;
7
4
  if (seekTo <= iterator.counter.getOffset()) {
8
5
  throw new Error(`Seeking backwards is not supported. Current position: ${iterator.counter.getOffset()}, seekTo: ${seekTo}`);
@@ -11,17 +8,17 @@ const performSeek = async ({ seekTo, state, currentReader, readerInterface, src,
11
8
  throw new Error(`Unexpected seek: ${seekTo} > ${contentLength}`);
12
9
  }
13
10
  if (iterator.counter.getOffset() + iterator.bytesRemaining() >= seekTo) {
14
- log_1.Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Data already fetched`);
11
+ Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Data already fetched`);
15
12
  iterator.discard(seekTo - iterator.counter.getOffset());
16
13
  return currentReader;
17
14
  }
18
15
  if (mode === 'download') {
19
- log_1.Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Fetching but not reading all the data inbetween because in download mode`);
16
+ Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Fetching but not reading all the data inbetween because in download mode`);
20
17
  iterator.discard(seekTo - iterator.counter.getOffset());
21
18
  return currentReader;
22
19
  }
23
20
  const time = Date.now();
24
- log_1.Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available`);
21
+ Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available`);
25
22
  currentReader.abort();
26
23
  await (controller === null || controller === void 0 ? void 0 : controller._internals.checkForAbortAndPause());
27
24
  const { reader: newReader } = await readerInterface.read({
@@ -31,7 +28,6 @@ const performSeek = async ({ seekTo, state, currentReader, readerInterface, src,
31
28
  });
32
29
  iterator.skipTo(seekTo);
33
30
  await state.discardReadBytes(true);
34
- log_1.Log.verbose(logLevel, `Re-reading took ${Date.now() - time}ms. New position: ${iterator.counter.getOffset()}`);
31
+ Log.verbose(logLevel, `Re-reading took ${Date.now() - time}ms. New position: ${iterator.counter.getOffset()}`);
35
32
  return newReader;
36
33
  };
37
- exports.performSeek = performSeek;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLengthAndReader = void 0;
4
- const getLengthAndReader = async ({ canLiveWithoutContentLength, res, ownController, requestedWithoutRange, }) => {
1
+ export const getLengthAndReader = async ({ canLiveWithoutContentLength, res, ownController, requestedWithoutRange, }) => {
5
2
  const length = res.headers.get('content-length');
6
3
  const contentLength = length === null ? null : parseInt(length, 10);
7
4
  if (requestedWithoutRange ||
@@ -40,4 +37,3 @@ const getLengthAndReader = async ({ canLiveWithoutContentLength, res, ownControl
40
37
  needsContentRange: true,
41
38
  };
42
39
  };
43
- exports.getLengthAndReader = getLengthAndReader;
@@ -1 +1 @@
1
- export declare const resolveUrl: (src: string) => string | URL;
1
+ export declare const resolveUrl: (src: string | URL) => string | URL;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveUrl = void 0;
4
- const resolveUrl = (src) => {
1
+ export const resolveUrl = (src) => {
5
2
  try {
6
3
  const resolvedUrl = typeof window !== 'undefined' && typeof window.location !== 'undefined'
7
4
  ? new URL(src, window.location.origin)
@@ -12,4 +9,3 @@ const resolveUrl = (src) => {
12
9
  return src;
13
10
  }
14
11
  };
15
- exports.resolveUrl = resolveUrl;