@remotion/media-parser 4.0.254 → 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,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseStrf = void 0;
|
|
4
|
+
const parseStrfAudio = ({ iterator, size, }) => {
|
|
5
|
+
const box = iterator.startBox(size);
|
|
6
|
+
const formatTag = iterator.getUint16Le();
|
|
7
|
+
const numberOfChannels = iterator.getUint16Le();
|
|
8
|
+
const samplesPerSec = iterator.getUint32Le();
|
|
9
|
+
const avgBytesPerSec = iterator.getUint32Le();
|
|
10
|
+
const blockAlign = iterator.getUint16Le();
|
|
11
|
+
const bitsPerSample = iterator.getUint16Le();
|
|
12
|
+
const cbSize = iterator.getUint16Le();
|
|
13
|
+
box.expectNoMoreBytes();
|
|
14
|
+
return {
|
|
15
|
+
type: 'strf-box-audio',
|
|
16
|
+
avgBytesPerSecond: avgBytesPerSec,
|
|
17
|
+
bitsPerSample,
|
|
18
|
+
blockAlign,
|
|
19
|
+
cbSize,
|
|
20
|
+
formatTag,
|
|
21
|
+
numberOfChannels,
|
|
22
|
+
sampleRate: samplesPerSec,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const parseStrfVideo = ({ iterator, size, }) => {
|
|
26
|
+
const box = iterator.startBox(size);
|
|
27
|
+
const biSize = iterator.getUint32Le();
|
|
28
|
+
const width = iterator.getInt32Le();
|
|
29
|
+
const height = iterator.getInt32Le();
|
|
30
|
+
const planes = iterator.getUint16Le();
|
|
31
|
+
const bitCount = iterator.getUint16Le();
|
|
32
|
+
const compression = iterator.getByteString(4);
|
|
33
|
+
const sizeImage = iterator.getUint32Le();
|
|
34
|
+
const xPelsPerMeter = iterator.getInt32Le();
|
|
35
|
+
const yPelsPerMeter = iterator.getInt32Le();
|
|
36
|
+
const clrUsed = iterator.getUint32Le();
|
|
37
|
+
const clrImportant = iterator.getUint32Le();
|
|
38
|
+
box.expectNoMoreBytes();
|
|
39
|
+
return {
|
|
40
|
+
type: 'strf-box-video',
|
|
41
|
+
biSize,
|
|
42
|
+
bitCount,
|
|
43
|
+
clrImportant,
|
|
44
|
+
clrUsed,
|
|
45
|
+
compression,
|
|
46
|
+
height,
|
|
47
|
+
planes,
|
|
48
|
+
sizeImage,
|
|
49
|
+
width,
|
|
50
|
+
xPelsPerMeter,
|
|
51
|
+
yPelsPerMeter,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const parseStrf = ({ iterator, size, boxes, }) => {
|
|
55
|
+
const strh = boxes.find((b) => b.type === 'strh-box');
|
|
56
|
+
if (!strh) {
|
|
57
|
+
throw new Error('strh box not found');
|
|
58
|
+
}
|
|
59
|
+
if (strh.fccType === 'vids') {
|
|
60
|
+
return parseStrfVideo({ iterator, size });
|
|
61
|
+
}
|
|
62
|
+
if (strh.fccType === 'auds') {
|
|
63
|
+
return parseStrfAudio({ iterator, size });
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Unsupported fccType: ${strh.fccType}`);
|
|
66
|
+
};
|
|
67
|
+
exports.parseStrf = parseStrf;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseStrh = void 0;
|
|
4
|
+
const parseStrh = ({ iterator, size, }) => {
|
|
5
|
+
const box = iterator.startBox(size);
|
|
6
|
+
const fccType = iterator.getByteString(4);
|
|
7
|
+
if (fccType !== 'vids' && fccType !== 'auds') {
|
|
8
|
+
throw new Error('Expected AVI handler to be vids / auds');
|
|
9
|
+
}
|
|
10
|
+
const handler = fccType === 'vids' ? iterator.getByteString(4) : iterator.getUint32Le();
|
|
11
|
+
if (typeof handler === 'string' && handler !== 'H264') {
|
|
12
|
+
throw new Error(`Only H264 is supported as a stream type in .avi, got ${handler}`);
|
|
13
|
+
}
|
|
14
|
+
if (fccType === 'auds' && handler !== 1) {
|
|
15
|
+
throw new Error(`Only "1" is supported as a stream type in .avi, got ${handler}`);
|
|
16
|
+
}
|
|
17
|
+
const flags = iterator.getUint32Le();
|
|
18
|
+
const priority = iterator.getUint16Le();
|
|
19
|
+
const language = iterator.getUint16Le();
|
|
20
|
+
const initialFrames = iterator.getUint32Le();
|
|
21
|
+
const scale = iterator.getUint32Le();
|
|
22
|
+
const rate = iterator.getUint32Le();
|
|
23
|
+
const start = iterator.getUint32Le();
|
|
24
|
+
const length = iterator.getUint32Le();
|
|
25
|
+
const suggestedBufferSize = iterator.getUint32Le();
|
|
26
|
+
const quality = iterator.getUint32Le();
|
|
27
|
+
const sampleSize = iterator.getUint32Le();
|
|
28
|
+
box.discardRest();
|
|
29
|
+
return {
|
|
30
|
+
type: 'strh-box',
|
|
31
|
+
fccType,
|
|
32
|
+
handler,
|
|
33
|
+
flags,
|
|
34
|
+
priority,
|
|
35
|
+
initialFrames,
|
|
36
|
+
length,
|
|
37
|
+
quality,
|
|
38
|
+
rate,
|
|
39
|
+
sampleSize,
|
|
40
|
+
scale,
|
|
41
|
+
start,
|
|
42
|
+
suggestedBufferSize,
|
|
43
|
+
language,
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
exports.parseStrh = parseStrh;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export type WaveFormatBox = {
|
|
2
|
+
type: 'wave-format-box';
|
|
3
|
+
formatTag: 1;
|
|
4
|
+
numberOfChannels: number;
|
|
5
|
+
sampleRate: number;
|
|
6
|
+
blockAlign: number;
|
|
7
|
+
byteRate: number;
|
|
8
|
+
bitsPerSample: number;
|
|
9
|
+
};
|
|
10
|
+
export type ListBox = {
|
|
11
|
+
type: 'list-box';
|
|
12
|
+
listType: string;
|
|
13
|
+
children: RiffBox[];
|
|
14
|
+
};
|
|
15
|
+
export type RiffRegularBox = {
|
|
16
|
+
type: 'riff-box';
|
|
17
|
+
size: number;
|
|
18
|
+
id: string;
|
|
19
|
+
};
|
|
20
|
+
export type AvihBox = {
|
|
21
|
+
type: 'avih-box';
|
|
22
|
+
microSecPerFrame: number;
|
|
23
|
+
maxBytesPerSecond: number;
|
|
24
|
+
paddingGranularity: number;
|
|
25
|
+
flags: number;
|
|
26
|
+
totalFrames: number;
|
|
27
|
+
initialFrames: number;
|
|
28
|
+
streams: number;
|
|
29
|
+
suggestedBufferSize: number;
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
};
|
|
33
|
+
export type StrhBox = {
|
|
34
|
+
type: 'strh-box';
|
|
35
|
+
fccType: 'vids' | 'auds';
|
|
36
|
+
handler: 'H264' | number;
|
|
37
|
+
flags: number;
|
|
38
|
+
priority: number;
|
|
39
|
+
initialFrames: number;
|
|
40
|
+
scale: number;
|
|
41
|
+
rate: number;
|
|
42
|
+
start: number;
|
|
43
|
+
length: number;
|
|
44
|
+
suggestedBufferSize: number;
|
|
45
|
+
quality: number;
|
|
46
|
+
sampleSize: number;
|
|
47
|
+
language: number;
|
|
48
|
+
};
|
|
49
|
+
export type StrfBoxVideo = {
|
|
50
|
+
type: 'strf-box-video';
|
|
51
|
+
biSize: number;
|
|
52
|
+
width: number;
|
|
53
|
+
height: number;
|
|
54
|
+
planes: number;
|
|
55
|
+
bitCount: number;
|
|
56
|
+
compression: string;
|
|
57
|
+
sizeImage: number;
|
|
58
|
+
xPelsPerMeter: number;
|
|
59
|
+
yPelsPerMeter: number;
|
|
60
|
+
clrUsed: number;
|
|
61
|
+
clrImportant: number;
|
|
62
|
+
};
|
|
63
|
+
export type StrfBoxAudio = {
|
|
64
|
+
type: 'strf-box-audio';
|
|
65
|
+
formatTag: number;
|
|
66
|
+
numberOfChannels: number;
|
|
67
|
+
sampleRate: number;
|
|
68
|
+
avgBytesPerSecond: number;
|
|
69
|
+
blockAlign: number;
|
|
70
|
+
bitsPerSample: number;
|
|
71
|
+
cbSize: number;
|
|
72
|
+
};
|
|
73
|
+
export type RiffHeader = {
|
|
74
|
+
type: 'riff-header';
|
|
75
|
+
fileSize: number;
|
|
76
|
+
fileType: string;
|
|
77
|
+
};
|
|
78
|
+
export type MoviBox = {
|
|
79
|
+
type: 'movi-box';
|
|
80
|
+
};
|
|
81
|
+
export type IsftBox = {
|
|
82
|
+
type: 'isft-box';
|
|
83
|
+
software: string;
|
|
84
|
+
};
|
|
85
|
+
export type RiffBox = RiffRegularBox | WaveFormatBox | RiffHeader | ListBox | AvihBox | StrhBox | StrfBoxVideo | StrfBoxAudio | MoviBox | IsftBox;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const MEDIA_PARSER_RIFF_TIMESCALE = 1000000;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RiffStructure } from '../../parse-result';
|
|
2
|
+
import type { AvihBox, ListBox, RiffBox, StrfBoxAudio, StrfBoxVideo, StrhBox } from './riff-box';
|
|
3
|
+
export declare const isRiffAvi: (structure: RiffStructure) => boolean;
|
|
4
|
+
export declare const getHdlrBox: (structure: RiffStructure) => ListBox | null;
|
|
5
|
+
export declare const getAvihBox: (structure: RiffStructure) => AvihBox | null;
|
|
6
|
+
export declare const getStrlBoxes: (structure: RiffStructure) => ListBox[];
|
|
7
|
+
export declare const getStrhBox: (strlBoxChildren: RiffBox[]) => StrhBox | null;
|
|
8
|
+
export declare const getStrfBox: (strlBoxChildren: RiffBox[]) => StrfBoxAudio | StrfBoxVideo | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getStrfBox = exports.getStrhBox = exports.getStrlBoxes = exports.getAvihBox = exports.getHdlrBox = exports.isRiffAvi = void 0;
|
|
4
|
+
const isRiffAvi = (structure) => {
|
|
5
|
+
return structure.boxes.some((box) => box.type === 'riff-header' && box.fileType === 'AVI');
|
|
6
|
+
};
|
|
7
|
+
exports.isRiffAvi = isRiffAvi;
|
|
8
|
+
const getHdlrBox = (structure) => {
|
|
9
|
+
return structure.boxes.find((box) => box.type === 'list-box' && box.listType === 'hdrl');
|
|
10
|
+
};
|
|
11
|
+
exports.getHdlrBox = getHdlrBox;
|
|
12
|
+
const getAvihBox = (structure) => {
|
|
13
|
+
const hdlrBox = (0, exports.getHdlrBox)(structure);
|
|
14
|
+
if (!hdlrBox) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return hdlrBox.children.find((box) => box.type === 'avih-box');
|
|
18
|
+
};
|
|
19
|
+
exports.getAvihBox = getAvihBox;
|
|
20
|
+
const getStrlBoxes = (structure) => {
|
|
21
|
+
const hdlrBox = (0, exports.getHdlrBox)(structure);
|
|
22
|
+
if (!hdlrBox) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return hdlrBox.children.filter((box) => box.type === 'list-box' && box.listType === 'strl');
|
|
26
|
+
};
|
|
27
|
+
exports.getStrlBoxes = getStrlBoxes;
|
|
28
|
+
const getStrhBox = (strlBoxChildren) => {
|
|
29
|
+
return strlBoxChildren.find((box) => box.type === 'strh-box');
|
|
30
|
+
};
|
|
31
|
+
exports.getStrhBox = getStrhBox;
|
|
32
|
+
const getStrfBox = (strlBoxChildren) => {
|
|
33
|
+
var _a;
|
|
34
|
+
return ((_a = strlBoxChildren.find((box) => box.type === 'strf-box-audio' || box.type === 'strf-box-video')) !== null && _a !== void 0 ? _a : null);
|
|
35
|
+
};
|
|
36
|
+
exports.getStrfBox = getStrfBox;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const allowedPartialSegments: string[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAv1PrivateData = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const parseAv1PrivateData = (data, colrAtom) => {
|
|
6
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(data, data.byteLength);
|
|
7
|
+
iterator.startReadingBits();
|
|
8
|
+
if (iterator.getBits(1) !== 1) {
|
|
9
|
+
iterator.destroy();
|
|
10
|
+
throw new Error('Expected av1 private data to be version 1');
|
|
11
|
+
}
|
|
12
|
+
const version = iterator.getBits(7);
|
|
13
|
+
if (version !== 1) {
|
|
14
|
+
iterator.destroy();
|
|
15
|
+
throw new Error(`Expected av1 private data to be version 1, got ${version}`);
|
|
16
|
+
}
|
|
17
|
+
let str = 'av01.';
|
|
18
|
+
// https://aomediacodec.github.io/av1-isobmff/#codecsparam
|
|
19
|
+
const seqProfile = iterator.getBits(3);
|
|
20
|
+
// Profile
|
|
21
|
+
str += seqProfile;
|
|
22
|
+
str += '.';
|
|
23
|
+
const seq_level_idx = iterator.getBits(5);
|
|
24
|
+
const seq_tier_0 = iterator.getBits(1);
|
|
25
|
+
// Level
|
|
26
|
+
// The level parameter value SHALL equal the first level value indicated by seq_level_idx in the Sequence Header OBU
|
|
27
|
+
str += seq_level_idx.toString(16).padStart(2, '0');
|
|
28
|
+
str += seq_tier_0 ? 'H' : 'M';
|
|
29
|
+
str += '.';
|
|
30
|
+
// bitDepth
|
|
31
|
+
// The bitDepth parameter value SHALL equal the value of BitDepth variable as defined in [AV1] derived from the Sequence Header OBU
|
|
32
|
+
const high_bitdepth = iterator.getBits(1);
|
|
33
|
+
const twelve_bit = iterator.getBits(1);
|
|
34
|
+
const bitDepth = high_bitdepth && seqProfile === 2
|
|
35
|
+
? twelve_bit
|
|
36
|
+
? 12
|
|
37
|
+
: 10
|
|
38
|
+
: high_bitdepth
|
|
39
|
+
? 10
|
|
40
|
+
: 8;
|
|
41
|
+
str += bitDepth.toString().padStart(2, '0');
|
|
42
|
+
str += '.';
|
|
43
|
+
// monochrome
|
|
44
|
+
// The monochrome parameter value, represented by a single digit decimal, SHALL equal the value of mono_chrome in the Sequence Header OBU
|
|
45
|
+
const mono_chrome = iterator.getBits(1);
|
|
46
|
+
str += mono_chrome ? '1' : '0';
|
|
47
|
+
str += '.';
|
|
48
|
+
// The chromaSubsampling parameter value, represented by a three-digit decimal,
|
|
49
|
+
// SHALL have its first digit equal to subsampling_x
|
|
50
|
+
const subsampling_x = iterator.getBits(1);
|
|
51
|
+
str += subsampling_x ? '1' : '0';
|
|
52
|
+
// and its second digit equal to subsampling_y.
|
|
53
|
+
const subsampling_y = iterator.getBits(1);
|
|
54
|
+
str += subsampling_y ? '1' : '0';
|
|
55
|
+
// If both subsampling_x and subsampling_y are set to 1, then the third digit SHALL be equal to chroma_sample_position, otherwise it SHALL be set to 0
|
|
56
|
+
const chroma_sample_position = iterator.getBits(2);
|
|
57
|
+
str +=
|
|
58
|
+
subsampling_x && subsampling_y
|
|
59
|
+
? chroma_sample_position === 1
|
|
60
|
+
? '1'
|
|
61
|
+
: '0'
|
|
62
|
+
: '0';
|
|
63
|
+
str += '.';
|
|
64
|
+
if (colrAtom && colrAtom.colorType === 'transfer-characteristics') {
|
|
65
|
+
str += colrAtom.primaries.toString().padStart(2, '0');
|
|
66
|
+
str += '.';
|
|
67
|
+
str += colrAtom.transfer.toString().padStart(2, '0');
|
|
68
|
+
str += '.';
|
|
69
|
+
str += colrAtom.matrixIndex.toString().padStart(2, '0');
|
|
70
|
+
str += '.';
|
|
71
|
+
str += colrAtom.fullRangeFlag ? '1' : '0';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Otherwise, the color_description_present_flag is set to 0 in the Sequence Header OBU. The colorPrimaries, transferCharacteristics, and matrixCoefficients parameter values SHOULD be set to the default values below.
|
|
75
|
+
// colorPrimaries 01 (ITU-R BT.709)
|
|
76
|
+
str += '01';
|
|
77
|
+
str += '.';
|
|
78
|
+
// transferCharacteristics 01 (ITU-R BT.709)
|
|
79
|
+
str += '01';
|
|
80
|
+
str += '.';
|
|
81
|
+
// matrixCoefficients 00 (ITU-R BT.709)
|
|
82
|
+
str += '01';
|
|
83
|
+
str += '.';
|
|
84
|
+
// videoFullRangeFlag 0 (studio swing representation)
|
|
85
|
+
str += '0';
|
|
86
|
+
}
|
|
87
|
+
// If the codecs parameter string ends with ".0.110.01.01.01.0" (containing all the default values below), that trailing part of the string SHOULD be omitted.
|
|
88
|
+
const suffix = '.0.110.01.01.01.0';
|
|
89
|
+
if (str.endsWith(suffix)) {
|
|
90
|
+
str = str.slice(0, -suffix.length);
|
|
91
|
+
}
|
|
92
|
+
iterator.destroy();
|
|
93
|
+
return str;
|
|
94
|
+
};
|
|
95
|
+
exports.parseAv1PrivateData = parseAv1PrivateData;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { VideoTrackColorParams } from '../../get-tracks';
|
|
2
|
+
import type { ColourSegment } from './segments/all-segments';
|
|
3
|
+
export declare const parseColorSegment: (colourSegment: ColourSegment) => VideoTrackColorParams;
|
|
4
|
+
export declare const makeMatroskaColorBytes: ({ transferCharacteristics, matrixCoefficients, primaries, fullRange, }: VideoTrackColorParams) => import("./segments/all-segments").BytesAndOffset;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeMatroskaColorBytes = exports.parseColorSegment = void 0;
|
|
4
|
+
const truthy_1 = require("../../truthy");
|
|
5
|
+
const make_header_1 = require("./make-header");
|
|
6
|
+
const traversal_1 = require("./traversal");
|
|
7
|
+
const parseColorSegment = (colourSegment) => {
|
|
8
|
+
const transferCharacteristics = (0, traversal_1.getTransferCharacteristicsSegment)(colourSegment);
|
|
9
|
+
const matrixCoefficients = (0, traversal_1.getMatrixCoefficientsSegment)(colourSegment);
|
|
10
|
+
const primaries = (0, traversal_1.getPrimariesSegment)(colourSegment);
|
|
11
|
+
const range = (0, traversal_1.getRangeSegment)(colourSegment);
|
|
12
|
+
return {
|
|
13
|
+
transferCharacteristics: transferCharacteristics
|
|
14
|
+
? transferCharacteristics.value.value === 1
|
|
15
|
+
? 'bt709'
|
|
16
|
+
: transferCharacteristics.value.value === 6
|
|
17
|
+
? 'smpte170m'
|
|
18
|
+
: transferCharacteristics.value.value === 13
|
|
19
|
+
? 'iec61966-2-1'
|
|
20
|
+
: null
|
|
21
|
+
: null,
|
|
22
|
+
matrixCoefficients: matrixCoefficients
|
|
23
|
+
? matrixCoefficients.value.value === 1
|
|
24
|
+
? 'bt709'
|
|
25
|
+
: matrixCoefficients.value.value === 6
|
|
26
|
+
? 'smpte170m'
|
|
27
|
+
: matrixCoefficients.value.value === 5
|
|
28
|
+
? 'bt470bg'
|
|
29
|
+
: null
|
|
30
|
+
: null,
|
|
31
|
+
primaries: primaries
|
|
32
|
+
? primaries.value.value === 1
|
|
33
|
+
? 'bt709'
|
|
34
|
+
: primaries.value.value === 6
|
|
35
|
+
? 'smpte170m'
|
|
36
|
+
: primaries.value.value === 5
|
|
37
|
+
? 'bt470bg'
|
|
38
|
+
: null
|
|
39
|
+
: null,
|
|
40
|
+
fullRange: (transferCharacteristics === null || transferCharacteristics === void 0 ? void 0 : transferCharacteristics.value.value) && (matrixCoefficients === null || matrixCoefficients === void 0 ? void 0 : matrixCoefficients.value.value)
|
|
41
|
+
? null
|
|
42
|
+
: range
|
|
43
|
+
? Boolean(range === null || range === void 0 ? void 0 : range.value.value)
|
|
44
|
+
: null,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
exports.parseColorSegment = parseColorSegment;
|
|
48
|
+
const makeMatroskaColorBytes = ({ transferCharacteristics, matrixCoefficients, primaries, fullRange, }) => {
|
|
49
|
+
const rangeValue = transferCharacteristics && matrixCoefficients
|
|
50
|
+
? 3
|
|
51
|
+
: fullRange === true
|
|
52
|
+
? 2
|
|
53
|
+
: fullRange === false
|
|
54
|
+
? 1
|
|
55
|
+
: 0;
|
|
56
|
+
// https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
|
|
57
|
+
// 5.1.4.1.28.27
|
|
58
|
+
const primariesValue = primaries === 'bt709'
|
|
59
|
+
? 1
|
|
60
|
+
: primaries === 'smpte170m'
|
|
61
|
+
? 6
|
|
62
|
+
: primaries === 'bt470bg'
|
|
63
|
+
? 5
|
|
64
|
+
: 2;
|
|
65
|
+
const transferChracteristicsValue = transferCharacteristics === 'bt709'
|
|
66
|
+
? 1
|
|
67
|
+
: transferCharacteristics === 'smpte170m'
|
|
68
|
+
? 6
|
|
69
|
+
: transferCharacteristics === 'iec61966-2-1'
|
|
70
|
+
? 13
|
|
71
|
+
: 2;
|
|
72
|
+
if (matrixCoefficients === 'rgb') {
|
|
73
|
+
throw new Error('Cannot encode Matroska in RGB');
|
|
74
|
+
}
|
|
75
|
+
const matrixCoefficientsValue = matrixCoefficients === 'bt709'
|
|
76
|
+
? 1
|
|
77
|
+
: matrixCoefficients === 'bt470bg'
|
|
78
|
+
? 5
|
|
79
|
+
: matrixCoefficients === 'smpte170m'
|
|
80
|
+
? 6
|
|
81
|
+
: 2;
|
|
82
|
+
return (0, make_header_1.makeMatroskaBytes)({
|
|
83
|
+
type: 'Colour',
|
|
84
|
+
minVintWidth: null,
|
|
85
|
+
value: [
|
|
86
|
+
transferChracteristicsValue === 2
|
|
87
|
+
? null
|
|
88
|
+
: {
|
|
89
|
+
type: 'TransferCharacteristics',
|
|
90
|
+
value: {
|
|
91
|
+
value: transferChracteristicsValue,
|
|
92
|
+
byteLength: null,
|
|
93
|
+
},
|
|
94
|
+
minVintWidth: null,
|
|
95
|
+
},
|
|
96
|
+
matrixCoefficientsValue === 2
|
|
97
|
+
? null
|
|
98
|
+
: {
|
|
99
|
+
type: 'MatrixCoefficients',
|
|
100
|
+
value: {
|
|
101
|
+
value: matrixCoefficientsValue,
|
|
102
|
+
byteLength: null,
|
|
103
|
+
},
|
|
104
|
+
minVintWidth: null,
|
|
105
|
+
},
|
|
106
|
+
primariesValue === 2
|
|
107
|
+
? null
|
|
108
|
+
: {
|
|
109
|
+
type: 'Primaries',
|
|
110
|
+
value: {
|
|
111
|
+
value: primariesValue,
|
|
112
|
+
byteLength: null,
|
|
113
|
+
},
|
|
114
|
+
minVintWidth: null,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'Range',
|
|
118
|
+
value: {
|
|
119
|
+
value: rangeValue,
|
|
120
|
+
byteLength: null,
|
|
121
|
+
},
|
|
122
|
+
minVintWidth: null,
|
|
123
|
+
},
|
|
124
|
+
].filter(truthy_1.truthy),
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
exports.makeMatroskaColorBytes = makeMatroskaColorBytes;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAudioDescription = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const traversal_1 = require("./traversal");
|
|
6
|
+
const getAudioDescription = (track) => {
|
|
7
|
+
const codec = (0, traversal_1.getCodecSegment)(track);
|
|
8
|
+
if (!codec || codec.value !== 'A_VORBIS') {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
// how to parse vorbis private
|
|
12
|
+
// https://github.com/google/ExoPlayer/blob/dd430f7053a1a3958deea3ead6a0565150c06bfc/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java#L2466
|
|
13
|
+
const privateData = (0, traversal_1.getPrivateData)(track);
|
|
14
|
+
if (!privateData) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
if (privateData[0] !== 2) {
|
|
18
|
+
throw new Error('Expected vorbis private data version 2');
|
|
19
|
+
}
|
|
20
|
+
let offset = 1;
|
|
21
|
+
let vorbisInfoLength = 0;
|
|
22
|
+
let vorbisSkipLength = 0;
|
|
23
|
+
while ((privateData[offset] & 0xff) === 0xff) {
|
|
24
|
+
vorbisInfoLength += 0xff;
|
|
25
|
+
offset++;
|
|
26
|
+
}
|
|
27
|
+
vorbisInfoLength += privateData[offset++] & 0xff;
|
|
28
|
+
while ((privateData[offset] & 0xff) === 0xff) {
|
|
29
|
+
vorbisSkipLength += 0xff;
|
|
30
|
+
offset++;
|
|
31
|
+
}
|
|
32
|
+
vorbisSkipLength += privateData[offset++] & 0xff;
|
|
33
|
+
if (privateData[offset] !== 0x01) {
|
|
34
|
+
throw new Error('Error parsing vorbis codec private');
|
|
35
|
+
}
|
|
36
|
+
const vorbisInfo = privateData.slice(offset, offset + vorbisInfoLength);
|
|
37
|
+
offset += vorbisInfoLength;
|
|
38
|
+
if (privateData[offset] !== 0x03) {
|
|
39
|
+
throw new Error('Error parsing vorbis codec private');
|
|
40
|
+
}
|
|
41
|
+
const vorbisComments = privateData.slice(offset, offset + vorbisSkipLength);
|
|
42
|
+
offset += vorbisSkipLength;
|
|
43
|
+
if (privateData[offset] !== 0x05) {
|
|
44
|
+
throw new Error('Error parsing vorbis codec private');
|
|
45
|
+
}
|
|
46
|
+
const vorbisBooks = privateData.slice(offset);
|
|
47
|
+
const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)(vorbisInfo.slice(0), vorbisInfo.length);
|
|
48
|
+
// type
|
|
49
|
+
bufferIterator.getUint8();
|
|
50
|
+
// vorbis
|
|
51
|
+
const vorbis = bufferIterator.getByteString(6);
|
|
52
|
+
if (vorbis !== 'vorbis') {
|
|
53
|
+
throw new Error('Error parsing vorbis codec private');
|
|
54
|
+
}
|
|
55
|
+
const vorbisVersion = bufferIterator.getUint32Le();
|
|
56
|
+
if (vorbisVersion !== 0) {
|
|
57
|
+
throw new Error('Error parsing vorbis codec private');
|
|
58
|
+
}
|
|
59
|
+
const vorbisDescription = new Uint8Array([
|
|
60
|
+
// constructing the vorbis description
|
|
61
|
+
// This format consists in the page_segments field
|
|
62
|
+
/**
|
|
63
|
+
* The number of segment entries to appear in the segment table.
|
|
64
|
+
* The maximum number of 255 segments (255 bytes each) sets the maximum possible physical page size at 65307 bytes or just under 64kB (thus we know that a header corrupted so as destroy sizing/alignment information will not cause a runaway bitstream.
|
|
65
|
+
* We'll read in the page according to the corrupted size information that's guaranteed to be a reasonable size regardless, notice the checksum mismatch, drop sync and then look for recapture).
|
|
66
|
+
*/
|
|
67
|
+
2,
|
|
68
|
+
// followed by the segment_table field
|
|
69
|
+
// offset of the comments table
|
|
70
|
+
vorbisInfo.length,
|
|
71
|
+
// offset of the codebooks table
|
|
72
|
+
vorbisComments.length,
|
|
73
|
+
// followed by the three Vorbis header packets,
|
|
74
|
+
// respectively the identification header,
|
|
75
|
+
...vorbisInfo,
|
|
76
|
+
// the comments header,
|
|
77
|
+
...vorbisComments,
|
|
78
|
+
// and the setup header, in this order, as described in section 4.2 of [VORBIS].
|
|
79
|
+
...vorbisBooks,
|
|
80
|
+
]);
|
|
81
|
+
return vorbisDescription;
|
|
82
|
+
};
|
|
83
|
+
exports.getAudioDescription = getAudioDescription;
|