@remotion/media-parser 4.0.249 → 4.0.251
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/add-avc-profile-to-track.js +2 -2
- package/dist/buffer-iterator.d.ts +3 -5
- package/dist/buffer-iterator.js +66 -50
- package/dist/containers/aac/parse-aac.d.ts +3 -0
- package/dist/containers/aac/parse-aac.js +83 -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 +15 -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 +175 -0
- package/dist/{boxes/riff/parse-box.d.ts → containers/flac/parse-flac.d.ts} +1 -3
- package/dist/containers/flac/parse-flac.js +54 -0
- package/dist/{boxes/mp3/parse-mpeg-header.d.ts → containers/flac/parse-header.d.ts} +4 -3
- package/dist/containers/flac/parse-header.js +10 -0
- package/dist/{boxes/mp3/parse-mp3.d.ts → containers/flac/parse-metadata.d.ts} +4 -4
- package/dist/containers/flac/parse-metadata.js +24 -0
- package/dist/{boxes/webm/parse-webm-header.d.ts → containers/flac/parse-streaminfo.d.ts} +2 -4
- package/dist/containers/flac/parse-streaminfo.js +53 -0
- package/dist/containers/flac/parse-unknown-block.d.ts +8 -0
- 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 +40 -0
- package/dist/containers/iso-base-media/get-children.d.ts +6 -0
- package/dist/containers/iso-base-media/get-children.js +21 -0
- package/dist/{boxes → containers}/iso-base-media/get-sample-positions-from-track.d.ts +1 -1
- package/dist/containers/iso-base-media/mdat/mdat.d.ts +2 -0
- package/dist/containers/iso-base-media/mdat/mdat.js +91 -0
- package/dist/containers/iso-base-media/moov/moov.d.ts +12 -0
- package/dist/containers/iso-base-media/moov/moov.js +17 -0
- package/dist/containers/iso-base-media/parse-boxes.d.ts +3 -0
- package/dist/containers/iso-base-media/parse-boxes.js +40 -0
- package/dist/containers/iso-base-media/process-box.d.ts +3 -0
- package/dist/{boxes → containers}/iso-base-media/process-box.js +49 -147
- package/dist/{boxes → containers}/iso-base-media/stsd/mebx.d.ts +1 -6
- package/dist/containers/iso-base-media/stsd/mebx.js +22 -0
- package/dist/{boxes → containers}/iso-base-media/stsd/samples.d.ts +6 -16
- package/dist/{boxes → containers}/iso-base-media/stsd/samples.js +26 -71
- package/dist/{boxes → containers}/iso-base-media/stsd/stsd.d.ts +1 -6
- package/dist/{boxes → containers}/iso-base-media/stsd/stsd.js +3 -6
- package/dist/containers/iso-base-media/trak/trak.d.ts +12 -0
- package/dist/containers/iso-base-media/trak/trak.js +17 -0
- package/dist/{boxes → containers}/iso-base-media/traversal.d.ts +2 -3
- package/dist/{boxes → containers}/iso-base-media/traversal.js +1 -12
- package/dist/containers/iso-base-media/void-box.js +2 -0
- 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 +8 -5
- package/dist/containers/mp3/parse-mp3.d.ts +3 -0
- package/dist/{boxes → containers}/mp3/parse-mp3.js +4 -20
- package/dist/containers/mp3/parse-mpeg-header.d.ts +4 -0
- package/dist/{boxes → containers}/mp3/parse-mpeg-header.js +2 -1
- package/dist/containers/riff/expect-riff-box.d.ts +7 -0
- package/dist/containers/riff/expect-riff-box.js +72 -0
- 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 +2 -3
- package/dist/{boxes → containers}/riff/get-tracks-from-avi.js +6 -10
- package/dist/containers/riff/parse-list-box.d.ts +6 -0
- package/dist/containers/riff/parse-list-box.js +29 -0
- package/dist/containers/riff/parse-movi.d.ts +11 -0
- package/dist/{boxes → containers}/riff/parse-movi.js +37 -57
- package/dist/containers/riff/parse-riff-body.d.ts +3 -0
- package/dist/containers/riff/parse-riff-body.js +22 -0
- package/dist/containers/riff/parse-riff-box.d.ts +7 -0
- package/dist/{boxes → containers}/riff/parse-riff-box.js +3 -10
- package/dist/containers/riff/parse-riff-header.d.ts +3 -0
- package/dist/containers/riff/parse-riff-header.js +23 -0
- package/dist/containers/riff/parse-riff.d.ts +3 -0
- package/dist/containers/riff/parse-riff.js +12 -0
- package/dist/containers/riff/parse-strf.d.ts +7 -0
- package/dist/{boxes → containers}/riff/parse-strf.js +4 -8
- package/dist/{boxes → containers}/riff/parse-strh.js +11 -0
- package/dist/containers/riff/parse-video-section.d.ts +2 -0
- package/dist/containers/riff/parse-video-section.js +19 -0
- package/dist/{boxes → containers}/riff/riff-box.d.ts +8 -14
- package/dist/containers/riff/riff-box.js +2 -0
- package/dist/{boxes → containers}/riff/traversal.d.ts +1 -3
- package/dist/{boxes → containers}/riff/traversal.js +1 -6
- package/dist/containers/transport-stream/boxes.js +2 -0
- package/dist/containers/transport-stream/get-tracks.d.ts +4 -0
- package/dist/{boxes → containers}/transport-stream/get-tracks.js +4 -3
- package/dist/containers/transport-stream/parse-packet.d.ts +5 -0
- package/dist/{boxes → containers}/transport-stream/parse-packet.js +4 -5
- package/dist/containers/transport-stream/parse-stream-packet.d.ts +9 -0
- package/dist/{boxes → containers}/transport-stream/parse-stream-packet.js +11 -12
- package/dist/containers/transport-stream/parse-transport-stream.d.ts +3 -0
- package/dist/{boxes → containers}/transport-stream/parse-transport-stream.js +8 -37
- package/dist/{boxes → containers}/transport-stream/process-stream-buffers.d.ts +1 -2
- package/dist/{boxes → containers}/transport-stream/process-stream-buffers.js +3 -3
- package/dist/containers/wav/get-duration-from-wav.d.ts +3 -0
- package/dist/containers/wav/get-duration-from-wav.js +29 -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 +17 -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 +37 -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 +6 -2
- package/dist/containers/webm/parse-webm-header.d.ts +3 -0
- package/dist/containers/webm/parse-webm-header.js +53 -0
- package/dist/containers/webm/segments.d.ts +9 -0
- package/dist/containers/webm/segments.js +80 -0
- package/dist/emit-available-info.d.ts +1 -3
- package/dist/emit-available-info.js +86 -76
- package/dist/errors.d.ts +1 -1
- package/dist/esm/from-node.mjs +8 -9
- package/dist/esm/index.mjs +4951 -4693
- package/dist/file-types/detect-file-type.d.ts +5 -1
- package/dist/file-types/detect-file-type.js +10 -3
- package/dist/file-types/index.js +3 -0
- package/dist/get-audio-codec.d.ts +4 -5
- package/dist/get-audio-codec.js +5 -5
- 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 +14 -10
- package/dist/get-duration.d.ts +5 -5
- package/dist/get-duration.js +29 -27
- package/dist/get-fields-from-callbacks.js +4 -0
- package/dist/get-fps.d.ts +1 -1
- package/dist/get-fps.js +12 -4
- package/dist/get-is-hdr.d.ts +2 -3
- package/dist/get-is-hdr.js +4 -4
- package/dist/get-keyframes.d.ts +1 -1
- package/dist/get-keyframes.js +4 -3
- 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 +9 -8
- package/dist/get-tracks.js +36 -22
- package/dist/get-video-codec.d.ts +3 -4
- package/dist/get-video-codec.js +6 -6
- package/dist/has-all-info.js +26 -15
- package/dist/index.d.ts +145 -41
- package/dist/index.js +8 -8
- package/dist/init-video.d.ts +7 -0
- package/dist/init-video.js +114 -0
- package/dist/is-audio-structure.d.ts +2 -0
- package/dist/is-audio-structure.js +31 -0
- package/dist/metadata/get-metadata.js +16 -1
- package/dist/metadata/metadata-from-iso.d.ts +2 -1
- package/dist/metadata/metadata-from-iso.js +1 -1
- package/dist/metadata/metadata-from-matroska.js +1 -1
- package/dist/metadata/metadata-from-riff.d.ts +1 -1
- package/dist/options.d.ts +64 -38
- package/dist/parse-media.js +125 -43
- package/dist/parse-result.d.ts +8 -61
- package/dist/perform-seek.d.ts +13 -0
- package/dist/perform-seek.js +29 -0
- package/dist/readers/from-node.js +7 -8
- package/dist/readers/reader.d.ts +1 -1
- package/dist/register-track.d.ts +3 -3
- 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/state/aac-state.d.ts +13 -0
- package/dist/state/aac-state.js +17 -0
- package/dist/state/can-skip-tracks.d.ts +8 -1
- package/dist/state/can-skip-tracks.js +42 -27
- 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 +2 -1
- package/dist/state/has-tracks-section.js +4 -1
- package/dist/state/iso-base-media/cached-sample-positions.d.ts +15 -0
- package/dist/state/iso-base-media/cached-sample-positions.js +42 -0
- package/dist/state/iso-base-media/iso-state.d.ts +8 -0
- package/dist/state/iso-base-media/iso-state.js +15 -0
- package/dist/{may-skip-video-data → state}/may-skip-video-data.d.ts +1 -1
- package/dist/{may-skip-video-data → state}/may-skip-video-data.js +6 -2
- package/dist/{may-skip-video-data → state}/need-samples-for-fields.js +4 -0
- package/dist/state/parser-state.d.ts +131 -17
- package/dist/state/parser-state.js +18 -5
- package/dist/state/sample-callbacks.d.ts +6 -2
- package/dist/state/sample-callbacks.js +5 -2
- package/dist/state/slow-duration-fps.d.ts +2 -0
- package/dist/state/slow-duration-fps.js +18 -0
- package/dist/state/transport-stream.d.ts +8 -0
- package/dist/state/transport-stream.js +11 -0
- package/dist/state/video-section.d.ts +16 -0
- package/dist/state/video-section.js +37 -0
- package/dist/state/webm.d.ts +17 -2
- package/dist/state/webm.js +33 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webcodec-sample-types.d.ts +3 -3
- package/package.json +3 -3
- package/test.json +663 -0
- package/dist/boxes/iso-base-media/get-children.d.ts +0 -14
- package/dist/boxes/iso-base-media/get-children.js +0 -39
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +0 -26
- package/dist/boxes/iso-base-media/mdat/mdat.js +0 -141
- package/dist/boxes/iso-base-media/moov/moov.d.ts +0 -19
- package/dist/boxes/iso-base-media/moov/moov.js +0 -27
- package/dist/boxes/iso-base-media/parse-boxes.d.ts +0 -15
- package/dist/boxes/iso-base-media/parse-boxes.js +0 -129
- package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +0 -12
- package/dist/boxes/iso-base-media/parse-mdat-partially.js +0 -33
- package/dist/boxes/iso-base-media/process-box.d.ts +0 -15
- package/dist/boxes/iso-base-media/stsd/mebx.js +0 -32
- package/dist/boxes/iso-base-media/trak/trak.d.ts +0 -19
- package/dist/boxes/iso-base-media/trak/trak.js +0 -27
- 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 -8
- 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 -19
- package/dist/boxes/riff/expect-riff-box.js +0 -50
- package/dist/boxes/riff/parse-box.js +0 -35
- package/dist/boxes/riff/parse-fmt-box.d.ts +0 -7
- package/dist/boxes/riff/parse-fmt-box.js +0 -33
- package/dist/boxes/riff/parse-list-box.d.ts +0 -10
- package/dist/boxes/riff/parse-list-box.js +0 -31
- package/dist/boxes/riff/parse-movi.d.ts +0 -17
- package/dist/boxes/riff/parse-riff-body.d.ts +0 -11
- package/dist/boxes/riff/parse-riff-body.js +0 -105
- package/dist/boxes/riff/parse-riff-box.d.ts +0 -12
- package/dist/boxes/riff/parse-strf.d.ts +0 -7
- package/dist/boxes/transport-stream/get-tracks.d.ts +0 -5
- package/dist/boxes/transport-stream/parse-packet.d.ts +0 -13
- package/dist/boxes/transport-stream/parse-stream-packet.d.ts +0 -15
- package/dist/boxes/transport-stream/parse-transport-stream.d.ts +0 -13
- package/dist/boxes/webm/parse-webm-header.js +0 -37
- package/dist/boxes/webm/segments/parse-children.d.ts +0 -23
- package/dist/boxes/webm/segments/parse-children.js +0 -144
- package/dist/boxes/webm/segments.d.ts +0 -15
- package/dist/boxes/webm/segments.js +0 -161
- package/dist/continue-mdat-routine.d.ts +0 -17
- package/dist/continue-mdat-routine.js +0 -92
- package/dist/parse-video.d.ts +0 -28
- package/dist/parse-video.js +0 -130
- /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-actual-number-of-channels.js +0 -0
- /package/dist/{boxes → containers}/iso-base-media/get-keyframes.d.ts +0 -0
- /package/dist/{boxes → containers}/iso-base-media/get-keyframes.js +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/get-video-codec-from-iso-track.js +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-duration.js +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-strh.d.ts +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}/transport-stream/adts-header.d.ts +0 -0
- /package/dist/{boxes → containers}/transport-stream/adts-header.js +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/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/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}/need-samples-for-fields.d.ts +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initVideo = void 0;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
const log_1 = require("./log");
|
|
6
|
+
const initVideo = ({ state, mimeType, name, contentLength, }) => {
|
|
7
|
+
const fileType = state.iterator.detectFileType();
|
|
8
|
+
if (fileType.type === 'riff') {
|
|
9
|
+
log_1.Log.verbose(state.logLevel, 'Detected RIFF container');
|
|
10
|
+
state.structure.setStructure({
|
|
11
|
+
type: 'riff',
|
|
12
|
+
boxes: [],
|
|
13
|
+
});
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (fileType.type === 'iso-base-media') {
|
|
17
|
+
log_1.Log.verbose(state.logLevel, 'Detected ISO Base Media container');
|
|
18
|
+
state.structure.setStructure({
|
|
19
|
+
type: 'iso-base-media',
|
|
20
|
+
boxes: [],
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (fileType.type === 'webm') {
|
|
25
|
+
log_1.Log.verbose(state.logLevel, 'Detected Matroska container');
|
|
26
|
+
state.structure.setStructure({
|
|
27
|
+
boxes: [],
|
|
28
|
+
type: 'matroska',
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (fileType.type === 'transport-stream') {
|
|
33
|
+
log_1.Log.verbose(state.logLevel, 'Detected MPEG-2 Transport Stream');
|
|
34
|
+
state.structure.setStructure({
|
|
35
|
+
boxes: [],
|
|
36
|
+
type: 'transport-stream',
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (fileType.type === 'mp3') {
|
|
41
|
+
log_1.Log.verbose(state.logLevel, 'Detected MP3');
|
|
42
|
+
const structure = {
|
|
43
|
+
boxes: [],
|
|
44
|
+
type: 'mp3',
|
|
45
|
+
};
|
|
46
|
+
state.structure.setStructure(structure);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (fileType.type === 'wav') {
|
|
50
|
+
log_1.Log.verbose(state.logLevel, 'Detected WAV');
|
|
51
|
+
const structure = {
|
|
52
|
+
boxes: [],
|
|
53
|
+
type: 'wav',
|
|
54
|
+
};
|
|
55
|
+
state.structure.setStructure(structure);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (fileType.type === 'flac') {
|
|
59
|
+
log_1.Log.verbose(state.logLevel, 'Detected FLAC');
|
|
60
|
+
const structure = {
|
|
61
|
+
boxes: [],
|
|
62
|
+
type: 'flac',
|
|
63
|
+
};
|
|
64
|
+
state.structure.setStructure(structure);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (fileType.type === 'aac') {
|
|
68
|
+
log_1.Log.verbose(state.logLevel, 'Detected AAC');
|
|
69
|
+
state.structure.setStructure({
|
|
70
|
+
type: 'aac',
|
|
71
|
+
boxes: [],
|
|
72
|
+
});
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (fileType.type === 'gif') {
|
|
76
|
+
return Promise.reject(new errors_1.IsAGifError({
|
|
77
|
+
message: 'GIF files are not yet supported',
|
|
78
|
+
mimeType,
|
|
79
|
+
sizeInBytes: contentLength,
|
|
80
|
+
fileName: name,
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
if (fileType.type === 'pdf') {
|
|
84
|
+
return Promise.reject(new errors_1.IsAPdfError({
|
|
85
|
+
message: 'GIF files are not supported',
|
|
86
|
+
mimeType,
|
|
87
|
+
sizeInBytes: contentLength,
|
|
88
|
+
fileName: name,
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
if (fileType.type === 'bmp' ||
|
|
92
|
+
fileType.type === 'jpeg' ||
|
|
93
|
+
fileType.type === 'png' ||
|
|
94
|
+
fileType.type === 'webp') {
|
|
95
|
+
return Promise.reject(new errors_1.IsAnImageError({
|
|
96
|
+
message: 'Image files are not supported',
|
|
97
|
+
imageType: fileType.type,
|
|
98
|
+
dimensions: fileType.dimensions,
|
|
99
|
+
mimeType,
|
|
100
|
+
sizeInBytes: contentLength,
|
|
101
|
+
fileName: name,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
if (fileType.type === 'unknown') {
|
|
105
|
+
return Promise.reject(new errors_1.IsAnUnsupportedFileTypeError({
|
|
106
|
+
message: 'Unknown file format',
|
|
107
|
+
mimeType,
|
|
108
|
+
sizeInBytes: contentLength,
|
|
109
|
+
fileName: name,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
return Promise.reject(new Error('Unknown video format ' + fileType));
|
|
113
|
+
};
|
|
114
|
+
exports.initVideo = initVideo;
|
|
@@ -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;
|
|
@@ -1,11 +1,14 @@
|
|
|
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
10
|
const getMetadata = (structure) => {
|
|
11
|
+
var _a, _b;
|
|
9
12
|
if (structure.type === 'matroska') {
|
|
10
13
|
return (0, metadata_from_matroska_1.getMetadataFromMatroska)(structure);
|
|
11
14
|
}
|
|
@@ -22,6 +25,15 @@ const getMetadata = (structure) => {
|
|
|
22
25
|
}
|
|
23
26
|
return tags;
|
|
24
27
|
}
|
|
28
|
+
if (structure.type === 'wav') {
|
|
29
|
+
return (_a = (0, get_metadata_from_wav_1.getMetadataFromWav)(structure)) !== null && _a !== void 0 ? _a : [];
|
|
30
|
+
}
|
|
31
|
+
if (structure.type === 'aac') {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
if (structure.type === 'flac') {
|
|
35
|
+
return (_b = (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure)) !== null && _b !== void 0 ? _b : [];
|
|
36
|
+
}
|
|
25
37
|
return (0, metadata_from_iso_1.getMetadataFromIsoBase)(structure);
|
|
26
38
|
};
|
|
27
39
|
exports.getMetadata = getMetadata;
|
|
@@ -29,6 +41,9 @@ const hasMetadata = (structure) => {
|
|
|
29
41
|
if (structure.type === 'mp3') {
|
|
30
42
|
return (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure) !== null;
|
|
31
43
|
}
|
|
44
|
+
if (structure.type === 'wav') {
|
|
45
|
+
return (0, get_metadata_from_wav_1.getMetadataFromWav)(structure) !== null;
|
|
46
|
+
}
|
|
32
47
|
return false;
|
|
33
48
|
};
|
|
34
49
|
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 { IsoBaseMediaStructure } from '../parse-result';
|
|
2
3
|
import type { MetadataEntry } from './get-metadata';
|
|
3
4
|
export declare const parseIsoMetaBox: (meta: RegularBox, trackId: number | null) => MetadataEntry[];
|
|
4
5
|
export declare const getMetadataFromIsoBase: (isoBase: IsoBaseMediaStructure) => 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
|
*
|
|
@@ -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
|
@@ -32,7 +32,11 @@ export type ParseMediaFields = {
|
|
|
32
32
|
keyframes: boolean;
|
|
33
33
|
slowKeyframes: boolean;
|
|
34
34
|
slowNumberOfFrames: boolean;
|
|
35
|
+
slowVideoBitrate: boolean;
|
|
36
|
+
slowAudioBitrate: boolean;
|
|
35
37
|
images: boolean;
|
|
38
|
+
sampleRate: boolean;
|
|
39
|
+
numberOfAudioChannels: boolean;
|
|
36
40
|
};
|
|
37
41
|
export type AllParseMediaFields = {
|
|
38
42
|
dimensions: true;
|
|
@@ -58,6 +62,10 @@ export type AllParseMediaFields = {
|
|
|
58
62
|
keyframes: true;
|
|
59
63
|
slowKeyframes: true;
|
|
60
64
|
images: true;
|
|
65
|
+
sampleRate: true;
|
|
66
|
+
numberOfAudioChannels: true;
|
|
67
|
+
slowVideoBitrate: true;
|
|
68
|
+
slowAudioBitrate: true;
|
|
61
69
|
};
|
|
62
70
|
export type AllOptions<Fields extends ParseMediaFields> = {
|
|
63
71
|
dimensions: Fields['dimensions'];
|
|
@@ -83,13 +91,17 @@ export type AllOptions<Fields extends ParseMediaFields> = {
|
|
|
83
91
|
slowKeyframes: Fields['slowKeyframes'];
|
|
84
92
|
slowNumberOfFrames: Fields['slowNumberOfFrames'];
|
|
85
93
|
images: Fields['images'];
|
|
94
|
+
sampleRate: Fields['sampleRate'];
|
|
95
|
+
numberOfAudioChannels: Fields['numberOfAudioChannels'];
|
|
96
|
+
slowVideoBitrate: Fields['slowVideoBitrate'];
|
|
97
|
+
slowAudioBitrate: Fields['slowAudioBitrate'];
|
|
86
98
|
};
|
|
87
99
|
export type Options<Fields extends ParseMediaFields> = Partial<AllOptions<Fields>>;
|
|
88
100
|
export type TracksField = {
|
|
89
101
|
videoTracks: VideoTrack[];
|
|
90
102
|
audioTracks: AudioTrack[];
|
|
91
103
|
};
|
|
92
|
-
export type
|
|
104
|
+
export type MediaParserContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3' | 'aac' | 'flac' | 'wav';
|
|
93
105
|
export type MediaParserKeyframe = {
|
|
94
106
|
positionInBytes: number;
|
|
95
107
|
sizeInBytes: number;
|
|
@@ -97,31 +109,36 @@ export type MediaParserKeyframe = {
|
|
|
97
109
|
decodingTimeInSeconds: number;
|
|
98
110
|
trackId: number;
|
|
99
111
|
};
|
|
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
|
-
|
|
112
|
+
export type MandatoryParseMediaCallbacks = {
|
|
113
|
+
onDimensions: null | ((dimensions: Dimensions | null) => void);
|
|
114
|
+
onDurationInSeconds: null | ((durationInSeconds: number | null) => void);
|
|
115
|
+
onSlowDurationInSeconds: null | ((durationInSeconds: number) => void);
|
|
116
|
+
onSlowFps: null | ((fps: number) => void);
|
|
117
|
+
onStructure: null | ((structure: Structure) => void);
|
|
118
|
+
onFps: null | ((fps: number | null) => void);
|
|
119
|
+
onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => void);
|
|
120
|
+
onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => void);
|
|
121
|
+
onTracks: null | ((tracks: TracksField) => void);
|
|
122
|
+
onRotation: null | ((rotation: number | null) => void);
|
|
123
|
+
onUnrotatedDimensions: null | ((dimensions: Dimensions | null) => void);
|
|
124
|
+
onInternalStats: null | ((internalStats: InternalStats) => void);
|
|
125
|
+
onSize: null | ((size: number | null) => void);
|
|
126
|
+
onName: null | ((name: string) => void);
|
|
127
|
+
onContainer: null | ((container: MediaParserContainer) => void);
|
|
128
|
+
onIsHdr: null | ((isHdr: boolean) => void);
|
|
129
|
+
onMetadata: null | ((metadata: MetadataEntry[]) => void);
|
|
130
|
+
onLocation: null | ((location: MediaParserLocation | null) => void);
|
|
131
|
+
onMimeType: null | ((mimeType: string | null) => void);
|
|
132
|
+
onKeyframes: null | ((keyframes: MediaParserKeyframe[] | null) => void);
|
|
133
|
+
onSlowKeyframes: null | ((keyframes: MediaParserKeyframe[]) => void);
|
|
134
|
+
onSlowNumberOfFrames: null | ((samples: number) => void);
|
|
135
|
+
onImages: null | ((images: MediaParserEmbeddedImage[]) => void);
|
|
136
|
+
onSampleRate: null | ((sampleRate: number | null) => void);
|
|
137
|
+
onNumberOfAudioChannels: null | ((numberOfChannels: number | null) => void);
|
|
138
|
+
onSlowVideoBitrate: null | ((videoBitrate: number | null) => void);
|
|
139
|
+
onSlowAudioBitrate: null | ((audioBitrate: number | null) => void);
|
|
140
|
+
};
|
|
141
|
+
export type ParseMediaCallbacks = Partial<MandatoryParseMediaCallbacks>;
|
|
125
142
|
export interface ParseMediaData {
|
|
126
143
|
dimensions: Dimensions | null;
|
|
127
144
|
durationInSeconds: number | null;
|
|
@@ -140,33 +157,42 @@ export interface ParseMediaData {
|
|
|
140
157
|
name: string;
|
|
141
158
|
metadata: MetadataEntry[];
|
|
142
159
|
location: MediaParserLocation | null;
|
|
143
|
-
container:
|
|
160
|
+
container: MediaParserContainer;
|
|
144
161
|
mimeType: string | null;
|
|
145
162
|
keyframes: MediaParserKeyframe[] | null;
|
|
146
163
|
slowKeyframes: MediaParserKeyframe[];
|
|
147
164
|
slowNumberOfFrames: number;
|
|
148
165
|
images: MediaParserEmbeddedImage[];
|
|
166
|
+
sampleRate: number | null;
|
|
167
|
+
numberOfAudioChannels: number | null;
|
|
168
|
+
slowVideoBitrate: number | null;
|
|
169
|
+
slowAudioBitrate: number | null;
|
|
149
170
|
}
|
|
150
171
|
export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {
|
|
151
172
|
[K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
|
|
152
173
|
};
|
|
153
|
-
export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
|
|
154
|
-
fields?: F;
|
|
155
|
-
} & ParseMediaCallbacks;
|
|
156
174
|
export type ParseMediaProgress = {
|
|
157
175
|
bytes: number;
|
|
158
176
|
percentage: number | null;
|
|
159
177
|
totalBytes: number | null;
|
|
160
178
|
};
|
|
161
179
|
export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
|
|
180
|
+
type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
|
|
181
|
+
reader: ReaderInterface;
|
|
182
|
+
onAudioTrack: OnAudioTrack | null;
|
|
183
|
+
onVideoTrack: OnVideoTrack | null;
|
|
184
|
+
signal: AbortSignal | undefined;
|
|
185
|
+
logLevel: LogLevel;
|
|
186
|
+
onParseProgress: ParseMediaOnProgress | null;
|
|
187
|
+
progressIntervalInMs: number | null;
|
|
188
|
+
fields: F | null;
|
|
189
|
+
} & MandatoryParseMediaCallbacks;
|
|
190
|
+
export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
191
|
+
src: string | Blob;
|
|
192
|
+
} & OptionalParseMediaParams<F>;
|
|
162
193
|
export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
163
194
|
src: string | Blob;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
onVideoTrack?: OnVideoTrack;
|
|
167
|
-
signal?: AbortSignal;
|
|
168
|
-
logLevel?: LogLevel;
|
|
169
|
-
onParseProgress?: ParseMediaOnProgress;
|
|
170
|
-
progressIntervalInMs?: number;
|
|
171
|
-
} & ParseMediaDynamicOptions<F>;
|
|
195
|
+
} & Partial<OptionalParseMediaParams<F>>;
|
|
196
|
+
export type InternalParseMedia = <F extends Options<ParseMediaFields>>(options: InternalParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
172
197
|
export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
198
|
+
export {};
|
package/dist/parse-media.js
CHANGED
|
@@ -6,11 +6,12 @@ const emit_available_info_1 = require("./emit-available-info");
|
|
|
6
6
|
const get_fields_from_callbacks_1 = require("./get-fields-from-callbacks");
|
|
7
7
|
const has_all_info_1 = require("./has-all-info");
|
|
8
8
|
const log_1 = require("./log");
|
|
9
|
-
const
|
|
9
|
+
const perform_seek_1 = require("./perform-seek");
|
|
10
10
|
const from_fetch_1 = require("./readers/from-fetch");
|
|
11
|
+
const run_parse_iteration_1 = require("./run-parse-iteration");
|
|
11
12
|
const parser_state_1 = require("./state/parser-state");
|
|
12
13
|
const throttled_progress_1 = require("./throttled-progress");
|
|
13
|
-
const
|
|
14
|
+
const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue, reader, onAudioTrack, onVideoTrack, signal, logLevel, onParseProgress: onParseProgressDoNotCallDirectly, progressIntervalInMs, ...more }) {
|
|
14
15
|
var _a;
|
|
15
16
|
let parseResult = null;
|
|
16
17
|
const fieldsInReturnValue = _fieldsInReturnValue !== null && _fieldsInReturnValue !== void 0 ? _fieldsInReturnValue : {};
|
|
@@ -18,24 +19,40 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
18
19
|
fields: fieldsInReturnValue,
|
|
19
20
|
callbacks: more,
|
|
20
21
|
});
|
|
21
|
-
const { reader, contentLength, name, contentType, supportsContentRange: readerSupportsContentRange, } = await
|
|
22
|
+
const { reader: readerInstance, contentLength, name, contentType, supportsContentRange: readerSupportsContentRange, } = await reader.read(src, null, signal);
|
|
22
23
|
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array([]), contentLength !== null && contentLength !== void 0 ? contentLength : 1000000000);
|
|
24
|
+
if (contentLength === null) {
|
|
25
|
+
throw new Error('Media was passed with no content length. This is currently not supported. Ensure the media has a "Content-Length" HTTP header.');
|
|
26
|
+
}
|
|
23
27
|
const supportsContentRange = readerSupportsContentRange &&
|
|
24
28
|
!(typeof process !== 'undefined' &&
|
|
25
29
|
typeof process.env !== 'undefined' &&
|
|
26
30
|
process.env.DISABLE_CONTENT_RANGE === 'true');
|
|
31
|
+
const hasAudioTrackHandlers = Boolean(onAudioTrack);
|
|
32
|
+
const hasVideoTrackHandlers = Boolean(onVideoTrack);
|
|
33
|
+
if (!hasAudioTrackHandlers &&
|
|
34
|
+
!hasVideoTrackHandlers &&
|
|
35
|
+
Object.values(fields).every((v) => !v)) {
|
|
36
|
+
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.'));
|
|
37
|
+
}
|
|
38
|
+
let timeIterating = 0;
|
|
39
|
+
let timeReadingData = 0;
|
|
40
|
+
let timeSeeking = 0;
|
|
41
|
+
let timeCheckingIfDone = 0;
|
|
42
|
+
let timeFreeingData = 0;
|
|
27
43
|
const state = (0, parser_state_1.makeParserState)({
|
|
28
|
-
hasAudioTrackHandlers
|
|
29
|
-
hasVideoTrackHandlers
|
|
44
|
+
hasAudioTrackHandlers,
|
|
45
|
+
hasVideoTrackHandlers,
|
|
30
46
|
signal,
|
|
31
|
-
|
|
47
|
+
iterator,
|
|
32
48
|
fields,
|
|
33
49
|
onAudioTrack: onAudioTrack !== null && onAudioTrack !== void 0 ? onAudioTrack : null,
|
|
34
50
|
onVideoTrack: onVideoTrack !== null && onVideoTrack !== void 0 ? onVideoTrack : null,
|
|
35
51
|
supportsContentRange,
|
|
36
52
|
contentLength,
|
|
53
|
+
logLevel,
|
|
37
54
|
});
|
|
38
|
-
let currentReader =
|
|
55
|
+
let currentReader = readerInstance;
|
|
39
56
|
const returnValue = {};
|
|
40
57
|
const moreFields = more;
|
|
41
58
|
const throttledState = (0, throttled_progress_1.throttledStateUpdate)({
|
|
@@ -53,7 +70,6 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
53
70
|
hasInfo: availableInfo,
|
|
54
71
|
callbacks: moreFields,
|
|
55
72
|
fieldsInReturnValue,
|
|
56
|
-
parseResult,
|
|
57
73
|
state,
|
|
58
74
|
returnValue,
|
|
59
75
|
contentLength,
|
|
@@ -62,22 +78,28 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
62
78
|
});
|
|
63
79
|
};
|
|
64
80
|
const checkIfDone = () => {
|
|
65
|
-
|
|
81
|
+
const startCheck = Date.now();
|
|
82
|
+
const hasAll = (0, has_all_info_1.hasAllInfo)({
|
|
66
83
|
fields,
|
|
67
84
|
state,
|
|
68
|
-
})
|
|
85
|
+
});
|
|
86
|
+
timeCheckingIfDone += Date.now() - startCheck;
|
|
87
|
+
if (hasAll) {
|
|
69
88
|
log_1.Log.verbose(logLevel, 'Got all info, skipping to the end.');
|
|
70
89
|
if (contentLength !== null) {
|
|
71
90
|
state.increaseSkippedBytes(contentLength - iterator.counter.getOffset());
|
|
72
91
|
}
|
|
73
92
|
return true;
|
|
74
93
|
}
|
|
94
|
+
if (iterator.counter.getOffset() === contentLength) {
|
|
95
|
+
log_1.Log.verbose(logLevel, 'Reached end of file');
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
75
98
|
return false;
|
|
76
99
|
};
|
|
77
100
|
triggerInfoEmit();
|
|
78
|
-
let
|
|
79
|
-
while (!checkIfDone()
|
|
80
|
-
(parseResult === null || parseResult.status === 'incomplete')) {
|
|
101
|
+
let iterationWithThisOffset = 0;
|
|
102
|
+
while (!checkIfDone()) {
|
|
81
103
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
82
104
|
throw new Error('Aborted');
|
|
83
105
|
}
|
|
@@ -87,14 +109,20 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
87
109
|
if (result.value) {
|
|
88
110
|
iterator.addData(result.value);
|
|
89
111
|
}
|
|
112
|
+
return result.done;
|
|
90
113
|
};
|
|
114
|
+
const readStart = Date.now();
|
|
91
115
|
while (iterator.bytesRemaining() < 0) {
|
|
92
|
-
await fetchMoreData();
|
|
116
|
+
const done = await fetchMoreData();
|
|
117
|
+
if (done) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
93
120
|
}
|
|
94
121
|
const hasBigBuffer = iterator.bytesRemaining() > 100000;
|
|
95
|
-
if (
|
|
122
|
+
if (iterationWithThisOffset > 0 || !hasBigBuffer) {
|
|
96
123
|
await fetchMoreData();
|
|
97
124
|
}
|
|
125
|
+
timeReadingData += Date.now() - readStart;
|
|
98
126
|
(_a = throttledState.update) === null || _a === void 0 ? void 0 : _a.call(throttledState, () => ({
|
|
99
127
|
bytes: iterator.counter.getOffset(),
|
|
100
128
|
percentage: contentLength
|
|
@@ -103,40 +131,49 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
103
131
|
totalBytes: contentLength,
|
|
104
132
|
}));
|
|
105
133
|
triggerInfoEmit();
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
parseResult = await parseResult.continueParsing();
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
parseResult = await (0, parse_video_1.parseVideo)({
|
|
112
|
-
iterator,
|
|
113
|
-
state,
|
|
114
|
-
signal: signal !== null && signal !== void 0 ? signal : null,
|
|
115
|
-
logLevel,
|
|
116
|
-
fields,
|
|
117
|
-
mimeType: contentType,
|
|
118
|
-
contentLength,
|
|
119
|
-
name,
|
|
120
|
-
});
|
|
134
|
+
if (iterationWithThisOffset > 300) {
|
|
135
|
+
throw new Error('Infinite loop detected. The parser is not progressing. This is likely a bug in the parser.');
|
|
121
136
|
}
|
|
122
|
-
|
|
137
|
+
log_1.Log.trace(logLevel, `Continuing parsing of file, currently at position ${iterator.counter.getOffset()}/${contentLength} (0x${iterator.counter.getOffset().toString(16)})`);
|
|
138
|
+
const start = Date.now();
|
|
139
|
+
parseResult = await (0, run_parse_iteration_1.runParseIteration)({
|
|
140
|
+
state,
|
|
141
|
+
mimeType: contentType,
|
|
142
|
+
contentLength,
|
|
143
|
+
name,
|
|
144
|
+
});
|
|
145
|
+
timeIterating += Date.now() - start;
|
|
146
|
+
if (parseResult.skipTo !== null) {
|
|
123
147
|
state.increaseSkippedBytes(parseResult.skipTo - iterator.counter.getOffset());
|
|
124
148
|
}
|
|
125
|
-
if (parseResult.
|
|
126
|
-
if (!supportsContentRange) {
|
|
127
|
-
throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
|
|
128
|
-
}
|
|
149
|
+
if (parseResult.skipTo !== null) {
|
|
129
150
|
if (parseResult.skipTo === contentLength) {
|
|
130
151
|
log_1.Log.verbose(logLevel, 'Skipped to end of file, not fetching.');
|
|
131
152
|
break;
|
|
132
153
|
}
|
|
133
|
-
|
|
134
|
-
currentReader.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
154
|
+
const seekStart = Date.now();
|
|
155
|
+
currentReader = await (0, perform_seek_1.performSeek)({
|
|
156
|
+
iterator,
|
|
157
|
+
seekTo: parseResult.skipTo,
|
|
158
|
+
supportsContentRange,
|
|
159
|
+
currentReader,
|
|
160
|
+
logLevel,
|
|
161
|
+
readerInterface: reader,
|
|
162
|
+
signal,
|
|
163
|
+
src,
|
|
164
|
+
});
|
|
165
|
+
timeSeeking += Date.now() - seekStart;
|
|
166
|
+
}
|
|
167
|
+
const didProgress = iterator.counter.getOffset() > offsetBefore;
|
|
168
|
+
if (!didProgress) {
|
|
169
|
+
iterationWithThisOffset++;
|
|
138
170
|
}
|
|
139
|
-
|
|
171
|
+
const timeFreeStart = Date.now();
|
|
172
|
+
const bytesRemoved = iterator.removeBytesRead(false);
|
|
173
|
+
if (bytesRemoved) {
|
|
174
|
+
log_1.Log.verbose(logLevel, `Freed ${bytesRemoved} bytes`);
|
|
175
|
+
}
|
|
176
|
+
timeFreeingData += Date.now() - timeFreeStart;
|
|
140
177
|
}
|
|
141
178
|
log_1.Log.verbose(logLevel, 'Finished parsing file');
|
|
142
179
|
// Force assign
|
|
@@ -149,16 +186,61 @@ const parseMedia = async function ({ src, fields: _fieldsInReturnValue, reader:
|
|
|
149
186
|
}, {}),
|
|
150
187
|
callbacks: moreFields,
|
|
151
188
|
fieldsInReturnValue,
|
|
152
|
-
parseResult,
|
|
153
189
|
state,
|
|
154
190
|
returnValue,
|
|
155
191
|
contentLength,
|
|
156
192
|
mimeType: contentType,
|
|
157
193
|
name,
|
|
158
194
|
});
|
|
195
|
+
log_1.Log.verbose(logLevel, `Time iterating over file: ${timeIterating}ms`);
|
|
196
|
+
log_1.Log.verbose(logLevel, `Time fetching data: ${timeReadingData}ms`);
|
|
197
|
+
log_1.Log.verbose(logLevel, `Time seeking: ${timeSeeking}ms`);
|
|
198
|
+
log_1.Log.verbose(logLevel, `Time checking if done: ${timeCheckingIfDone}ms`);
|
|
199
|
+
log_1.Log.verbose(logLevel, `Time freeing data: ${timeFreeingData}ms`);
|
|
159
200
|
currentReader.abort();
|
|
160
201
|
iterator === null || iterator === void 0 ? void 0 : iterator.destroy();
|
|
161
|
-
state.callbacks.tracks.ensureHasTracksAtEnd();
|
|
202
|
+
state.callbacks.tracks.ensureHasTracksAtEnd(fields);
|
|
162
203
|
return returnValue;
|
|
163
204
|
};
|
|
205
|
+
const parseMedia = (options) => {
|
|
206
|
+
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;
|
|
207
|
+
return internalParseMedia({
|
|
208
|
+
fields: (_a = options.fields) !== null && _a !== void 0 ? _a : null,
|
|
209
|
+
logLevel: (_b = options.logLevel) !== null && _b !== void 0 ? _b : 'info',
|
|
210
|
+
onAudioCodec: (_c = options.onAudioCodec) !== null && _c !== void 0 ? _c : null,
|
|
211
|
+
onAudioTrack: (_d = options.onAudioTrack) !== null && _d !== void 0 ? _d : null,
|
|
212
|
+
onContainer: (_e = options.onContainer) !== null && _e !== void 0 ? _e : null,
|
|
213
|
+
onDimensions: (_f = options.onDimensions) !== null && _f !== void 0 ? _f : null,
|
|
214
|
+
onDurationInSeconds: (_g = options.onDurationInSeconds) !== null && _g !== void 0 ? _g : null,
|
|
215
|
+
onFps: (_h = options.onFps) !== null && _h !== void 0 ? _h : null,
|
|
216
|
+
onImages: (_j = options.onImages) !== null && _j !== void 0 ? _j : null,
|
|
217
|
+
onInternalStats: (_k = options.onInternalStats) !== null && _k !== void 0 ? _k : null,
|
|
218
|
+
onIsHdr: (_l = options.onIsHdr) !== null && _l !== void 0 ? _l : null,
|
|
219
|
+
onKeyframes: (_m = options.onKeyframes) !== null && _m !== void 0 ? _m : null,
|
|
220
|
+
onLocation: (_o = options.onLocation) !== null && _o !== void 0 ? _o : null,
|
|
221
|
+
onMetadata: (_p = options.onMetadata) !== null && _p !== void 0 ? _p : null,
|
|
222
|
+
onMimeType: (_q = options.onMimeType) !== null && _q !== void 0 ? _q : null,
|
|
223
|
+
onName: (_r = options.onName) !== null && _r !== void 0 ? _r : null,
|
|
224
|
+
onNumberOfAudioChannels: (_s = options.onNumberOfAudioChannels) !== null && _s !== void 0 ? _s : null,
|
|
225
|
+
onParseProgress: (_t = options.onParseProgress) !== null && _t !== void 0 ? _t : null,
|
|
226
|
+
onRotation: (_u = options.onRotation) !== null && _u !== void 0 ? _u : null,
|
|
227
|
+
onSampleRate: (_v = options.onSampleRate) !== null && _v !== void 0 ? _v : null,
|
|
228
|
+
onSize: (_w = options.onSize) !== null && _w !== void 0 ? _w : null,
|
|
229
|
+
onSlowAudioBitrate: (_x = options.onSlowAudioBitrate) !== null && _x !== void 0 ? _x : null,
|
|
230
|
+
onSlowDurationInSeconds: (_y = options.onSlowDurationInSeconds) !== null && _y !== void 0 ? _y : null,
|
|
231
|
+
onSlowFps: (_z = options.onSlowFps) !== null && _z !== void 0 ? _z : null,
|
|
232
|
+
onSlowKeyframes: (_0 = options.onSlowKeyframes) !== null && _0 !== void 0 ? _0 : null,
|
|
233
|
+
onSlowNumberOfFrames: (_1 = options.onSlowNumberOfFrames) !== null && _1 !== void 0 ? _1 : null,
|
|
234
|
+
onSlowVideoBitrate: (_2 = options.onSlowVideoBitrate) !== null && _2 !== void 0 ? _2 : null,
|
|
235
|
+
onStructure: (_3 = options.onStructure) !== null && _3 !== void 0 ? _3 : null,
|
|
236
|
+
onTracks: (_4 = options.onTracks) !== null && _4 !== void 0 ? _4 : null,
|
|
237
|
+
onUnrotatedDimensions: (_5 = options.onUnrotatedDimensions) !== null && _5 !== void 0 ? _5 : null,
|
|
238
|
+
onVideoCodec: (_6 = options.onVideoCodec) !== null && _6 !== void 0 ? _6 : null,
|
|
239
|
+
onVideoTrack: (_7 = options.onVideoTrack) !== null && _7 !== void 0 ? _7 : null,
|
|
240
|
+
progressIntervalInMs: (_8 = options.progressIntervalInMs) !== null && _8 !== void 0 ? _8 : null,
|
|
241
|
+
reader: (_9 = options.reader) !== null && _9 !== void 0 ? _9 : from_fetch_1.fetchReader,
|
|
242
|
+
signal: (_10 = options.signal) !== null && _10 !== void 0 ? _10 : undefined,
|
|
243
|
+
src: options.src,
|
|
244
|
+
});
|
|
245
|
+
};
|
|
164
246
|
exports.parseMedia = parseMedia;
|