@remotion/media-parser 4.0.255 → 4.0.256
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-new-matroska-tracks.d.ts +8 -0
- package/dist/add-new-matroska-tracks.js +14 -0
- package/dist/boxes/avc/parse-avc.d.ts +18 -0
- package/dist/boxes/avc/parse-avc.js +96 -0
- package/dist/boxes/iso-base-media/base-type.d.ts +4 -0
- package/dist/boxes/iso-base-media/base-type.js +2 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +29 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +82 -0
- package/dist/boxes/iso-base-media/esds/esds.d.ts +15 -0
- package/dist/boxes/iso-base-media/esds/esds.js +27 -0
- package/dist/boxes/iso-base-media/ftyp.d.ts +13 -0
- package/dist/boxes/iso-base-media/ftyp.js +22 -0
- package/dist/boxes/iso-base-media/get-actual-number-of-channels.d.ts +13 -0
- package/dist/boxes/iso-base-media/get-actual-number-of-channels.js +22 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.d.ts +4 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +54 -0
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +107 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +25 -0
- package/dist/boxes/iso-base-media/mdat/mdat.js +122 -0
- package/dist/boxes/iso-base-media/mdhd.d.ts +16 -0
- package/dist/boxes/iso-base-media/mdhd.js +32 -0
- package/dist/boxes/iso-base-media/meta/hdlr.d.ts +12 -0
- package/dist/boxes/iso-base-media/meta/hdlr.js +33 -0
- package/dist/boxes/iso-base-media/meta/ilst.d.ts +28 -0
- package/dist/boxes/iso-base-media/meta/ilst.js +86 -0
- package/dist/boxes/iso-base-media/moov/moov.d.ts +19 -0
- package/dist/boxes/iso-base-media/moov/moov.js +27 -0
- package/dist/boxes/iso-base-media/mvhd.d.ts +30 -0
- package/dist/boxes/iso-base-media/mvhd.js +65 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
- package/dist/boxes/iso-base-media/process-box.d.ts +34 -0
- package/dist/boxes/iso-base-media/process-box.js +710 -0
- package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
- package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +47 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +34 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
- package/dist/boxes/iso-base-media/stsd/keys.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/keys.js +35 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/mebx.js +32 -0
- package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
- package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +68 -0
- package/dist/boxes/iso-base-media/stsd/samples.js +320 -0
- package/dist/boxes/iso-base-media/stsd/stco.d.ts +15 -0
- package/dist/boxes/iso-base-media/stsd/stco.js +30 -0
- package/dist/boxes/iso-base-media/stsd/stsc.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/stsc.js +34 -0
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +18 -0
- package/dist/boxes/iso-base-media/stsd/stsd.js +33 -0
- package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
- package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
- package/dist/boxes/iso-base-media/stsd/stsz.d.ts +21 -0
- package/dist/boxes/iso-base-media/stsd/stsz.js +44 -0
- package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
- package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
- package/dist/boxes/iso-base-media/tfdt.d.ts +12 -0
- package/dist/boxes/iso-base-media/tfdt.js +20 -0
- package/dist/boxes/iso-base-media/tfhd.d.ts +16 -0
- package/dist/boxes/iso-base-media/tfhd.js +41 -0
- package/dist/boxes/iso-base-media/tkhd.d.ts +25 -0
- package/dist/boxes/iso-base-media/tkhd.js +87 -0
- package/dist/boxes/iso-base-media/to-date.d.ts +2 -0
- package/dist/boxes/iso-base-media/to-date.js +19 -0
- package/dist/boxes/iso-base-media/trak/trak.d.ts +19 -0
- package/dist/boxes/iso-base-media/trak/trak.js +27 -0
- package/dist/boxes/iso-base-media/traversal.d.ts +39 -0
- package/dist/boxes/iso-base-media/traversal.js +201 -0
- package/dist/boxes/iso-base-media/trun.d.ts +21 -0
- package/dist/boxes/iso-base-media/trun.js +44 -0
- package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
- package/dist/boxes/iso-base-media/void-box.js +2 -0
- package/dist/boxes/riff/expect-riff-box.d.ts +17 -0
- package/dist/boxes/riff/expect-riff-box.js +49 -0
- package/dist/boxes/riff/get-tracks-from-avi.d.ts +22 -0
- package/dist/boxes/riff/get-tracks-from-avi.js +114 -0
- package/dist/boxes/riff/is-movi.d.ts +2 -0
- package/dist/boxes/riff/is-movi.js +12 -0
- package/dist/boxes/riff/parse-avih.d.ts +6 -0
- package/dist/boxes/riff/parse-avih.js +32 -0
- package/dist/boxes/riff/parse-box.d.ts +15 -0
- package/dist/boxes/riff/parse-box.js +146 -0
- package/dist/boxes/riff/parse-fmt-box.d.ts +7 -0
- package/dist/boxes/riff/parse-fmt-box.js +33 -0
- package/dist/boxes/riff/parse-isft.d.ts +6 -0
- package/dist/boxes/riff/parse-isft.js +17 -0
- package/dist/boxes/riff/parse-list-box.d.ts +8 -0
- package/dist/boxes/riff/parse-list-box.js +30 -0
- package/dist/boxes/riff/parse-movi.d.ts +17 -0
- package/dist/boxes/riff/parse-movi.js +133 -0
- package/dist/boxes/riff/parse-riff-box.d.ts +10 -0
- package/dist/boxes/riff/parse-riff-box.js +37 -0
- package/dist/boxes/riff/parse-strf.d.ts +7 -0
- package/dist/boxes/riff/parse-strf.js +67 -0
- package/dist/boxes/riff/parse-strh.d.ts +6 -0
- package/dist/boxes/riff/parse-strh.js +46 -0
- package/dist/boxes/riff/riff-box.d.ts +85 -0
- package/dist/boxes/riff/riff-box.js +2 -0
- package/dist/boxes/riff/timescale.d.ts +1 -0
- package/dist/boxes/riff/timescale.js +4 -0
- package/dist/boxes/riff/traversal.d.ts +8 -0
- package/dist/boxes/riff/traversal.js +36 -0
- package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
- package/dist/boxes/webm/allowed-partial-segments.js +4 -0
- package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
- package/dist/boxes/webm/av1-codec-private.js +95 -0
- package/dist/boxes/webm/color.d.ts +4 -0
- package/dist/boxes/webm/color.js +127 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -0
- package/dist/boxes/webm/ebml.d.ts +2 -0
- package/dist/boxes/webm/ebml.js +94 -0
- package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
- package/dist/boxes/webm/get-ready-tracks.js +29 -0
- package/dist/boxes/webm/get-sample-from-block.d.ts +17 -0
- package/dist/boxes/webm/get-sample-from-block.js +81 -0
- package/dist/boxes/webm/make-header.d.ts +8 -0
- package/dist/boxes/webm/make-header.js +187 -0
- package/dist/boxes/webm/make-track.d.ts +9 -0
- package/dist/boxes/webm/make-track.js +261 -0
- package/dist/boxes/webm/parse-ebml.d.ts +12 -0
- package/dist/boxes/webm/parse-ebml.js +185 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +9 -0
- package/dist/boxes/webm/parse-webm-header.js +36 -0
- package/dist/boxes/webm/segments/all-segments.d.ts +976 -0
- package/dist/boxes/webm/segments/all-segments.js +724 -0
- package/dist/boxes/webm/segments/block-simple-block-flags.d.ts +9 -0
- package/dist/boxes/webm/segments/block-simple-block-flags.js +38 -0
- package/dist/boxes/webm/segments/parse-children.d.ts +23 -0
- package/dist/boxes/webm/segments/parse-children.js +145 -0
- package/dist/boxes/webm/segments/track-entry.d.ts +9 -0
- package/dist/boxes/webm/segments/track-entry.js +24 -0
- package/dist/boxes/webm/segments.d.ts +15 -0
- package/dist/boxes/webm/segments.js +161 -0
- package/dist/boxes/webm/traversal.d.ts +33 -0
- package/dist/boxes/webm/traversal.js +265 -0
- package/dist/containers/flac/get-channel-count.d.ts +1 -1
- package/dist/create/cluster-segment.d.ts +10 -0
- package/dist/create/cluster-segment.js +39 -0
- package/dist/create/cluster.d.ts +19 -0
- package/dist/create/cluster.js +55 -0
- package/dist/create/create-media.d.ts +15 -0
- package/dist/create/create-media.js +165 -0
- package/dist/create/event-emitter.d.ts +31 -0
- package/dist/create/event-emitter.js +25 -0
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
- package/dist/create/iso-base-media/create-colr.d.ts +6 -0
- package/dist/create/iso-base-media/create-colr.js +26 -0
- package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
- package/dist/create/iso-base-media/create-ftyp.js +22 -0
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
- package/dist/create/iso-base-media/create-ilst.js +14 -0
- package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +165 -0
- package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
- package/dist/create/iso-base-media/create-mdia.js +18 -0
- package/dist/create/iso-base-media/create-moov.d.ts +5 -0
- package/dist/create/iso-base-media/create-moov.js +18 -0
- package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
- package/dist/create/iso-base-media/create-mvhd.js +48 -0
- package/dist/create/iso-base-media/create-trak.d.ts +4 -0
- package/dist/create/iso-base-media/create-trak.js +17 -0
- package/dist/create/iso-base-media/create-udta.d.ts +1 -0
- package/dist/create/iso-base-media/create-udta.js +14 -0
- package/dist/create/iso-base-media/create-url.d.ts +1 -0
- package/dist/create/iso-base-media/create-url.js +16 -0
- package/dist/create/iso-base-media/example-stts.d.ts +3 -0
- package/dist/create/iso-base-media/example-stts.js +2797 -0
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-too.js +27 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
- package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
- package/dist/create/iso-base-media/mp4-header.js +48 -0
- package/dist/create/iso-base-media/primitives.d.ts +15 -0
- package/dist/create/iso-base-media/primitives.js +133 -0
- package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
- package/dist/create/iso-base-media/serialize-track.js +63 -0
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
- package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +35 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +48 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
- package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
- package/dist/create/iso-base-media/udta/create-meta.js +20 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
- package/dist/create/make-duration-with-padding.d.ts +1 -0
- package/dist/create/make-duration-with-padding.js +15 -0
- package/dist/create/make-track-info.d.ts +20 -0
- package/dist/create/make-track-info.js +2 -0
- package/dist/create/matroska/cluster-segment.d.ts +10 -0
- package/dist/create/matroska/cluster-segment.js +39 -0
- package/dist/create/matroska/cluster.d.ts +25 -0
- package/dist/create/matroska/cluster.js +77 -0
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/matroska/create-matroska-media.js +187 -0
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/matroska/make-duration-with-padding.js +15 -0
- package/dist/create/matroska/matroska-cues.d.ts +6 -0
- package/dist/create/matroska/matroska-cues.js +49 -0
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/matroska/matroska-header.js +66 -0
- package/dist/create/matroska/matroska-info.d.ts +3 -0
- package/dist/create/matroska/matroska-info.js +33 -0
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/matroska/matroska-seek.js +32 -0
- package/dist/create/matroska/matroska-segment.d.ts +3 -0
- package/dist/create/matroska/matroska-segment.js +13 -0
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/matroska/matroska-trackentry.js +249 -0
- package/dist/create/matroska-cues.d.ts +6 -0
- package/dist/create/matroska-cues.js +49 -0
- package/dist/create/matroska-header.d.ts +1 -0
- package/dist/create/matroska-header.js +66 -0
- package/dist/create/matroska-info.d.ts +3 -0
- package/dist/create/matroska-info.js +33 -0
- package/dist/create/matroska-seek.d.ts +6 -0
- package/dist/create/matroska-seek.js +32 -0
- package/dist/create/matroska-segment.d.ts +3 -0
- package/dist/create/matroska-segment.js +13 -0
- package/dist/create/matroska-trackentry.d.ts +27 -0
- package/dist/create/matroska-trackentry.js +243 -0
- package/dist/create/media-fn.d.ts +33 -0
- package/dist/create/media-fn.js +2 -0
- package/dist/create/progress-tracker.d.ts +7 -0
- package/dist/create/progress-tracker.js +43 -0
- package/dist/create/timescale.d.ts +1 -0
- package/dist/create/timescale.js +4 -0
- package/dist/create/wav/create-wav.d.ts +2 -0
- package/dist/create/wav/create-wav.js +110 -0
- package/dist/create/with-resolvers.d.ts +10 -0
- package/dist/create/with-resolvers.js +28 -0
- package/dist/esm/buffer.mjs +56 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/web-fs.mjs +73 -0
- package/dist/parse-video.d.ts +25 -0
- package/dist/parse-video.js +39 -0
- package/dist/parser-context.d.ts +10 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +22 -0
- package/dist/parser-state.js +132 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/writers/buffer-implementation/writer.d.ts +2 -0
- package/dist/writers/buffer-implementation/writer.js +54 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +7 -0
- package/dist/writers/web-fs.d.ts +3 -0
- package/dist/writers/web-fs.js +74 -0
- package/package.json +3 -3
- package/dist/abort.d.ts +0 -1
- package/dist/abort.js +0 -7
- package/dist/controller.d.ts +0 -17
- package/dist/controller.js +0 -31
- package/dist/parse-and-download-media.d.ts +0 -2
- package/dist/parse-and-download-media.js +0 -57
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasAllTracksFromAvi = exports.getTracksFromAvi = exports.makeAviVideoTrack = exports.makeAviAudioTrack = exports.getNumberOfTracks = exports.TO_BE_OVERRIDDEN_LATER = void 0;
|
|
4
|
+
const add_avc_profile_to_track_1 = require("../../add-avc-profile-to-track");
|
|
5
|
+
const timescale_1 = require("./timescale");
|
|
6
|
+
const traversal_1 = require("./traversal");
|
|
7
|
+
exports.TO_BE_OVERRIDDEN_LATER = 'to-be-overriden-later';
|
|
8
|
+
const getNumberOfTracks = (structure) => {
|
|
9
|
+
const avihBox = (0, traversal_1.getAvihBox)(structure);
|
|
10
|
+
if (avihBox) {
|
|
11
|
+
return avihBox.streams;
|
|
12
|
+
}
|
|
13
|
+
throw new Error('No avih box found');
|
|
14
|
+
};
|
|
15
|
+
exports.getNumberOfTracks = getNumberOfTracks;
|
|
16
|
+
const makeAviAudioTrack = ({ strf, index, }) => {
|
|
17
|
+
// 255 = AAC
|
|
18
|
+
if (strf.formatTag !== 255) {
|
|
19
|
+
throw new Error(`Unsupported audio format ${strf.formatTag}`);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
type: 'audio',
|
|
23
|
+
codec: 'mp4a.40.2', // According to Claude 3.5 Sonnet
|
|
24
|
+
codecPrivate: new Uint8Array([18, 16]),
|
|
25
|
+
codecWithoutConfig: 'aac',
|
|
26
|
+
description: new Uint8Array([18, 16]),
|
|
27
|
+
numberOfChannels: strf.numberOfChannels,
|
|
28
|
+
sampleRate: strf.sampleRate,
|
|
29
|
+
timescale: timescale_1.MEDIA_PARSER_RIFF_TIMESCALE,
|
|
30
|
+
trackId: index,
|
|
31
|
+
trakBox: null,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.makeAviAudioTrack = makeAviAudioTrack;
|
|
35
|
+
const makeAviVideoTrack = ({ strh, strf, index, }) => {
|
|
36
|
+
if (strh.handler !== 'H264') {
|
|
37
|
+
throw new Error(`Unsupported video codec ${strh.handler}`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
codecPrivate: null,
|
|
41
|
+
codec: exports.TO_BE_OVERRIDDEN_LATER,
|
|
42
|
+
codecWithoutConfig: 'h264',
|
|
43
|
+
codedHeight: strf.height,
|
|
44
|
+
codedWidth: strf.width,
|
|
45
|
+
width: strf.width,
|
|
46
|
+
height: strf.height,
|
|
47
|
+
type: 'video',
|
|
48
|
+
displayAspectHeight: strf.height,
|
|
49
|
+
timescale: timescale_1.MEDIA_PARSER_RIFF_TIMESCALE,
|
|
50
|
+
description: undefined,
|
|
51
|
+
trackId: index,
|
|
52
|
+
color: {
|
|
53
|
+
fullRange: null,
|
|
54
|
+
matrixCoefficients: null,
|
|
55
|
+
primaries: null,
|
|
56
|
+
transferCharacteristics: null,
|
|
57
|
+
},
|
|
58
|
+
displayAspectWidth: strf.width,
|
|
59
|
+
trakBox: null,
|
|
60
|
+
rotation: 0,
|
|
61
|
+
sampleAspectRatio: {
|
|
62
|
+
numerator: 1,
|
|
63
|
+
denominator: 1,
|
|
64
|
+
},
|
|
65
|
+
fps: strh.rate / strh.scale,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
exports.makeAviVideoTrack = makeAviVideoTrack;
|
|
69
|
+
const getTracksFromAvi = (structure, state) => {
|
|
70
|
+
if (!(0, traversal_1.isRiffAvi)(structure)) {
|
|
71
|
+
throw new Error('Not an AVI file');
|
|
72
|
+
}
|
|
73
|
+
const videoTracks = [];
|
|
74
|
+
const audioTracks = [];
|
|
75
|
+
const otherTracks = [];
|
|
76
|
+
const boxes = (0, traversal_1.getStrlBoxes)(structure);
|
|
77
|
+
let i = 0;
|
|
78
|
+
for (const box of boxes) {
|
|
79
|
+
const strh = (0, traversal_1.getStrhBox)(box.children);
|
|
80
|
+
const strf = (0, traversal_1.getStrfBox)(box.children);
|
|
81
|
+
if (!strh || !strf) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (strf.type === 'strf-box-video') {
|
|
85
|
+
videoTracks.push((0, add_avc_profile_to_track_1.addAvcProfileToTrack)((0, exports.makeAviVideoTrack)({ strh, strf, index: i }), state.getAvcProfile()));
|
|
86
|
+
}
|
|
87
|
+
else if (strh.fccType === 'auds') {
|
|
88
|
+
audioTracks.push((0, exports.makeAviAudioTrack)({ strf, index: i }));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new Error(`Unsupported track type ${strh.fccType}`);
|
|
92
|
+
}
|
|
93
|
+
i++;
|
|
94
|
+
}
|
|
95
|
+
return { audioTracks, otherTracks, videoTracks };
|
|
96
|
+
};
|
|
97
|
+
exports.getTracksFromAvi = getTracksFromAvi;
|
|
98
|
+
const hasAllTracksFromAvi = (structure, state) => {
|
|
99
|
+
if (!(0, traversal_1.isRiffAvi)(structure)) {
|
|
100
|
+
throw new Error('Not an AVI file');
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const numberOfTracks = (0, exports.getNumberOfTracks)(structure);
|
|
104
|
+
const tracks = (0, exports.getTracksFromAvi)(structure, state);
|
|
105
|
+
return (tracks.videoTracks.length +
|
|
106
|
+
tracks.audioTracks.length +
|
|
107
|
+
tracks.otherTracks.length ===
|
|
108
|
+
numberOfTracks);
|
|
109
|
+
}
|
|
110
|
+
catch (_a) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
exports.hasAllTracksFromAvi = hasAllTracksFromAvi;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMoviAtom = void 0;
|
|
4
|
+
const isMoviAtom = (iterator, ckId) => {
|
|
5
|
+
if (ckId !== 'LIST') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const listType = iterator.getByteString(4);
|
|
9
|
+
iterator.counter.decrement(4);
|
|
10
|
+
return listType === 'movi';
|
|
11
|
+
};
|
|
12
|
+
exports.isMoviAtom = isMoviAtom;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAvih = void 0;
|
|
4
|
+
const parseAvih = ({ iterator, size, }) => {
|
|
5
|
+
const { expectNoMoreBytes } = iterator.startBox(size);
|
|
6
|
+
const dwMicroSecPerFrame = iterator.getUint32Le();
|
|
7
|
+
const dwMaxBytesPerSec = iterator.getUint32Le();
|
|
8
|
+
const paddingGranularity = iterator.getUint32Le();
|
|
9
|
+
const flags = iterator.getUint32Le();
|
|
10
|
+
const totalFrames = iterator.getUint32Le();
|
|
11
|
+
const initialFrames = iterator.getUint32Le();
|
|
12
|
+
const streams = iterator.getUint32Le();
|
|
13
|
+
const suggestedBufferSize = iterator.getUint32Le();
|
|
14
|
+
const width = iterator.getUint32Le();
|
|
15
|
+
const height = iterator.getUint32Le();
|
|
16
|
+
iterator.discard(16);
|
|
17
|
+
expectNoMoreBytes();
|
|
18
|
+
return {
|
|
19
|
+
type: 'avih-box',
|
|
20
|
+
microSecPerFrame: dwMicroSecPerFrame,
|
|
21
|
+
maxBytesPerSecond: dwMaxBytesPerSec,
|
|
22
|
+
paddingGranularity,
|
|
23
|
+
flags,
|
|
24
|
+
totalFrames,
|
|
25
|
+
initialFrames,
|
|
26
|
+
streams,
|
|
27
|
+
suggestedBufferSize,
|
|
28
|
+
height,
|
|
29
|
+
width,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.parseAvih = parseAvih;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { Options, ParseMediaFields } from '../../options';
|
|
3
|
+
import type { ParseResult, RiffStructure } from '../../parse-result';
|
|
4
|
+
import type { ParserContext } from '../../parser-context';
|
|
5
|
+
export declare const parseRiffBody: ({ iterator, structure, maxOffset, options, }: {
|
|
6
|
+
iterator: BufferIterator;
|
|
7
|
+
structure: RiffStructure;
|
|
8
|
+
maxOffset: number;
|
|
9
|
+
options: ParserContext;
|
|
10
|
+
}) => Promise<ParseResult<RiffStructure>>;
|
|
11
|
+
export declare const parseRiff: ({ iterator, options, fields, }: {
|
|
12
|
+
iterator: BufferIterator;
|
|
13
|
+
options: ParserContext;
|
|
14
|
+
fields: Options<ParseMediaFields>;
|
|
15
|
+
}) => Promise<ParseResult<RiffStructure>>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseRiff = exports.parseRiffBody = void 0;
|
|
4
|
+
const get_tracks_1 = require("../../get-tracks");
|
|
5
|
+
const has_all_info_1 = require("../../has-all-info");
|
|
6
|
+
const register_track_1 = require("../../register-track");
|
|
7
|
+
const expect_riff_box_1 = require("./expect-riff-box");
|
|
8
|
+
const get_tracks_from_avi_1 = require("./get-tracks-from-avi");
|
|
9
|
+
const traversal_1 = require("./traversal");
|
|
10
|
+
const continueAfterRiffBoxResult = ({ result, structure, iterator, maxOffset, options, }) => {
|
|
11
|
+
if (result.type === 'incomplete') {
|
|
12
|
+
return Promise.resolve({
|
|
13
|
+
status: 'incomplete',
|
|
14
|
+
async continueParsing() {
|
|
15
|
+
return Promise.resolve(continueAfterRiffBoxResult({
|
|
16
|
+
result: await result.continueParsing(),
|
|
17
|
+
structure,
|
|
18
|
+
iterator,
|
|
19
|
+
maxOffset,
|
|
20
|
+
options,
|
|
21
|
+
}));
|
|
22
|
+
},
|
|
23
|
+
segments: structure,
|
|
24
|
+
skipTo: null,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (result.type === 'complete' && result.box) {
|
|
28
|
+
structure.boxes.push(result.box);
|
|
29
|
+
}
|
|
30
|
+
return (0, exports.parseRiffBody)({ iterator, maxOffset, options, structure });
|
|
31
|
+
};
|
|
32
|
+
const parseRiffBody = async ({ iterator, structure, maxOffset, options, }) => {
|
|
33
|
+
while (iterator.bytesRemaining() > 0 &&
|
|
34
|
+
iterator.counter.getOffset() < maxOffset) {
|
|
35
|
+
const result = await (0, expect_riff_box_1.expectRiffBox)({
|
|
36
|
+
iterator,
|
|
37
|
+
options,
|
|
38
|
+
structure,
|
|
39
|
+
});
|
|
40
|
+
if (result.type === 'complete' && result.skipTo !== null) {
|
|
41
|
+
return {
|
|
42
|
+
status: 'incomplete',
|
|
43
|
+
skipTo: result.skipTo,
|
|
44
|
+
segments: structure,
|
|
45
|
+
continueParsing() {
|
|
46
|
+
return Promise.resolve(continueAfterRiffBoxResult({
|
|
47
|
+
iterator,
|
|
48
|
+
maxOffset,
|
|
49
|
+
options,
|
|
50
|
+
result,
|
|
51
|
+
structure,
|
|
52
|
+
}));
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (result.type === 'incomplete') {
|
|
57
|
+
return {
|
|
58
|
+
status: 'incomplete',
|
|
59
|
+
async continueParsing() {
|
|
60
|
+
return Promise.resolve(continueAfterRiffBoxResult({
|
|
61
|
+
iterator,
|
|
62
|
+
maxOffset,
|
|
63
|
+
options,
|
|
64
|
+
result: await result.continueParsing(),
|
|
65
|
+
structure,
|
|
66
|
+
}));
|
|
67
|
+
},
|
|
68
|
+
segments: structure,
|
|
69
|
+
skipTo: null,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (result.box === null) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
structure.boxes.push(result.box);
|
|
76
|
+
// When parsing an AVI
|
|
77
|
+
if (result.box.type === 'list-box' && result.box.listType === 'hdrl') {
|
|
78
|
+
const tracks = (0, get_tracks_1.getTracks)(structure, options.parserState);
|
|
79
|
+
if (!tracks.videoTracks.some((t) => t.codec === get_tracks_from_avi_1.TO_BE_OVERRIDDEN_LATER)) {
|
|
80
|
+
options.parserState.tracks.setIsDone();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// When parsing a WAV
|
|
84
|
+
if (result.box.type === 'wave-format-box') {
|
|
85
|
+
options.parserState.tracks.setIsDone();
|
|
86
|
+
}
|
|
87
|
+
if (result.box.type === 'strf-box-video' ||
|
|
88
|
+
result.box.type === 'strf-box-audio') {
|
|
89
|
+
const strh = (0, traversal_1.getStrhBox)(structure.boxes);
|
|
90
|
+
const strf = (0, traversal_1.getStrfBox)(structure.boxes);
|
|
91
|
+
if (!strh || !strf) {
|
|
92
|
+
throw new Error('strh or strf box missing');
|
|
93
|
+
}
|
|
94
|
+
if (strf.type === 'strf-box-audio' && options.onAudioTrack) {
|
|
95
|
+
const audioTrack = (0, get_tracks_from_avi_1.makeAviAudioTrack)({
|
|
96
|
+
index: options.nextTrackIndex,
|
|
97
|
+
strf,
|
|
98
|
+
});
|
|
99
|
+
await (0, register_track_1.registerTrack)({
|
|
100
|
+
options,
|
|
101
|
+
state: options.parserState,
|
|
102
|
+
track: audioTrack,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (options.onVideoTrack && strf.type === 'strf-box-video') {
|
|
106
|
+
const videoTrack = (0, get_tracks_from_avi_1.makeAviVideoTrack)({
|
|
107
|
+
strh,
|
|
108
|
+
index: options.nextTrackIndex,
|
|
109
|
+
strf,
|
|
110
|
+
});
|
|
111
|
+
(0, register_track_1.registerVideoTrackWhenProfileIsAvailable)({
|
|
112
|
+
options,
|
|
113
|
+
state: options.parserState,
|
|
114
|
+
track: videoTrack,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
options.nextTrackIndex++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
status: 'done',
|
|
122
|
+
segments: structure,
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
exports.parseRiffBody = parseRiffBody;
|
|
126
|
+
const parseRiff = ({ iterator, options, fields, }) => {
|
|
127
|
+
const structure = { type: 'riff', boxes: [] };
|
|
128
|
+
const riff = iterator.getByteString(4);
|
|
129
|
+
if (riff !== 'RIFF') {
|
|
130
|
+
throw new Error('Not a RIFF file');
|
|
131
|
+
}
|
|
132
|
+
const size = iterator.getUint32Le();
|
|
133
|
+
const fileType = iterator.getByteString(4);
|
|
134
|
+
if (fileType !== 'WAVE' && fileType !== 'AVI') {
|
|
135
|
+
throw new Error(`File type ${fileType} not supported`);
|
|
136
|
+
}
|
|
137
|
+
structure.boxes.push({ type: 'riff-header', fileSize: size, fileType });
|
|
138
|
+
if ((0, has_all_info_1.hasAllInfo)({ fields, structure, state: options.parserState })) {
|
|
139
|
+
return Promise.resolve({
|
|
140
|
+
status: 'done',
|
|
141
|
+
segments: structure,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return (0, exports.parseRiffBody)({ iterator, structure, maxOffset: Infinity, options });
|
|
145
|
+
};
|
|
146
|
+
exports.parseRiff = parseRiff;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFmtBox = void 0;
|
|
4
|
+
const parseFmtBox = ({ iterator, boxes, size, }) => {
|
|
5
|
+
const box = iterator.startBox(size);
|
|
6
|
+
const header = boxes.find((b) => b.type === 'riff-header');
|
|
7
|
+
if (!header) {
|
|
8
|
+
throw new Error('Expected RIFF header');
|
|
9
|
+
}
|
|
10
|
+
if (header.fileType !== 'WAVE') {
|
|
11
|
+
throw new Error('Only supporting WAVE type');
|
|
12
|
+
}
|
|
13
|
+
const wFormatTag = iterator.getUint16Le();
|
|
14
|
+
if (wFormatTag !== 1) {
|
|
15
|
+
throw new Error('Expected wFormatTag to be 1, only supporting this');
|
|
16
|
+
}
|
|
17
|
+
const numberOfChannels = iterator.getUint16Le();
|
|
18
|
+
const sampleRate = iterator.getUint32Le();
|
|
19
|
+
const byteRate = iterator.getUint32Le();
|
|
20
|
+
const blockAlign = iterator.getUint16Le();
|
|
21
|
+
const bitsPerSample = iterator.getUint16Le();
|
|
22
|
+
box.expectNoMoreBytes();
|
|
23
|
+
return {
|
|
24
|
+
type: 'wave-format-box',
|
|
25
|
+
formatTag: wFormatTag,
|
|
26
|
+
numberOfChannels,
|
|
27
|
+
sampleRate,
|
|
28
|
+
blockAlign,
|
|
29
|
+
byteRate,
|
|
30
|
+
bitsPerSample,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
exports.parseFmtBox = parseFmtBox;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseIsft = void 0;
|
|
4
|
+
const parseIsft = ({ iterator, size, }) => {
|
|
5
|
+
const { expectNoMoreBytes } = iterator.startBox(size);
|
|
6
|
+
const software = iterator.getByteString(size - 1);
|
|
7
|
+
const last = iterator.getUint8();
|
|
8
|
+
if (last !== 0) {
|
|
9
|
+
throw new Error(`Expected 0 byte, got ${last}`);
|
|
10
|
+
}
|
|
11
|
+
expectNoMoreBytes();
|
|
12
|
+
return {
|
|
13
|
+
type: 'isft-box',
|
|
14
|
+
software,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
exports.parseIsft = parseIsft;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { ParserContext } from '../../parser-context';
|
|
3
|
+
import type { RiffBox } from './riff-box';
|
|
4
|
+
export declare const parseListBox: ({ iterator, size, options, }: {
|
|
5
|
+
iterator: BufferIterator;
|
|
6
|
+
size: number;
|
|
7
|
+
options: ParserContext;
|
|
8
|
+
}) => Promise<RiffBox>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseListBox = void 0;
|
|
4
|
+
const parse_box_1 = require("./parse-box");
|
|
5
|
+
const parseListBox = async ({ iterator, size, options, }) => {
|
|
6
|
+
const counter = iterator.counter.getOffset();
|
|
7
|
+
const listType = iterator.getByteString(4);
|
|
8
|
+
if (listType === 'movi') {
|
|
9
|
+
throw new Error('should not be handled here');
|
|
10
|
+
}
|
|
11
|
+
const structure = {
|
|
12
|
+
type: 'riff',
|
|
13
|
+
boxes: [],
|
|
14
|
+
};
|
|
15
|
+
const result = await (0, parse_box_1.parseRiffBody)({
|
|
16
|
+
structure,
|
|
17
|
+
iterator,
|
|
18
|
+
maxOffset: counter + size,
|
|
19
|
+
options,
|
|
20
|
+
});
|
|
21
|
+
if (result.status === 'incomplete') {
|
|
22
|
+
throw new Error(`Should only parse complete boxes (${listType})`);
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
type: 'list-box',
|
|
26
|
+
listType,
|
|
27
|
+
children: structure.boxes,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.parseListBox = parseListBox;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { RiffStructure } from '../../parse-result';
|
|
3
|
+
import type { ParserContext } from '../../parser-context';
|
|
4
|
+
import type { RiffResult } from './expect-riff-box';
|
|
5
|
+
export declare const handleChunk: ({ iterator, options, structure, ckId, ckSize, }: {
|
|
6
|
+
iterator: BufferIterator;
|
|
7
|
+
options: ParserContext;
|
|
8
|
+
structure: RiffStructure;
|
|
9
|
+
ckId: string;
|
|
10
|
+
ckSize: number;
|
|
11
|
+
}) => Promise<void>;
|
|
12
|
+
export declare const parseMovi: ({ iterator, maxOffset, options, structure, }: {
|
|
13
|
+
iterator: BufferIterator;
|
|
14
|
+
maxOffset: number;
|
|
15
|
+
options: ParserContext;
|
|
16
|
+
structure: RiffStructure;
|
|
17
|
+
}) => Promise<RiffResult>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMovi = exports.handleChunk = void 0;
|
|
4
|
+
const parse_avc_1 = require("../avc/parse-avc");
|
|
5
|
+
const timescale_1 = require("./timescale");
|
|
6
|
+
const traversal_1 = require("./traversal");
|
|
7
|
+
const getStrhForIndex = (structure, trackId) => {
|
|
8
|
+
const boxes = (0, traversal_1.getStrlBoxes)(structure);
|
|
9
|
+
const box = boxes[trackId];
|
|
10
|
+
if (!box) {
|
|
11
|
+
throw new Error('Expected box');
|
|
12
|
+
}
|
|
13
|
+
const strh = (0, traversal_1.getStrhBox)(box.children);
|
|
14
|
+
if (!strh) {
|
|
15
|
+
throw new Error('strh');
|
|
16
|
+
}
|
|
17
|
+
return strh;
|
|
18
|
+
};
|
|
19
|
+
const handleChunk = async ({ iterator, options, structure, ckId, ckSize, }) => {
|
|
20
|
+
const videoChunk = ckId.match(/^([0-9]{2})dc$/);
|
|
21
|
+
if (videoChunk) {
|
|
22
|
+
const trackId = parseInt(videoChunk[1], 10);
|
|
23
|
+
const strh = getStrhForIndex(structure, trackId);
|
|
24
|
+
const samplesPerSecond = strh.rate / strh.scale;
|
|
25
|
+
const nthSample = options.parserState.getSamplesForTrack(trackId);
|
|
26
|
+
const timeInSec = nthSample / samplesPerSecond;
|
|
27
|
+
const timestamp = Math.floor(timeInSec * timescale_1.MEDIA_PARSER_RIFF_TIMESCALE);
|
|
28
|
+
const duration = Math.floor((1 / samplesPerSecond) * timescale_1.MEDIA_PARSER_RIFF_TIMESCALE);
|
|
29
|
+
const data = iterator.getSlice(ckSize);
|
|
30
|
+
const infos = (0, parse_avc_1.parseAvc)(data);
|
|
31
|
+
const keyOrDelta = infos.find((i) => i.type === 'keyframe' || i.type === 'delta-frame');
|
|
32
|
+
if (!keyOrDelta) {
|
|
33
|
+
throw new Error('expected avc to contain info about key or delta');
|
|
34
|
+
}
|
|
35
|
+
const avcProfile = infos.find((i) => i.type === 'avc-profile');
|
|
36
|
+
const ppsProfile = infos.find((i) => i.type === 'avc-pps');
|
|
37
|
+
if (avcProfile && ppsProfile) {
|
|
38
|
+
await options.parserState.onProfile({ pps: ppsProfile, sps: avcProfile });
|
|
39
|
+
options.parserState.tracks.setIsDone();
|
|
40
|
+
}
|
|
41
|
+
await options.parserState.onVideoSample(trackId, {
|
|
42
|
+
cts: timestamp,
|
|
43
|
+
dts: timestamp,
|
|
44
|
+
data,
|
|
45
|
+
duration,
|
|
46
|
+
timestamp,
|
|
47
|
+
trackId,
|
|
48
|
+
type: keyOrDelta.type === 'keyframe' ? 'key' : 'delta',
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const audioChunk = ckId.match(/^([0-9]{2})wb$/);
|
|
53
|
+
if (audioChunk) {
|
|
54
|
+
const trackId = parseInt(audioChunk[1], 10);
|
|
55
|
+
const strh = getStrhForIndex(structure, trackId);
|
|
56
|
+
const samplesPerSecond = strh.rate / strh.scale;
|
|
57
|
+
const nthSample = options.parserState.getSamplesForTrack(trackId);
|
|
58
|
+
const timeInSec = nthSample / samplesPerSecond;
|
|
59
|
+
const timestamp = timeInSec * timescale_1.MEDIA_PARSER_RIFF_TIMESCALE;
|
|
60
|
+
const duration = (1 / samplesPerSecond) * timescale_1.MEDIA_PARSER_RIFF_TIMESCALE;
|
|
61
|
+
await options.parserState.onAudioSample(trackId, {
|
|
62
|
+
cts: timestamp,
|
|
63
|
+
dts: timestamp,
|
|
64
|
+
data: iterator.getSlice(ckSize),
|
|
65
|
+
duration,
|
|
66
|
+
timestamp,
|
|
67
|
+
trackId,
|
|
68
|
+
type: 'key',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
exports.handleChunk = handleChunk;
|
|
73
|
+
const parseMovi = async ({ iterator, maxOffset, options, structure, }) => {
|
|
74
|
+
while (iterator.counter.getOffset() < maxOffset) {
|
|
75
|
+
if (iterator.bytesRemaining() < 8) {
|
|
76
|
+
return {
|
|
77
|
+
type: 'incomplete',
|
|
78
|
+
continueParsing: () => {
|
|
79
|
+
return Promise.resolve((0, exports.parseMovi)({ iterator, maxOffset, options, structure }));
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const ckId = iterator.getByteString(4);
|
|
84
|
+
const ckSize = iterator.getUint32Le();
|
|
85
|
+
if (options.parserState.maySkipVideoData() &&
|
|
86
|
+
options.parserState.getAvcProfile()) {
|
|
87
|
+
return {
|
|
88
|
+
type: 'complete',
|
|
89
|
+
box: {
|
|
90
|
+
type: 'movi-box',
|
|
91
|
+
},
|
|
92
|
+
skipTo: maxOffset,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (iterator.bytesRemaining() < ckSize) {
|
|
96
|
+
iterator.counter.decrement(8);
|
|
97
|
+
return {
|
|
98
|
+
type: 'incomplete',
|
|
99
|
+
continueParsing: () => {
|
|
100
|
+
return Promise.resolve((0, exports.parseMovi)({ iterator, maxOffset, options, structure }));
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
await (0, exports.handleChunk)({ iterator, options, structure, ckId, ckSize });
|
|
105
|
+
// Discard added zeroes
|
|
106
|
+
while (iterator.counter.getOffset() < maxOffset &&
|
|
107
|
+
iterator.bytesRemaining() > 0) {
|
|
108
|
+
if (iterator.getUint8() !== 0) {
|
|
109
|
+
iterator.counter.decrement(1);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (iterator.counter.getOffset() === maxOffset) {
|
|
115
|
+
return {
|
|
116
|
+
type: 'complete',
|
|
117
|
+
box: {
|
|
118
|
+
type: 'movi-box',
|
|
119
|
+
},
|
|
120
|
+
skipTo: null,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (iterator.counter.getOffset() > maxOffset) {
|
|
124
|
+
throw new Error('Oops, this should not happen!');
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
type: 'incomplete',
|
|
128
|
+
continueParsing: () => {
|
|
129
|
+
return Promise.resolve((0, exports.parseMovi)({ iterator, maxOffset, options, structure }));
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
exports.parseMovi = parseMovi;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { ParserContext } from '../../parser-context';
|
|
3
|
+
import type { RiffBox } from './riff-box';
|
|
4
|
+
export declare const parseRiffBox: ({ iterator, size, id, boxes, options, }: {
|
|
5
|
+
iterator: BufferIterator;
|
|
6
|
+
size: number;
|
|
7
|
+
id: string;
|
|
8
|
+
boxes: RiffBox[];
|
|
9
|
+
options: ParserContext;
|
|
10
|
+
}) => Promise<RiffBox>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseRiffBox = void 0;
|
|
4
|
+
const parse_avih_1 = require("./parse-avih");
|
|
5
|
+
const parse_fmt_box_1 = require("./parse-fmt-box");
|
|
6
|
+
const parse_isft_1 = require("./parse-isft");
|
|
7
|
+
const parse_list_box_1 = require("./parse-list-box");
|
|
8
|
+
const parse_strf_1 = require("./parse-strf");
|
|
9
|
+
const parse_strh_1 = require("./parse-strh");
|
|
10
|
+
const parseRiffBox = ({ iterator, size, id, boxes, options, }) => {
|
|
11
|
+
if (id === 'fmt') {
|
|
12
|
+
return Promise.resolve((0, parse_fmt_box_1.parseFmtBox)({ iterator, boxes, size }));
|
|
13
|
+
}
|
|
14
|
+
if (id === 'LIST') {
|
|
15
|
+
return (0, parse_list_box_1.parseListBox)({ iterator, size, options });
|
|
16
|
+
}
|
|
17
|
+
if (id === 'ISFT') {
|
|
18
|
+
return Promise.resolve((0, parse_isft_1.parseIsft)({ iterator, size }));
|
|
19
|
+
}
|
|
20
|
+
if (id === 'avih') {
|
|
21
|
+
return Promise.resolve((0, parse_avih_1.parseAvih)({ iterator, size }));
|
|
22
|
+
}
|
|
23
|
+
if (id === 'strh') {
|
|
24
|
+
return Promise.resolve((0, parse_strh_1.parseStrh)({ iterator, size }));
|
|
25
|
+
}
|
|
26
|
+
if (id === 'strf') {
|
|
27
|
+
return Promise.resolve((0, parse_strf_1.parseStrf)({ iterator, size, boxes }));
|
|
28
|
+
}
|
|
29
|
+
iterator.discard(size);
|
|
30
|
+
const box = {
|
|
31
|
+
type: 'riff-box',
|
|
32
|
+
size,
|
|
33
|
+
id,
|
|
34
|
+
};
|
|
35
|
+
return Promise.resolve(box);
|
|
36
|
+
};
|
|
37
|
+
exports.parseRiffBox = parseRiffBox;
|