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