@remotion/media-parser 4.0.250 → 4.0.252
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aac-codecprivate.d.ts +2 -1
- package/dist/aac-codecprivate.js +28 -7
- package/dist/add-avc-profile-to-track.js +2 -2
- package/dist/buffer-iterator.d.ts +7 -2
- package/dist/buffer-iterator.js +61 -35
- package/dist/containers/aac/parse-aac.d.ts +3 -0
- package/dist/containers/aac/parse-aac.js +84 -0
- package/dist/containers/aac/types.d.ts +4 -0
- package/dist/{boxes → containers}/avc/key.d.ts +1 -1
- package/dist/containers/flac/get-block-size.d.ts +2 -0
- package/dist/containers/flac/get-block-size.js +26 -0
- package/dist/containers/flac/get-channel-count.d.ts +2 -0
- package/dist/containers/flac/get-channel-count.js +36 -0
- package/dist/containers/flac/get-duration-from-flac.d.ts +2 -0
- package/dist/containers/flac/get-duration-from-flac.js +12 -0
- package/dist/containers/flac/get-metadata-from-flac.d.ts +2 -0
- package/dist/containers/flac/get-metadata-from-flac.js +11 -0
- package/dist/containers/flac/get-sample-rate.d.ts +3 -0
- package/dist/containers/flac/get-sample-rate.js +60 -0
- package/dist/containers/flac/parse-flac-frame.d.ts +15 -0
- package/dist/containers/flac/parse-flac-frame.js +169 -0
- package/dist/{boxes/riff/parse-riff.d.ts → containers/flac/parse-flac.d.ts} +1 -1
- package/dist/containers/flac/parse-flac.js +49 -0
- package/dist/{boxes/mp3/parse-mp3.d.ts → containers/flac/parse-header.d.ts} +2 -2
- package/dist/containers/flac/parse-header.js +10 -0
- package/dist/{boxes/iso-base-media/parse-boxes.d.ts → containers/flac/parse-metadata.d.ts} +3 -2
- package/dist/containers/flac/parse-metadata.js +24 -0
- package/dist/{boxes/webm/parse-webm-header.d.ts → containers/flac/parse-streaminfo.d.ts} +1 -1
- package/dist/containers/flac/parse-streaminfo.js +53 -0
- package/dist/{boxes/riff/parse-riff-body.d.ts → containers/flac/parse-unknown-block.d.ts} +2 -1
- package/dist/containers/flac/parse-unknown-block.js +11 -0
- package/dist/containers/flac/types.d.ts +26 -0
- package/dist/containers/iso-base-media/base-media-box.d.ts +37 -0
- package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.js +1 -1
- package/dist/containers/iso-base-media/get-children.d.ts +6 -0
- package/dist/{boxes → containers}/iso-base-media/get-children.js +5 -7
- package/dist/containers/iso-base-media/get-keyframes.d.ts +3 -0
- package/dist/{boxes → containers}/iso-base-media/get-keyframes.js +3 -2
- package/dist/containers/iso-base-media/get-moov-atom.d.ts +6 -0
- package/dist/containers/iso-base-media/get-moov-atom.js +73 -0
- package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.d.ts +1 -1
- package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.js +1 -1
- package/dist/containers/iso-base-media/mdat/mdat.d.ts +3 -0
- package/dist/{boxes → containers}/iso-base-media/mdat/mdat.js +17 -12
- package/dist/{boxes → containers}/iso-base-media/moov/moov.d.ts +1 -3
- package/dist/{boxes → containers}/iso-base-media/moov/moov.js +1 -2
- package/dist/containers/iso-base-media/parse-boxes.d.ts +3 -0
- package/dist/containers/iso-base-media/parse-boxes.js +18 -0
- package/dist/containers/iso-base-media/process-box.d.ts +3 -0
- package/dist/{boxes → containers}/iso-base-media/process-box.js +52 -169
- package/dist/{boxes → containers}/iso-base-media/stsd/mebx.d.ts +1 -3
- package/dist/{boxes → containers}/iso-base-media/stsd/mebx.js +3 -4
- package/dist/{boxes → containers}/iso-base-media/stsd/samples.d.ts +4 -6
- package/dist/{boxes → containers}/iso-base-media/stsd/samples.js +5 -7
- package/dist/{boxes → containers}/iso-base-media/stsd/stsd.d.ts +1 -3
- package/dist/{boxes → containers}/iso-base-media/stsd/stsd.js +2 -2
- package/dist/{boxes → containers}/iso-base-media/trak/trak.d.ts +1 -3
- package/dist/{boxes → containers}/iso-base-media/trak/trak.js +1 -2
- package/dist/{boxes → containers}/iso-base-media/traversal.d.ts +4 -2
- package/dist/{boxes → containers}/iso-base-media/traversal.js +6 -2
- package/dist/containers/iso-base-media/void-box.js +2 -0
- package/dist/{boxes → containers}/mp3/get-duration.js +0 -3
- package/dist/containers/mp3/get-tracks-from-mp3.d.ts +4 -0
- package/dist/{boxes → containers}/mp3/get-tracks-from-mp3.js +6 -6
- package/dist/containers/mp3/id3.d.ts +4 -0
- package/dist/{boxes → containers}/mp3/id3.js +3 -2
- package/dist/containers/mp3/parse-mp3.d.ts +3 -0
- package/dist/{boxes → containers}/mp3/parse-mp3.js +7 -15
- package/dist/containers/mp3/parse-mpeg-header.d.ts +4 -0
- package/dist/{boxes → containers}/mp3/parse-mpeg-header.js +3 -2
- package/dist/containers/riff/expect-riff-box.d.ts +6 -0
- package/dist/{boxes → containers}/riff/expect-riff-box.js +7 -17
- package/dist/containers/riff/get-duration.d.ts +3 -0
- package/dist/containers/riff/get-duration.js +33 -0
- package/dist/{boxes → containers}/riff/get-tracks-from-avi.d.ts +1 -2
- package/dist/{boxes → containers}/riff/get-tracks-from-avi.js +1 -1
- package/dist/{boxes → containers}/riff/parse-list-box.d.ts +1 -3
- package/dist/{boxes → containers}/riff/parse-list-box.js +5 -9
- package/dist/containers/riff/parse-movi.d.ts +9 -0
- package/dist/{boxes → containers}/riff/parse-movi.js +13 -29
- package/dist/containers/riff/parse-riff-body.d.ts +3 -0
- package/dist/containers/riff/parse-riff-body.js +28 -0
- package/dist/{boxes → containers}/riff/parse-riff-box.d.ts +1 -3
- package/dist/{boxes → containers}/riff/parse-riff-box.js +3 -6
- package/dist/containers/riff/parse-riff-header.d.ts +3 -0
- package/dist/{boxes → containers}/riff/parse-riff-header.js +6 -11
- package/dist/containers/riff/parse-riff.d.ts +3 -0
- package/dist/{boxes → containers}/riff/parse-riff.js +4 -7
- package/dist/containers/riff/parse-video-section.d.ts +2 -0
- package/dist/{boxes → containers}/riff/parse-video-section.js +5 -8
- package/dist/{boxes → containers}/riff/riff-box.d.ts +5 -10
- package/dist/containers/riff/riff-box.js +2 -0
- package/dist/{boxes → containers}/riff/traversal.d.ts +1 -2
- package/dist/{boxes → containers}/transport-stream/adts-header.js +1 -0
- package/dist/containers/transport-stream/boxes.js +2 -0
- package/dist/{boxes → containers}/transport-stream/get-tracks.js +1 -1
- package/dist/{boxes → containers}/transport-stream/parse-packet.d.ts +1 -3
- package/dist/{boxes → containers}/transport-stream/parse-packet.js +3 -3
- package/dist/{boxes → containers}/transport-stream/parse-stream-packet.d.ts +1 -3
- package/dist/{boxes → containers}/transport-stream/parse-stream-packet.js +2 -1
- package/dist/containers/transport-stream/parse-transport-stream.d.ts +3 -0
- package/dist/{boxes → containers}/transport-stream/parse-transport-stream.js +5 -22
- package/dist/{boxes → containers}/transport-stream/process-stream-buffers.js +1 -1
- package/dist/containers/wav/get-duration-from-wav.d.ts +3 -0
- package/dist/containers/wav/get-duration-from-wav.js +26 -0
- package/dist/containers/wav/get-metadata-from-wav.d.ts +3 -0
- package/dist/containers/wav/get-metadata-from-wav.js +11 -0
- package/dist/containers/wav/parse-data.d.ts +5 -0
- package/dist/containers/wav/parse-data.js +25 -0
- package/dist/containers/wav/parse-fmt.d.ts +5 -0
- package/dist/containers/wav/parse-fmt.js +56 -0
- package/dist/containers/wav/parse-header.d.ts +5 -0
- package/dist/containers/wav/parse-header.js +17 -0
- package/dist/containers/wav/parse-id3.d.ts +5 -0
- package/dist/containers/wav/parse-id3.js +15 -0
- package/dist/containers/wav/parse-list.d.ts +5 -0
- package/dist/containers/wav/parse-list.js +32 -0
- package/dist/containers/wav/parse-video-section.d.ts +5 -0
- package/dist/containers/wav/parse-video-section.js +34 -0
- package/dist/containers/wav/parse-wav.d.ts +3 -0
- package/dist/containers/wav/parse-wav.js +36 -0
- package/dist/containers/wav/types.d.ts +30 -0
- package/dist/containers/wav/types.js +2 -0
- package/dist/{boxes → containers}/webm/parse-ebml.d.ts +1 -2
- package/dist/{boxes → containers}/webm/parse-ebml.js +4 -3
- package/dist/containers/webm/parse-webm-header.d.ts +3 -0
- package/dist/{boxes → containers}/webm/parse-webm-header.js +5 -12
- package/dist/{boxes → containers}/webm/segments.d.ts +1 -3
- package/dist/{boxes → containers}/webm/segments.js +7 -6
- package/dist/download-and-parse-media.d.ts +2 -0
- package/dist/download-and-parse-media.js +70 -0
- package/dist/emit-available-info.d.ts +2 -5
- package/dist/emit-available-info.js +104 -94
- package/dist/errors.d.ts +1 -1
- package/dist/esm/from-fetch.mjs +1 -1
- package/dist/esm/from-node.mjs +1 -1
- package/dist/esm/from-web-file.mjs +7 -7
- package/dist/esm/index.mjs +2118 -1069
- package/dist/esm/node.mjs +113 -0
- package/dist/file-types/detect-file-type.d.ts +5 -1
- package/dist/file-types/detect-file-type.js +6 -1
- package/dist/file-types/index.js +3 -0
- package/dist/get-audio-codec.d.ts +3 -4
- package/dist/get-audio-codec.js +6 -3
- package/dist/get-container.d.ts +2 -2
- package/dist/get-container.js +10 -1
- package/dist/get-dimensions.d.ts +2 -3
- package/dist/get-dimensions.js +13 -9
- package/dist/get-duration.d.ts +5 -5
- package/dist/get-duration.js +26 -27
- package/dist/get-fields-from-callbacks.js +4 -0
- package/dist/get-fps.d.ts +5 -5
- package/dist/get-fps.js +24 -14
- package/dist/get-is-hdr.d.ts +1 -2
- package/dist/get-is-hdr.js +2 -2
- package/dist/get-keyframes.d.ts +2 -3
- package/dist/get-keyframes.js +7 -5
- package/dist/get-location.d.ts +2 -2
- package/dist/get-location.js +2 -2
- package/dist/get-number-of-audio-channels.d.ts +3 -0
- package/dist/get-number-of-audio-channels.js +14 -0
- package/dist/get-sample-aspect-ratio.d.ts +8 -8
- package/dist/get-sample-aspect-ratio.js +1 -1
- package/dist/get-sample-positions-from-lpcm.d.ts +1 -1
- package/dist/get-sample-positions-from-lpcm.js +1 -1
- package/dist/get-sample-positions.d.ts +6 -6
- package/dist/get-sample-rate.d.ts +3 -0
- package/dist/get-sample-rate.js +14 -0
- package/dist/get-tracks.d.ts +8 -9
- package/dist/get-tracks.js +30 -23
- package/dist/get-video-codec.d.ts +2 -3
- package/dist/get-video-codec.js +4 -4
- package/dist/has-all-info.js +29 -18
- package/dist/index.d.ts +170 -66
- package/dist/index.js +10 -8
- package/dist/init-video.d.ts +7 -0
- package/dist/{parse-video.js → init-video.js} +31 -60
- package/dist/internal-parse-media.d.ts +2 -0
- package/dist/internal-parse-media.js +221 -0
- package/dist/is-audio-structure.d.ts +2 -0
- package/dist/is-audio-structure.js +31 -0
- package/dist/make-hvc1-codec-strings.js +4 -4
- package/dist/metadata/get-metadata.d.ts +2 -1
- package/dist/metadata/get-metadata.js +19 -3
- package/dist/metadata/metadata-from-iso.d.ts +3 -2
- package/dist/metadata/metadata-from-iso.js +3 -3
- package/dist/metadata/metadata-from-matroska.js +1 -1
- package/dist/metadata/metadata-from-riff.d.ts +1 -1
- package/dist/options.d.ts +88 -39
- package/dist/parse-and-download-media.d.ts +2 -0
- package/dist/parse-and-download-media.js +57 -0
- package/dist/parse-media.js +43 -172
- package/dist/parse-result.d.ts +10 -50
- package/dist/perform-seek.d.ts +10 -0
- package/dist/perform-seek.js +36 -0
- package/dist/readers/from-fetch.js +1 -1
- package/dist/readers/from-node.js +1 -1
- package/dist/readers/from-web-file.js +9 -9
- package/dist/readers/reader.d.ts +8 -3
- package/dist/register-track.d.ts +3 -3
- package/dist/register-track.js +5 -0
- package/dist/run-parse-iteration.d.ts +8 -0
- package/dist/run-parse-iteration.js +48 -0
- package/dist/samples-from-moof.js +1 -1
- package/dist/skip.d.ts +5 -0
- package/dist/skip.js +8 -0
- package/dist/state/aac-state.d.ts +13 -0
- package/dist/state/aac-state.js +17 -0
- package/dist/state/can-skip-tracks.js +5 -1
- package/dist/state/emitted-fields.js +4 -0
- package/dist/state/flac-state.d.ts +4 -0
- package/dist/state/flac-state.js +13 -0
- package/dist/state/has-tracks-section.d.ts +5 -2
- package/dist/state/has-tracks-section.js +11 -2
- package/dist/state/iso-base-media/cached-sample-positions.js +3 -3
- package/dist/state/iso-base-media/iso-state.d.ts +4 -2
- package/dist/state/iso-base-media/iso-state.js +2 -5
- package/dist/state/iso-base-media/moov-box.d.ts +5 -0
- package/dist/state/iso-base-media/moov-box.js +13 -0
- package/dist/state/last-eventloop-break.d.ts +4 -0
- package/dist/state/last-eventloop-break.js +18 -0
- package/dist/{may-skip-video-data → state}/may-skip-video-data.d.ts +1 -1
- package/dist/{may-skip-video-data → state}/need-samples-for-fields.js +4 -0
- package/dist/state/parser-state.d.ts +151 -51
- package/dist/state/parser-state.js +28 -5
- package/dist/state/sample-callbacks.d.ts +3 -2
- package/dist/state/sample-callbacks.js +1 -1
- package/dist/state/slow-duration-fps.d.ts +2 -0
- package/dist/state/slow-duration-fps.js +18 -0
- package/dist/state/structure.d.ts +7 -0
- package/dist/state/structure.js +56 -6
- package/dist/state/transport-stream.d.ts +3 -3
- package/dist/state/transport-stream.js +1 -1
- package/dist/state/webm.d.ts +2 -2
- package/dist/state/webm.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webcodec-sample-types.d.ts +3 -3
- package/dist/writers/node.d.ts +4 -0
- package/dist/writers/node.js +81 -0
- package/dist/writers/writer.d.ts +17 -0
- package/dist/writers/writer.js +2 -0
- package/package.json +12 -9
- package/dist/boxes/iso-base-media/continue-mdat-routine.d.ts +0 -14
- package/dist/boxes/iso-base-media/continue-mdat-routine.js +0 -74
- package/dist/boxes/iso-base-media/get-children.d.ts +0 -8
- package/dist/boxes/iso-base-media/get-keyframes.d.ts +0 -3
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +0 -6
- package/dist/boxes/iso-base-media/parse-all-children.d.ts +0 -8
- package/dist/boxes/iso-base-media/parse-all-children.js +0 -20
- package/dist/boxes/iso-base-media/parse-boxes.js +0 -46
- package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +0 -9
- package/dist/boxes/iso-base-media/parse-mdat-partially.js +0 -24
- package/dist/boxes/iso-base-media/process-box.d.ts +0 -7
- package/dist/boxes/mp3/get-tracks-from-mp3.d.ts +0 -4
- package/dist/boxes/mp3/id3-v2.d.ts +0 -0
- package/dist/boxes/mp3/id3-v2.js +0 -1
- package/dist/boxes/mp3/id3.d.ts +0 -6
- package/dist/boxes/mp3/parse-mpeg-header.d.ts +0 -6
- package/dist/boxes/riff/continue-after-riff-result.d.ts +0 -13
- package/dist/boxes/riff/continue-after-riff-result.js +0 -34
- package/dist/boxes/riff/expect-riff-box.d.ts +0 -11
- package/dist/boxes/riff/parse-box.d.ts +0 -9
- package/dist/boxes/riff/parse-box.js +0 -35
- package/dist/boxes/riff/parse-fmt-box.d.ts +0 -8
- package/dist/boxes/riff/parse-fmt-box.js +0 -35
- package/dist/boxes/riff/parse-movi.d.ts +0 -14
- package/dist/boxes/riff/parse-riff-body.js +0 -25
- package/dist/boxes/riff/parse-riff-header.d.ts +0 -7
- package/dist/boxes/riff/parse-video-section.d.ts +0 -6
- package/dist/boxes/transport-stream/parse-transport-stream.d.ts +0 -7
- package/dist/boxes/webm/segments/parse-children.d.ts +0 -9
- package/dist/boxes/webm/segments/parse-children.js +0 -21
- package/dist/bun-reader.d.ts +0 -1
- package/dist/bun-reader.js +0 -17
- package/dist/continue-mdat-routine.d.ts +0 -17
- package/dist/continue-mdat-routine.js +0 -92
- package/dist/parse-video.d.ts +0 -14
- package/dist/state/iso-state.d.ts +0 -4
- package/dist/state/iso-state.js +0 -13
- /package/dist/{boxes/iso-base-media/base-type.js → containers/aac/types.js} +0 -0
- /package/dist/{boxes → containers}/avc/codec-string.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/codec-string.js +0 -0
- /package/dist/{boxes → containers}/avc/color.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/color.js +0 -0
- /package/dist/{boxes → containers}/avc/create-sps-pps-data.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/create-sps-pps-data.js +0 -0
- /package/dist/{boxes → containers}/avc/interpret-sps.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/interpret-sps.js +0 -0
- /package/dist/{boxes → containers}/avc/key.js +0 -0
- /package/dist/{boxes → containers}/avc/parse-avc.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/parse-avc.js +0 -0
- /package/dist/{boxes → containers}/avc/sps-and-pps.d.ts +0 -0
- /package/dist/{boxes → containers}/avc/sps-and-pps.js +0 -0
- /package/dist/{boxes/iso-base-media/void-box.js → containers/flac/types.js} +0 -0
- /package/dist/{boxes/riff/riff-box.js → containers/iso-base-media/base-media-box.js} +0 -0
- /package/dist/{boxes → containers}/iso-base-media/base-type.d.ts +0 -0
- /package/dist/{boxes/transport-stream/boxes.js → containers/iso-base-media/base-type.js} +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/decoder-specific-config.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/esds-descriptors.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/esds.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/esds/esds.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/ftyp.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/ftyp.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/get-actual-number-of-channels.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/get-video-codec-from-iso-track.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/make-track.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/make-track.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/mdhd.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/mdhd.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/meta/hdlr.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/meta/ilst.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/meta/ilst.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/mvhd.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/mvhd.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/parse-icc-profile.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/av1c.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/avcc.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/colr.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/colr.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/ctts.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/hvcc.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/keys.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/keys.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/pasp.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stco.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stco.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stsc.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stss.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stss.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stsz.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stts.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/stsd/stts.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tfdt.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tfdt.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tfhd.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tfhd.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tkhd.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/tkhd.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/to-date.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/to-date.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/trun.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/trun.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/void-box.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/get-duration.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/get-frame-length.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/get-frame-length.js +0 -0
- /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/get-metadata-from-mp3.js +0 -0
- /package/dist/{boxes → containers}/mp3/id3-v1.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/id3-v1.js +0 -0
- /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.d.ts +0 -0
- /package/dist/{boxes → containers}/mp3/samples-per-mpeg-file.js +0 -0
- /package/dist/{boxes → containers}/riff/is-movi.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/is-movi.js +0 -0
- /package/dist/{boxes → containers}/riff/parse-avih.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/parse-avih.js +0 -0
- /package/dist/{boxes → containers}/riff/parse-isft.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/parse-isft.js +0 -0
- /package/dist/{boxes → containers}/riff/parse-strf.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/parse-strf.js +0 -0
- /package/dist/{boxes → containers}/riff/parse-strh.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/parse-strh.js +0 -0
- /package/dist/{boxes → containers}/riff/timescale.d.ts +0 -0
- /package/dist/{boxes → containers}/riff/timescale.js +0 -0
- /package/dist/{boxes → containers}/riff/traversal.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/adts-header.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/boxes.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/discard-rest-of-packet.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/find-separator.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/find-separator.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/get-tracks.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/handle-aac-packet.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/handle-avc-packet.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/next-pes-header-store.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pat.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pat.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pes.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pes.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pmt.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/parse-pmt.js +0 -0
- /package/dist/{boxes → containers}/transport-stream/process-stream-buffers.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/traversal.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/traversal.js +0 -0
- /package/dist/{boxes → containers}/webm/allowed-partial-segments.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/allowed-partial-segments.js +0 -0
- /package/dist/{boxes → containers}/webm/av1-codec-private.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/av1-codec-private.js +0 -0
- /package/dist/{boxes → containers}/webm/color.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/color.js +0 -0
- /package/dist/{boxes → containers}/webm/description.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/description.js +0 -0
- /package/dist/{boxes → containers}/webm/get-ready-tracks.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/get-ready-tracks.js +0 -0
- /package/dist/{boxes → containers}/webm/get-sample-from-block.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/get-sample-from-block.js +0 -0
- /package/dist/{boxes → containers}/webm/make-track.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/make-track.js +0 -0
- /package/dist/{boxes → containers}/webm/segments/all-segments.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/segments/all-segments.js +0 -0
- /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/segments/block-simple-block-flags.js +0 -0
- /package/dist/{boxes → containers}/webm/segments/track-entry.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/segments/track-entry.js +0 -0
- /package/dist/{boxes → containers}/webm/traversal.d.ts +0 -0
- /package/dist/{boxes → containers}/webm/traversal.js +0 -0
- /package/dist/{may-skip-video-data → state}/may-skip-video-data.js +0 -0
- /package/dist/{may-skip-video-data → state}/need-samples-for-fields.d.ts +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.internalParseMedia = void 0;
|
|
4
|
+
const emit_available_info_1 = require("./emit-available-info");
|
|
5
|
+
const get_fields_from_callbacks_1 = require("./get-fields-from-callbacks");
|
|
6
|
+
const has_all_info_1 = require("./has-all-info");
|
|
7
|
+
const log_1 = require("./log");
|
|
8
|
+
const perform_seek_1 = require("./perform-seek");
|
|
9
|
+
const run_parse_iteration_1 = require("./run-parse-iteration");
|
|
10
|
+
const parser_state_1 = require("./state/parser-state");
|
|
11
|
+
const throttled_progress_1 = require("./throttled-progress");
|
|
12
|
+
const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue, reader: readerInterface, onAudioTrack, onVideoTrack, signal, logLevel, onParseProgress: onParseProgressDoNotCallDirectly, progressIntervalInMs, mode, onDiscardedData, onError, ...more }) {
|
|
13
|
+
var _a;
|
|
14
|
+
const fieldsInReturnValue = _fieldsInReturnValue !== null && _fieldsInReturnValue !== void 0 ? _fieldsInReturnValue : {};
|
|
15
|
+
const fields = (0, get_fields_from_callbacks_1.getFieldsFromCallback)({
|
|
16
|
+
fields: fieldsInReturnValue,
|
|
17
|
+
callbacks: more,
|
|
18
|
+
});
|
|
19
|
+
const { reader: readerInstance, contentLength, name, contentType, supportsContentRange, } = await readerInterface.read({ src, range: null, signal });
|
|
20
|
+
if (contentLength === null) {
|
|
21
|
+
throw new Error('Cannot read media without a content length. This is currently not supported. Ensure the media has a "Content-Length" HTTP header.');
|
|
22
|
+
}
|
|
23
|
+
if (!supportsContentRange) {
|
|
24
|
+
throw new Error('Cannot read media without it supporting the "Content-Range" header. This is currently not supported. Ensure the media supports the "Content-Range" HTTP header.');
|
|
25
|
+
}
|
|
26
|
+
const hasAudioTrackHandlers = Boolean(onAudioTrack);
|
|
27
|
+
const hasVideoTrackHandlers = Boolean(onVideoTrack);
|
|
28
|
+
if (!hasAudioTrackHandlers &&
|
|
29
|
+
!hasVideoTrackHandlers &&
|
|
30
|
+
Object.values(fields).every((v) => !v) &&
|
|
31
|
+
mode === 'query') {
|
|
32
|
+
log_1.Log.warn(logLevel, new Error('Warning - No `fields` and no `on*` callbacks were passed to `parseMedia()`. Specify the data you would like to retrieve.'));
|
|
33
|
+
}
|
|
34
|
+
let timeIterating = 0;
|
|
35
|
+
let timeReadingData = 0;
|
|
36
|
+
let timeSeeking = 0;
|
|
37
|
+
let timeCheckingIfDone = 0;
|
|
38
|
+
let timeFreeingData = 0;
|
|
39
|
+
let errored = null;
|
|
40
|
+
const state = (0, parser_state_1.makeParserState)({
|
|
41
|
+
hasAudioTrackHandlers,
|
|
42
|
+
hasVideoTrackHandlers,
|
|
43
|
+
signal,
|
|
44
|
+
fields,
|
|
45
|
+
onAudioTrack: onAudioTrack !== null && onAudioTrack !== void 0 ? onAudioTrack : null,
|
|
46
|
+
onVideoTrack: onVideoTrack !== null && onVideoTrack !== void 0 ? onVideoTrack : null,
|
|
47
|
+
contentLength,
|
|
48
|
+
logLevel,
|
|
49
|
+
mode,
|
|
50
|
+
readerInterface,
|
|
51
|
+
src,
|
|
52
|
+
onDiscardedData,
|
|
53
|
+
});
|
|
54
|
+
const { iterator } = state;
|
|
55
|
+
let currentReader = readerInstance;
|
|
56
|
+
const returnValue = {};
|
|
57
|
+
const moreFields = more;
|
|
58
|
+
const throttledState = (0, throttled_progress_1.throttledStateUpdate)({
|
|
59
|
+
updateFn: onParseProgressDoNotCallDirectly !== null && onParseProgressDoNotCallDirectly !== void 0 ? onParseProgressDoNotCallDirectly : null,
|
|
60
|
+
everyMilliseconds: progressIntervalInMs !== null && progressIntervalInMs !== void 0 ? progressIntervalInMs : 100,
|
|
61
|
+
signal,
|
|
62
|
+
totalBytes: contentLength,
|
|
63
|
+
});
|
|
64
|
+
const triggerInfoEmit = async () => {
|
|
65
|
+
const availableInfo = (0, has_all_info_1.getAvailableInfo)({
|
|
66
|
+
fieldsToFetch: fields,
|
|
67
|
+
state,
|
|
68
|
+
});
|
|
69
|
+
await (0, emit_available_info_1.emitAvailableInfo)({
|
|
70
|
+
hasInfo: availableInfo,
|
|
71
|
+
callbacks: moreFields,
|
|
72
|
+
fieldsInReturnValue,
|
|
73
|
+
state,
|
|
74
|
+
returnValue,
|
|
75
|
+
name,
|
|
76
|
+
mimeType: contentType,
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const checkIfDone = async () => {
|
|
80
|
+
const startCheck = Date.now();
|
|
81
|
+
const hasAll = (0, has_all_info_1.hasAllInfo)({
|
|
82
|
+
fields,
|
|
83
|
+
state,
|
|
84
|
+
});
|
|
85
|
+
timeCheckingIfDone += Date.now() - startCheck;
|
|
86
|
+
if (hasAll && mode === 'query') {
|
|
87
|
+
log_1.Log.verbose(logLevel, 'Got all info, skipping to the end.');
|
|
88
|
+
state.increaseSkippedBytes(contentLength - state.iterator.counter.getOffset());
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
if (state.iterator.counter.getOffset() === contentLength) {
|
|
92
|
+
log_1.Log.verbose(logLevel, 'Reached end of file');
|
|
93
|
+
await state.discardReadBytes(true);
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
if (state.iterator.counter.getOffset() + state.iterator.bytesRemaining() ===
|
|
97
|
+
contentLength &&
|
|
98
|
+
errored) {
|
|
99
|
+
log_1.Log.verbose(logLevel, 'Reached end of file and errorred');
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
};
|
|
104
|
+
await triggerInfoEmit();
|
|
105
|
+
let iterationWithThisOffset = 0;
|
|
106
|
+
while (!(await checkIfDone())) {
|
|
107
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
108
|
+
throw new Error('Aborted');
|
|
109
|
+
}
|
|
110
|
+
const offsetBefore = iterator.counter.getOffset();
|
|
111
|
+
const fetchMoreData = async () => {
|
|
112
|
+
const result = await currentReader.reader.read();
|
|
113
|
+
if (result.value) {
|
|
114
|
+
iterator.addData(result.value);
|
|
115
|
+
}
|
|
116
|
+
return result.done;
|
|
117
|
+
};
|
|
118
|
+
const readStart = Date.now();
|
|
119
|
+
while (iterator.bytesRemaining() < 0) {
|
|
120
|
+
const done = await fetchMoreData();
|
|
121
|
+
if (done) {
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const hasBigBuffer = iterator.bytesRemaining() > 100000;
|
|
126
|
+
if (iterationWithThisOffset > 0 || !hasBigBuffer) {
|
|
127
|
+
await fetchMoreData();
|
|
128
|
+
}
|
|
129
|
+
await state.eventLoop.eventLoopBreakIfNeeded();
|
|
130
|
+
timeReadingData += Date.now() - readStart;
|
|
131
|
+
(_a = throttledState.update) === null || _a === void 0 ? void 0 : _a.call(throttledState, () => ({
|
|
132
|
+
bytes: iterator.counter.getOffset(),
|
|
133
|
+
percentage: contentLength
|
|
134
|
+
? iterator.counter.getOffset() / contentLength
|
|
135
|
+
: null,
|
|
136
|
+
totalBytes: contentLength,
|
|
137
|
+
}));
|
|
138
|
+
if (!errored) {
|
|
139
|
+
log_1.Log.trace(logLevel, `Continuing parsing of file, currently at position ${iterator.counter.getOffset()}/${contentLength} (0x${iterator.counter.getOffset().toString(16)})`);
|
|
140
|
+
if (iterationWithThisOffset > 300) {
|
|
141
|
+
throw new Error('Infinite loop detected. The parser is not progressing. This is likely a bug in the parser.');
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
await triggerInfoEmit();
|
|
145
|
+
const start = Date.now();
|
|
146
|
+
const skip = await (0, run_parse_iteration_1.runParseIteration)({
|
|
147
|
+
state,
|
|
148
|
+
mimeType: contentType,
|
|
149
|
+
contentLength,
|
|
150
|
+
name,
|
|
151
|
+
});
|
|
152
|
+
timeIterating += Date.now() - start;
|
|
153
|
+
if (skip !== null) {
|
|
154
|
+
state.increaseSkippedBytes(skip.skipTo - iterator.counter.getOffset());
|
|
155
|
+
if (skip.skipTo === contentLength) {
|
|
156
|
+
log_1.Log.verbose(logLevel, 'Skipped to end of file, not fetching.');
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
const seekStart = Date.now();
|
|
160
|
+
currentReader = await (0, perform_seek_1.performSeek)({
|
|
161
|
+
seekTo: skip.skipTo,
|
|
162
|
+
currentReader,
|
|
163
|
+
readerInterface,
|
|
164
|
+
src,
|
|
165
|
+
state,
|
|
166
|
+
});
|
|
167
|
+
timeSeeking += Date.now() - seekStart;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
const err = await onError(e);
|
|
172
|
+
if (!err.action) {
|
|
173
|
+
throw new Error('onError was used but did not return an "action" field. See docs for this API on how to use onError.');
|
|
174
|
+
}
|
|
175
|
+
if (err.action === 'fail') {
|
|
176
|
+
throw e;
|
|
177
|
+
}
|
|
178
|
+
if (err.action === 'download') {
|
|
179
|
+
errored = e;
|
|
180
|
+
log_1.Log.verbose(logLevel, 'Error was handled by onError and deciding to continue.');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const didProgress = iterator.counter.getOffset() > offsetBefore;
|
|
184
|
+
if (!didProgress) {
|
|
185
|
+
iterationWithThisOffset++;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const timeFreeStart = Date.now();
|
|
189
|
+
await state.discardReadBytes(false);
|
|
190
|
+
timeFreeingData += Date.now() - timeFreeStart;
|
|
191
|
+
}
|
|
192
|
+
log_1.Log.verbose(logLevel, 'Finished parsing file');
|
|
193
|
+
// Force assign
|
|
194
|
+
await (0, emit_available_info_1.emitAvailableInfo)({
|
|
195
|
+
hasInfo: Object.keys(fields).reduce((acc, key) => {
|
|
196
|
+
if (fields === null || fields === void 0 ? void 0 : fields[key]) {
|
|
197
|
+
acc[key] = true;
|
|
198
|
+
}
|
|
199
|
+
return acc;
|
|
200
|
+
}, {}),
|
|
201
|
+
callbacks: moreFields,
|
|
202
|
+
fieldsInReturnValue,
|
|
203
|
+
state,
|
|
204
|
+
returnValue,
|
|
205
|
+
mimeType: contentType,
|
|
206
|
+
name,
|
|
207
|
+
});
|
|
208
|
+
log_1.Log.verbose(logLevel, `Time iterating over file: ${timeIterating}ms`);
|
|
209
|
+
log_1.Log.verbose(logLevel, `Time fetching data: ${timeReadingData}ms`);
|
|
210
|
+
log_1.Log.verbose(logLevel, `Time seeking: ${timeSeeking}ms`);
|
|
211
|
+
log_1.Log.verbose(logLevel, `Time checking if done: ${timeCheckingIfDone}ms`);
|
|
212
|
+
log_1.Log.verbose(logLevel, `Time freeing data: ${timeFreeingData}ms`);
|
|
213
|
+
currentReader.abort();
|
|
214
|
+
iterator === null || iterator === void 0 ? void 0 : iterator.destroy();
|
|
215
|
+
state.callbacks.tracks.ensureHasTracksAtEnd(fields);
|
|
216
|
+
if (errored) {
|
|
217
|
+
throw errored;
|
|
218
|
+
}
|
|
219
|
+
return returnValue;
|
|
220
|
+
};
|
|
221
|
+
exports.internalParseMedia = internalParseMedia;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAudioStructure = void 0;
|
|
4
|
+
const isAudioStructure = (structure) => {
|
|
5
|
+
if (structure.type === 'mp3') {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
if (structure.type === 'wav') {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (structure.type === 'aac') {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (structure.type === 'flac') {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
if (structure.type === 'iso-base-media') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (structure.type === 'matroska') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (structure.type === 'transport-stream') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (structure.type === 'riff') {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`Unhandled structure type: ${structure}`);
|
|
30
|
+
};
|
|
31
|
+
exports.isAudioStructure = isAudioStructure;
|
|
@@ -17,12 +17,12 @@ const getHvc1CodecString = (data) => {
|
|
|
17
17
|
// general_constraint_indicator_flags(48)
|
|
18
18
|
const generalConstraintIndicator = data.getSlice(6);
|
|
19
19
|
const generalLevelIdc = data.getUint8();
|
|
20
|
-
let
|
|
20
|
+
let profileId = 0;
|
|
21
21
|
for (let i = 0; i < 32; i++) {
|
|
22
|
-
|
|
22
|
+
profileId |= generalProfileCompatibility & 1;
|
|
23
23
|
if (i === 31)
|
|
24
24
|
break;
|
|
25
|
-
|
|
25
|
+
profileId <<= 1;
|
|
26
26
|
generalProfileCompatibility >>= 1;
|
|
27
27
|
}
|
|
28
28
|
const profileSpaceChar = generalProfileSpace === 0
|
|
@@ -42,6 +42,6 @@ const getHvc1CodecString = (data) => {
|
|
|
42
42
|
hasByte = true;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
return `${profileSpaceChar}${generalProfileIdc.toString(16)}.${
|
|
45
|
+
return `${profileSpaceChar}${generalProfileIdc.toString(16)}.${profileId.toString(16)}.${generalTierChar}${generalLevelIdc}.${generalConstraintString}`;
|
|
46
46
|
};
|
|
47
47
|
exports.getHvc1CodecString = getHvc1CodecString;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Structure } from '../parse-result';
|
|
2
|
+
import type { ParserState } from '../state/parser-state';
|
|
2
3
|
export type MetadataEntry = {
|
|
3
4
|
key: string;
|
|
4
5
|
value: string | number;
|
|
5
6
|
trackId: number | null;
|
|
6
7
|
};
|
|
7
|
-
export declare const getMetadata: (
|
|
8
|
+
export declare const getMetadata: (state: ParserState) => MetadataEntry[];
|
|
8
9
|
export declare const hasMetadata: (structure: Structure) => boolean;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasMetadata = exports.getMetadata = void 0;
|
|
4
|
-
const
|
|
4
|
+
const get_metadata_from_flac_1 = require("../containers/flac/get-metadata-from-flac");
|
|
5
|
+
const get_metadata_from_mp3_1 = require("../containers/mp3/get-metadata-from-mp3");
|
|
6
|
+
const get_metadata_from_wav_1 = require("../containers/wav/get-metadata-from-wav");
|
|
5
7
|
const metadata_from_iso_1 = require("./metadata-from-iso");
|
|
6
8
|
const metadata_from_matroska_1 = require("./metadata-from-matroska");
|
|
7
9
|
const metadata_from_riff_1 = require("./metadata-from-riff");
|
|
8
|
-
const getMetadata = (
|
|
10
|
+
const getMetadata = (state) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const structure = state.getStructure();
|
|
9
13
|
if (structure.type === 'matroska') {
|
|
10
14
|
return (0, metadata_from_matroska_1.getMetadataFromMatroska)(structure);
|
|
11
15
|
}
|
|
@@ -22,13 +26,25 @@ const getMetadata = (structure) => {
|
|
|
22
26
|
}
|
|
23
27
|
return tags;
|
|
24
28
|
}
|
|
25
|
-
|
|
29
|
+
if (structure.type === 'wav') {
|
|
30
|
+
return (_a = (0, get_metadata_from_wav_1.getMetadataFromWav)(structure)) !== null && _a !== void 0 ? _a : [];
|
|
31
|
+
}
|
|
32
|
+
if (structure.type === 'aac') {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
if (structure.type === 'flac') {
|
|
36
|
+
return (_b = (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure)) !== null && _b !== void 0 ? _b : [];
|
|
37
|
+
}
|
|
38
|
+
return (0, metadata_from_iso_1.getMetadataFromIsoBase)(state);
|
|
26
39
|
};
|
|
27
40
|
exports.getMetadata = getMetadata;
|
|
28
41
|
const hasMetadata = (structure) => {
|
|
29
42
|
if (structure.type === 'mp3') {
|
|
30
43
|
return (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure) !== null;
|
|
31
44
|
}
|
|
45
|
+
if (structure.type === 'wav') {
|
|
46
|
+
return (0, get_metadata_from_wav_1.getMetadataFromWav)(structure) !== null;
|
|
47
|
+
}
|
|
32
48
|
return false;
|
|
33
49
|
};
|
|
34
50
|
exports.hasMetadata = hasMetadata;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RegularBox } from '../containers/iso-base-media/base-media-box';
|
|
2
|
+
import type { ParserState } from '../state/parser-state';
|
|
2
3
|
import type { MetadataEntry } from './get-metadata';
|
|
3
4
|
export declare const parseIsoMetaBox: (meta: RegularBox, trackId: number | null) => MetadataEntry[];
|
|
4
|
-
export declare const getMetadataFromIsoBase: (
|
|
5
|
+
export declare const getMetadataFromIsoBase: (state: ParserState) => MetadataEntry[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getMetadataFromIsoBase = exports.parseIsoMetaBox = void 0;
|
|
4
|
-
const traversal_1 = require("../
|
|
4
|
+
const traversal_1 = require("../containers/iso-base-media/traversal");
|
|
5
5
|
const truthy_1 = require("../truthy");
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
@@ -115,8 +115,8 @@ const parseIsoMetaBox = (meta, trackId) => {
|
|
|
115
115
|
return entries;
|
|
116
116
|
};
|
|
117
117
|
exports.parseIsoMetaBox = parseIsoMetaBox;
|
|
118
|
-
const getMetadataFromIsoBase = (
|
|
119
|
-
const moov = (0, traversal_1.getMoovBox)(
|
|
118
|
+
const getMetadataFromIsoBase = (state) => {
|
|
119
|
+
const moov = (0, traversal_1.getMoovBox)(state);
|
|
120
120
|
if (!moov) {
|
|
121
121
|
return [];
|
|
122
122
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getMetadataFromMatroska = void 0;
|
|
4
|
-
const traversal_1 = require("../
|
|
4
|
+
const traversal_1 = require("../containers/webm/traversal");
|
|
5
5
|
const removeEndZeroes = (value) => {
|
|
6
6
|
return value.endsWith('\u0000') ? removeEndZeroes(value.slice(0, -1)) : value;
|
|
7
7
|
};
|
package/dist/options.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { ReaderInterface } from './readers/reader';
|
|
|
8
8
|
import type { MediaParserEmbeddedImage } from './state/images';
|
|
9
9
|
import type { InternalStats } from './state/parser-state';
|
|
10
10
|
import type { OnAudioTrack, OnVideoTrack } from './webcodec-sample-types';
|
|
11
|
+
import type { WriterInterface } from './writers/writer';
|
|
11
12
|
export type KnownAudioCodecs = 'aac' | 'mp3' | 'aiff' | 'opus' | 'pcm' | 'vorbis' | 'unknown';
|
|
12
13
|
export type ParseMediaFields = {
|
|
13
14
|
dimensions: boolean;
|
|
@@ -32,7 +33,11 @@ export type ParseMediaFields = {
|
|
|
32
33
|
keyframes: boolean;
|
|
33
34
|
slowKeyframes: boolean;
|
|
34
35
|
slowNumberOfFrames: boolean;
|
|
36
|
+
slowVideoBitrate: boolean;
|
|
37
|
+
slowAudioBitrate: boolean;
|
|
35
38
|
images: boolean;
|
|
39
|
+
sampleRate: boolean;
|
|
40
|
+
numberOfAudioChannels: boolean;
|
|
36
41
|
};
|
|
37
42
|
export type AllParseMediaFields = {
|
|
38
43
|
dimensions: true;
|
|
@@ -58,6 +63,10 @@ export type AllParseMediaFields = {
|
|
|
58
63
|
keyframes: true;
|
|
59
64
|
slowKeyframes: true;
|
|
60
65
|
images: true;
|
|
66
|
+
sampleRate: true;
|
|
67
|
+
numberOfAudioChannels: true;
|
|
68
|
+
slowVideoBitrate: true;
|
|
69
|
+
slowAudioBitrate: true;
|
|
61
70
|
};
|
|
62
71
|
export type AllOptions<Fields extends ParseMediaFields> = {
|
|
63
72
|
dimensions: Fields['dimensions'];
|
|
@@ -83,13 +92,17 @@ export type AllOptions<Fields extends ParseMediaFields> = {
|
|
|
83
92
|
slowKeyframes: Fields['slowKeyframes'];
|
|
84
93
|
slowNumberOfFrames: Fields['slowNumberOfFrames'];
|
|
85
94
|
images: Fields['images'];
|
|
95
|
+
sampleRate: Fields['sampleRate'];
|
|
96
|
+
numberOfAudioChannels: Fields['numberOfAudioChannels'];
|
|
97
|
+
slowVideoBitrate: Fields['slowVideoBitrate'];
|
|
98
|
+
slowAudioBitrate: Fields['slowAudioBitrate'];
|
|
86
99
|
};
|
|
87
100
|
export type Options<Fields extends ParseMediaFields> = Partial<AllOptions<Fields>>;
|
|
88
101
|
export type TracksField = {
|
|
89
102
|
videoTracks: VideoTrack[];
|
|
90
103
|
audioTracks: AudioTrack[];
|
|
91
104
|
};
|
|
92
|
-
export type
|
|
105
|
+
export type MediaParserContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3' | 'aac' | 'flac' | 'wav';
|
|
93
106
|
export type MediaParserKeyframe = {
|
|
94
107
|
positionInBytes: number;
|
|
95
108
|
sizeInBytes: number;
|
|
@@ -97,31 +110,36 @@ export type MediaParserKeyframe = {
|
|
|
97
110
|
decodingTimeInSeconds: number;
|
|
98
111
|
trackId: number;
|
|
99
112
|
};
|
|
100
|
-
export
|
|
101
|
-
onDimensions
|
|
102
|
-
onDurationInSeconds
|
|
103
|
-
onSlowDurationInSeconds
|
|
104
|
-
onSlowFps
|
|
105
|
-
onStructure
|
|
106
|
-
onFps
|
|
107
|
-
onVideoCodec
|
|
108
|
-
onAudioCodec
|
|
109
|
-
onTracks
|
|
110
|
-
onRotation
|
|
111
|
-
onUnrotatedDimensions
|
|
112
|
-
onInternalStats
|
|
113
|
-
onSize
|
|
114
|
-
onName
|
|
115
|
-
onContainer
|
|
116
|
-
onIsHdr
|
|
117
|
-
onMetadata
|
|
118
|
-
onLocation
|
|
119
|
-
onMimeType
|
|
120
|
-
onKeyframes
|
|
121
|
-
onSlowKeyframes
|
|
122
|
-
onSlowNumberOfFrames
|
|
123
|
-
onImages
|
|
124
|
-
|
|
113
|
+
export type MandatoryParseMediaCallbacks = {
|
|
114
|
+
onDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
|
|
115
|
+
onDurationInSeconds: null | ((durationInSeconds: number | null) => unknown | Promise<unknown>);
|
|
116
|
+
onSlowDurationInSeconds: null | ((durationInSeconds: number) => unknown | Promise<unknown>);
|
|
117
|
+
onSlowFps: null | ((fps: number) => unknown | Promise<unknown>);
|
|
118
|
+
onStructure: null | ((structure: Structure) => unknown | Promise<unknown>);
|
|
119
|
+
onFps: null | ((fps: number | null) => unknown | Promise<unknown>);
|
|
120
|
+
onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => unknown | Promise<unknown>);
|
|
121
|
+
onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => unknown | Promise<unknown>);
|
|
122
|
+
onTracks: null | ((tracks: TracksField) => unknown | Promise<unknown>);
|
|
123
|
+
onRotation: null | ((rotation: number | null) => unknown | Promise<unknown>);
|
|
124
|
+
onUnrotatedDimensions: null | ((dimensions: Dimensions | null) => unknown | Promise<unknown>);
|
|
125
|
+
onInternalStats: null | ((internalStats: InternalStats) => unknown | Promise<unknown>);
|
|
126
|
+
onSize: null | ((size: number | null) => unknown | Promise<unknown>);
|
|
127
|
+
onName: null | ((name: string) => unknown | Promise<unknown>);
|
|
128
|
+
onContainer: null | ((container: MediaParserContainer) => unknown | Promise<unknown>);
|
|
129
|
+
onIsHdr: null | ((isHdr: boolean) => unknown | Promise<unknown>);
|
|
130
|
+
onMetadata: null | ((metadata: MetadataEntry[]) => unknown | Promise<unknown>);
|
|
131
|
+
onLocation: null | ((location: MediaParserLocation | null) => unknown | Promise<unknown>);
|
|
132
|
+
onMimeType: null | ((mimeType: string | null) => unknown | Promise<unknown>);
|
|
133
|
+
onKeyframes: null | ((keyframes: MediaParserKeyframe[] | null) => unknown | Promise<unknown>);
|
|
134
|
+
onSlowKeyframes: null | ((keyframes: MediaParserKeyframe[]) => unknown | Promise<unknown>);
|
|
135
|
+
onSlowNumberOfFrames: null | ((samples: number) => unknown | Promise<unknown>);
|
|
136
|
+
onImages: null | ((images: MediaParserEmbeddedImage[]) => unknown | Promise<unknown>);
|
|
137
|
+
onSampleRate: null | ((sampleRate: number | null) => unknown | Promise<unknown>);
|
|
138
|
+
onNumberOfAudioChannels: null | ((numberOfChannels: number | null) => unknown | Promise<unknown>);
|
|
139
|
+
onSlowVideoBitrate: null | ((videoBitrate: number | null) => unknown | Promise<unknown>);
|
|
140
|
+
onSlowAudioBitrate: null | ((audioBitrate: number | null) => unknown | Promise<unknown>);
|
|
141
|
+
};
|
|
142
|
+
export type ParseMediaCallbacks = Partial<MandatoryParseMediaCallbacks>;
|
|
125
143
|
export interface ParseMediaData {
|
|
126
144
|
dimensions: Dimensions | null;
|
|
127
145
|
durationInSeconds: number | null;
|
|
@@ -140,33 +158,64 @@ export interface ParseMediaData {
|
|
|
140
158
|
name: string;
|
|
141
159
|
metadata: MetadataEntry[];
|
|
142
160
|
location: MediaParserLocation | null;
|
|
143
|
-
container:
|
|
161
|
+
container: MediaParserContainer;
|
|
144
162
|
mimeType: string | null;
|
|
145
163
|
keyframes: MediaParserKeyframe[] | null;
|
|
146
164
|
slowKeyframes: MediaParserKeyframe[];
|
|
147
165
|
slowNumberOfFrames: number;
|
|
148
166
|
images: MediaParserEmbeddedImage[];
|
|
167
|
+
sampleRate: number | null;
|
|
168
|
+
numberOfAudioChannels: number | null;
|
|
169
|
+
slowVideoBitrate: number | null;
|
|
170
|
+
slowAudioBitrate: number | null;
|
|
149
171
|
}
|
|
150
172
|
export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {
|
|
151
173
|
[K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
|
|
152
174
|
};
|
|
153
|
-
export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
|
|
154
|
-
fields?: F;
|
|
155
|
-
} & ParseMediaCallbacks;
|
|
156
175
|
export type ParseMediaProgress = {
|
|
157
176
|
bytes: number;
|
|
158
177
|
percentage: number | null;
|
|
159
178
|
totalBytes: number | null;
|
|
160
179
|
};
|
|
161
180
|
export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
|
|
181
|
+
type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
|
|
182
|
+
reader: ReaderInterface;
|
|
183
|
+
signal: AbortSignal | undefined;
|
|
184
|
+
logLevel: LogLevel;
|
|
185
|
+
onParseProgress: ParseMediaOnProgress | null;
|
|
186
|
+
progressIntervalInMs: number | null;
|
|
187
|
+
fields: F | null;
|
|
188
|
+
} & MandatoryParseMediaCallbacks;
|
|
189
|
+
type ParseMediaSampleCallbacks = {
|
|
190
|
+
onAudioTrack: OnAudioTrack | null;
|
|
191
|
+
onVideoTrack: OnVideoTrack | null;
|
|
192
|
+
};
|
|
193
|
+
export type ParseMediaMode = 'query' | 'download';
|
|
194
|
+
export type ParseMediaSrc = string | Blob;
|
|
195
|
+
export type OnDiscardedData = (data: Uint8Array) => Promise<void>;
|
|
196
|
+
export type ContinueAfterError = {
|
|
197
|
+
action: 'fail';
|
|
198
|
+
} | {
|
|
199
|
+
action: 'download';
|
|
200
|
+
};
|
|
201
|
+
export type ParseMediaOnError = (error: Error) => ContinueAfterError | Promise<ContinueAfterError>;
|
|
202
|
+
export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
203
|
+
src: ParseMediaSrc;
|
|
204
|
+
} & OptionalParseMediaParams<F> & ParseMediaSampleCallbacks & {
|
|
205
|
+
onDiscardedData: OnDiscardedData | null;
|
|
206
|
+
mode: ParseMediaMode;
|
|
207
|
+
onError: ParseMediaOnError;
|
|
208
|
+
};
|
|
162
209
|
export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
163
|
-
src:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
210
|
+
src: ParseMediaSrc;
|
|
211
|
+
} & Partial<OptionalParseMediaParams<F>> & Partial<ParseMediaSampleCallbacks>;
|
|
212
|
+
export type DownloadAndParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
213
|
+
src: ParseMediaSrc;
|
|
214
|
+
} & Partial<OptionalParseMediaParams<F>> & {
|
|
215
|
+
writer: WriterInterface;
|
|
216
|
+
onError?: ParseMediaOnError;
|
|
217
|
+
};
|
|
218
|
+
export type InternalParseMedia = <F extends Options<ParseMediaFields>>(options: InternalParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
172
219
|
export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
220
|
+
export type DownloadAndParseMedia = <F extends Options<ParseMediaFields>>(options: DownloadAndParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
221
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAndDownloadMedia = void 0;
|
|
4
|
+
const internal_parse_media_1 = require("./internal-parse-media");
|
|
5
|
+
const from_fetch_1 = require("./readers/from-fetch");
|
|
6
|
+
const parseAndDownloadMedia = async (options) => {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
|
|
8
|
+
const content = await options.writer.createContent({
|
|
9
|
+
filename: 'hmm',
|
|
10
|
+
mimeType: 'shouldnotmatter',
|
|
11
|
+
});
|
|
12
|
+
const returnValue = await (0, internal_parse_media_1.internalParseMedia)({
|
|
13
|
+
fields: (_a = options.fields) !== null && _a !== void 0 ? _a : null,
|
|
14
|
+
logLevel: (_b = options.logLevel) !== null && _b !== void 0 ? _b : 'info',
|
|
15
|
+
mode: 'download',
|
|
16
|
+
onAudioCodec: (_c = options.onAudioCodec) !== null && _c !== void 0 ? _c : null,
|
|
17
|
+
onAudioTrack: null,
|
|
18
|
+
onContainer: (_d = options.onContainer) !== null && _d !== void 0 ? _d : null,
|
|
19
|
+
onDimensions: (_e = options.onDimensions) !== null && _e !== void 0 ? _e : null,
|
|
20
|
+
onDiscardedData: async (data) => {
|
|
21
|
+
await content.write(data);
|
|
22
|
+
},
|
|
23
|
+
onDurationInSeconds: (_f = options.onDurationInSeconds) !== null && _f !== void 0 ? _f : null,
|
|
24
|
+
onFps: (_g = options.onFps) !== null && _g !== void 0 ? _g : null,
|
|
25
|
+
onImages: (_h = options.onImages) !== null && _h !== void 0 ? _h : null,
|
|
26
|
+
onInternalStats: (_j = options.onInternalStats) !== null && _j !== void 0 ? _j : null,
|
|
27
|
+
onIsHdr: (_k = options.onIsHdr) !== null && _k !== void 0 ? _k : null,
|
|
28
|
+
onKeyframes: (_l = options.onKeyframes) !== null && _l !== void 0 ? _l : null,
|
|
29
|
+
onLocation: (_m = options.onLocation) !== null && _m !== void 0 ? _m : null,
|
|
30
|
+
onMetadata: (_o = options.onMetadata) !== null && _o !== void 0 ? _o : null,
|
|
31
|
+
onMimeType: (_p = options.onMimeType) !== null && _p !== void 0 ? _p : null,
|
|
32
|
+
onName: (_q = options.onName) !== null && _q !== void 0 ? _q : null,
|
|
33
|
+
onNumberOfAudioChannels: (_r = options.onNumberOfAudioChannels) !== null && _r !== void 0 ? _r : null,
|
|
34
|
+
onParseProgress: (_s = options.onParseProgress) !== null && _s !== void 0 ? _s : null,
|
|
35
|
+
onRotation: (_t = options.onRotation) !== null && _t !== void 0 ? _t : null,
|
|
36
|
+
onSampleRate: (_u = options.onSampleRate) !== null && _u !== void 0 ? _u : null,
|
|
37
|
+
onSize: (_v = options.onSize) !== null && _v !== void 0 ? _v : null,
|
|
38
|
+
onSlowAudioBitrate: (_w = options.onSlowAudioBitrate) !== null && _w !== void 0 ? _w : null,
|
|
39
|
+
onSlowDurationInSeconds: (_x = options.onSlowDurationInSeconds) !== null && _x !== void 0 ? _x : null,
|
|
40
|
+
onSlowFps: (_y = options.onSlowFps) !== null && _y !== void 0 ? _y : null,
|
|
41
|
+
onSlowKeyframes: (_z = options.onSlowKeyframes) !== null && _z !== void 0 ? _z : null,
|
|
42
|
+
onSlowNumberOfFrames: (_0 = options.onSlowNumberOfFrames) !== null && _0 !== void 0 ? _0 : null,
|
|
43
|
+
onSlowVideoBitrate: (_1 = options.onSlowVideoBitrate) !== null && _1 !== void 0 ? _1 : null,
|
|
44
|
+
onStructure: (_2 = options.onStructure) !== null && _2 !== void 0 ? _2 : null,
|
|
45
|
+
onTracks: (_3 = options.onTracks) !== null && _3 !== void 0 ? _3 : null,
|
|
46
|
+
onUnrotatedDimensions: (_4 = options.onUnrotatedDimensions) !== null && _4 !== void 0 ? _4 : null,
|
|
47
|
+
onVideoCodec: (_5 = options.onVideoCodec) !== null && _5 !== void 0 ? _5 : null,
|
|
48
|
+
onVideoTrack: null,
|
|
49
|
+
progressIntervalInMs: (_6 = options.progressIntervalInMs) !== null && _6 !== void 0 ? _6 : null,
|
|
50
|
+
reader: (_7 = options.reader) !== null && _7 !== void 0 ? _7 : from_fetch_1.fetchReader,
|
|
51
|
+
signal: (_8 = options.signal) !== null && _8 !== void 0 ? _8 : undefined,
|
|
52
|
+
src: options.src,
|
|
53
|
+
});
|
|
54
|
+
await content.finish();
|
|
55
|
+
return returnValue;
|
|
56
|
+
};
|
|
57
|
+
exports.parseAndDownloadMedia = parseAndDownloadMedia;
|