@remotion/media-parser 4.0.193 → 4.0.195
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/av1-codec-string.d.ts +3 -0
- package/dist/av1-codec-string.js +91 -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 +8 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +112 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +16 -0
- package/dist/boxes/iso-base-media/mdat/mdat.js +97 -0
- package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
- package/dist/boxes/iso-base-media/moov/moov.js +4 -2
- package/dist/boxes/iso-base-media/mvhd.js +7 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
- package/dist/boxes/iso-base-media/process-box.js +356 -18
- 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-hvcc.d.ts +20 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -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 +11 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +30 -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.js +1 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
- 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 +12 -5
- package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
- package/dist/boxes/iso-base-media/stsd/stco.d.ts +14 -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 +4 -2
- package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
- 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/tkhd.d.ts +3 -0
- package/dist/boxes/iso-base-media/tkhd.js +41 -14
- package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
- package/dist/boxes/iso-base-media/trak/trak.js +4 -2
- 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/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/bitstream/av1/bitstream-frame-header.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
- package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
- package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
- package/dist/boxes/webm/bitstream/av1/frame.d.ts +0 -0
- package/dist/boxes/webm/bitstream/av1/frame.js +1 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
- package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
- package/dist/boxes/webm/bitstream/av1.js +118 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -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-track.d.ts +6 -0
- package/dist/boxes/webm/get-track.js +183 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
- package/dist/boxes/webm/parse-webm-header.js +2 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
- package/dist/boxes/webm/segments/all-segments.js +277 -0
- package/dist/boxes/webm/segments/duration.d.ts +1 -1
- package/dist/boxes/webm/segments/duration.js +13 -9
- package/dist/boxes/webm/segments/info.d.ts +2 -1
- package/dist/boxes/webm/segments/info.js +12 -4
- package/dist/boxes/webm/segments/main.d.ts +0 -2
- package/dist/boxes/webm/segments/main.js +0 -11
- package/dist/boxes/webm/segments/muxing.d.ts +1 -1
- package/dist/boxes/webm/segments/muxing.js +1 -2
- package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
- package/dist/boxes/webm/segments/parse-children.js +82 -6
- package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
- package/dist/boxes/webm/segments/seek-head.js +12 -3
- package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
- package/dist/boxes/webm/segments/seek-position.js +1 -2
- package/dist/boxes/webm/segments/seek.d.ts +7 -2
- package/dist/boxes/webm/segments/seek.js +22 -9
- package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
- package/dist/boxes/webm/segments/track-entry.js +269 -57
- package/dist/boxes/webm/segments/tracks.d.ts +2 -1
- package/dist/boxes/webm/segments/tracks.js +12 -4
- package/dist/boxes/webm/segments/void.d.ts +1 -1
- package/dist/boxes/webm/segments/void.js +1 -2
- package/dist/boxes/webm/segments/writing.d.ts +1 -1
- package/dist/boxes/webm/segments/writing.js +1 -2
- package/dist/boxes/webm/segments.d.ts +8 -4
- package/dist/boxes/webm/segments.js +176 -40
- package/dist/boxes/webm/traversal.d.ts +7 -0
- package/dist/boxes/webm/traversal.js +25 -0
- package/dist/buffer-iterator.d.ts +16 -1
- package/dist/buffer-iterator.js +124 -41
- package/dist/combine-uint8array.d.ts +1 -0
- package/dist/combine-uint8array.js +13 -0
- package/dist/from-fetch.d.ts +2 -0
- package/dist/from-fetch.js +54 -0
- package/dist/from-node.js +12 -2
- package/dist/from-web-file.d.ts +2 -0
- package/dist/from-web-file.js +34 -0
- package/dist/get-audio-codec.d.ts +19 -0
- package/dist/get-audio-codec.js +153 -60
- package/dist/get-dimensions.d.ts +8 -2
- package/dist/get-dimensions.js +13 -91
- package/dist/get-duration.js +4 -7
- package/dist/get-fps.d.ts +4 -3
- package/dist/get-fps.js +17 -116
- package/dist/get-sample-aspect-ratio.d.ts +37 -0
- package/dist/get-sample-aspect-ratio.js +137 -0
- package/dist/get-sample-positions.d.ts +22 -0
- package/dist/get-sample-positions.js +54 -0
- package/dist/get-tracks.d.ts +49 -0
- package/dist/get-tracks.js +84 -0
- package/dist/get-video-codec.d.ts +2 -0
- package/dist/get-video-codec.js +47 -31
- package/dist/has-all-info.d.ts +2 -1
- package/dist/has-all-info.js +14 -5
- package/dist/index.d.ts +1 -0
- package/dist/make-hvc1-codec-strings.d.ts +2 -0
- package/dist/make-hvc1-codec-strings.js +47 -0
- package/dist/options.d.ts +26 -4
- package/dist/parse-media.js +76 -20
- package/dist/parse-result.d.ts +17 -5
- package/dist/parse-video.d.ts +12 -2
- package/dist/parse-video.js +15 -6
- package/dist/parser-context.d.ts +8 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +23 -0
- package/dist/parser-state.js +112 -0
- package/dist/reader.d.ts +2 -2
- package/dist/traversal.d.ts +56 -0
- package/dist/traversal.js +331 -0
- package/dist/understand-vorbis.d.ts +1 -0
- package/dist/understand-vorbis.js +12 -0
- package/dist/webcodec-sample-types.d.ts +21 -0
- package/dist/webcodec-sample-types.js +2 -0
- package/package.json +10 -2
- package/src/add-new-matroska-tracks.ts +23 -0
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
- package/src/boxes/iso-base-media/make-track.ts +157 -0
- package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
- package/src/boxes/iso-base-media/moov/moov.ts +8 -3
- package/src/boxes/iso-base-media/mvhd.ts +7 -1
- package/src/boxes/iso-base-media/process-box.ts +426 -21
- package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
- package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
- package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
- package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
- package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
- package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
- package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
- package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
- package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
- package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
- package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
- package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
- package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
- package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
- package/src/boxes/iso-base-media/tkhd.ts +63 -16
- package/src/boxes/iso-base-media/trak/trak.ts +8 -3
- package/src/boxes/iso-base-media/void-box.ts +4 -0
- package/src/boxes/webm/allowed-partial-segments.ts +1 -0
- package/src/boxes/webm/av1-codec-private.ts +113 -0
- package/src/boxes/webm/description.ts +101 -0
- package/src/boxes/webm/get-ready-tracks.ts +36 -0
- package/src/boxes/webm/get-track.ts +250 -0
- package/src/boxes/webm/parse-webm-header.ts +6 -2
- package/src/boxes/webm/segments/all-segments.ts +285 -0
- package/src/boxes/webm/segments/duration.ts +15 -8
- package/src/boxes/webm/segments/info.ts +18 -4
- package/src/boxes/webm/segments/main.ts +0 -13
- package/src/boxes/webm/segments/muxing.ts +1 -1
- package/src/boxes/webm/segments/parse-children.ts +132 -9
- package/src/boxes/webm/segments/seek-head.ts +17 -4
- package/src/boxes/webm/segments/seek-position.ts +1 -2
- package/src/boxes/webm/segments/seek.ts +31 -9
- package/src/boxes/webm/segments/track-entry.ts +475 -65
- package/src/boxes/webm/segments/tracks.ts +17 -7
- package/src/boxes/webm/segments/void.ts +4 -2
- package/src/boxes/webm/segments/writing.ts +1 -1
- package/src/boxes/webm/segments.ts +266 -42
- package/src/boxes/webm/traversal.ts +32 -0
- package/src/buffer-iterator.ts +155 -40
- package/src/combine-uint8array.ts +13 -0
- package/src/{from-web.ts → from-fetch.ts} +18 -7
- package/src/from-node.ts +15 -2
- package/src/from-web-file.ts +39 -0
- package/src/get-audio-codec.ts +213 -84
- package/src/get-dimensions.ts +25 -132
- package/src/get-duration.ts +4 -8
- package/src/get-fps.ts +27 -172
- package/src/get-sample-aspect-ratio.ts +204 -0
- package/src/get-sample-positions.ts +93 -0
- package/src/get-tracks.ts +147 -0
- package/src/get-video-codec.ts +62 -47
- package/src/has-all-info.ts +35 -5
- package/src/index.ts +8 -0
- package/src/make-hvc1-codec-strings.ts +55 -0
- package/src/options.ts +48 -9
- package/src/parse-media.ts +112 -25
- package/src/parse-result.ts +29 -4
- package/src/parse-video.ts +32 -7
- package/src/parser-context.ts +9 -0
- package/src/parser-state.ts +151 -0
- package/src/reader.ts +3 -3
- package/src/test/aspect-ratio.test.ts +42 -0
- package/src/test/av1.test.ts +108 -0
- package/src/test/duration.test.ts +5 -21
- package/src/test/matroska.test.ts +350 -31
- package/src/test/mvhd.test.ts +6 -1
- package/src/test/parse-esds.test.ts +29 -6
- package/src/test/parse-stco.test.ts +59 -0
- package/src/test/parse-stsc.test.ts +104 -0
- package/src/test/parse-stsz.test.ts +57 -0
- package/src/test/parse-stts.test.ts +1 -1
- package/src/test/parse-video.test.ts +23 -35
- package/src/test/parse-webm.test.ts +5 -5
- package/src/test/stream-local.test.ts +543 -47
- package/src/test/stream-remote.test.ts +15 -13
- package/src/test/stream-samples.test.ts +259 -0
- package/src/test/stsd.test.ts +60 -8
- package/src/test/tkhd.test.ts +4 -1
- package/src/traversal.ts +496 -0
- package/src/webcodec-sample-types.ts +30 -0
- package/tsconfig.json +5 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/boxes.json +0 -1
- /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTrack = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const make_hvc1_codec_strings_1 = require("../../make-hvc1-codec-strings");
|
|
6
|
+
const traversal_1 = require("../../traversal");
|
|
7
|
+
const av1_codec_private_1 = require("./av1-codec-private");
|
|
8
|
+
const description_1 = require("./description");
|
|
9
|
+
const getDescription = (track) => {
|
|
10
|
+
const codec = (0, traversal_1.getCodecSegment)(track);
|
|
11
|
+
if (!codec) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
if (codec.codec === 'V_MPEG4/ISO/AVC' || codec.codec === 'V_MPEGH/ISO/HEVC') {
|
|
15
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
16
|
+
if (priv) {
|
|
17
|
+
return priv;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
};
|
|
22
|
+
const getMatroskaVideoCodecString = ({ track, codecSegment: codec, }) => {
|
|
23
|
+
if (codec.codec === 'V_VP8') {
|
|
24
|
+
return 'vp8';
|
|
25
|
+
}
|
|
26
|
+
if (codec.codec === 'V_VP9') {
|
|
27
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
28
|
+
if (priv) {
|
|
29
|
+
throw new Error('@remotion/media-parser cannot handle the private data for VP9. Do you have an example file you could send so we can implement it?');
|
|
30
|
+
}
|
|
31
|
+
return 'vp09.00.10.08';
|
|
32
|
+
}
|
|
33
|
+
if (codec.codec === 'V_MPEG4/ISO/AVC') {
|
|
34
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
35
|
+
if (priv) {
|
|
36
|
+
return `avc1.${priv[1].toString(16).padStart(2, '0')}${priv[2].toString(16).padStart(2, '0')}${priv[3].toString(16).padStart(2, '0')}`;
|
|
37
|
+
}
|
|
38
|
+
throw new Error('Could not find a CodecPrivate field in TrackEntry');
|
|
39
|
+
}
|
|
40
|
+
if (codec.codec === 'V_AV1') {
|
|
41
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
42
|
+
if (!priv) {
|
|
43
|
+
throw new Error('Expected private data in AV1 track');
|
|
44
|
+
}
|
|
45
|
+
return (0, av1_codec_private_1.parseAv1PrivateData)(priv, null);
|
|
46
|
+
}
|
|
47
|
+
if (codec.codec === 'V_MPEGH/ISO/HEVC') {
|
|
48
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
49
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv);
|
|
50
|
+
return 'hvc1.' + (0, make_hvc1_codec_strings_1.getHvc1CodecString)(iterator);
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Unknown codec: ${codec.codec}`);
|
|
53
|
+
};
|
|
54
|
+
const getMatroskaAudioCodecString = (track) => {
|
|
55
|
+
const codec = (0, traversal_1.getCodecSegment)(track);
|
|
56
|
+
if (!codec) {
|
|
57
|
+
throw new Error('Expected codec segment');
|
|
58
|
+
}
|
|
59
|
+
if (codec.codec === 'A_OPUS') {
|
|
60
|
+
return 'opus';
|
|
61
|
+
}
|
|
62
|
+
if (codec.codec === 'A_VORBIS') {
|
|
63
|
+
return 'vorbis';
|
|
64
|
+
}
|
|
65
|
+
if (codec.codec === 'A_PCM/INT/LIT') {
|
|
66
|
+
// https://github.com/ietf-wg-cellar/matroska-specification/issues/142#issuecomment-330004950
|
|
67
|
+
// Audio samples MUST be considered as signed values, except if the audio bit depth is 8 which MUST be interpreted as unsigned values.
|
|
68
|
+
const bitDepth = (0, traversal_1.getBitDepth)(track);
|
|
69
|
+
if (bitDepth === null) {
|
|
70
|
+
throw new Error('Expected bit depth');
|
|
71
|
+
}
|
|
72
|
+
if (bitDepth === 8) {
|
|
73
|
+
return 'pcm-u8';
|
|
74
|
+
}
|
|
75
|
+
return 'pcm-s' + bitDepth;
|
|
76
|
+
}
|
|
77
|
+
if (codec.codec === 'A_AAC') {
|
|
78
|
+
const priv = (0, traversal_1.getPrivateData)(track);
|
|
79
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv);
|
|
80
|
+
iterator.startReadingBits();
|
|
81
|
+
/**
|
|
82
|
+
* ChatGPT
|
|
83
|
+
* ▪ The first 5 bits represent the AOT.
|
|
84
|
+
▪ Common values:
|
|
85
|
+
◦ 1 for AAC Main
|
|
86
|
+
◦ 2 for AAC LC (Low Complexity)
|
|
87
|
+
◦ 3 for AAC SSR (Scalable Sample Rate)
|
|
88
|
+
◦ 4 for AAC LTP (Long Term Prediction)
|
|
89
|
+
◦ 5 for SBR (Spectral Band Replication)
|
|
90
|
+
◦ 29 for HE-AAC (which uses SBR with AAC LC)
|
|
91
|
+
*/
|
|
92
|
+
/**
|
|
93
|
+
* Fully qualified codec:
|
|
94
|
+
* This codec has multiple possible codec strings:
|
|
95
|
+
"mp4a.40.2" — MPEG-4 AAC LC
|
|
96
|
+
"mp4a.40.02" — MPEG-4 AAC LC, leading 0 for Aud-OTI compatibility
|
|
97
|
+
"mp4a.40.5" — MPEG-4 HE-AAC v1 (AAC LC + SBR)
|
|
98
|
+
"mp4a.40.05" — MPEG-4 HE-AAC v1 (AAC LC + SBR), leading 0 for Aud-OTI compatibility
|
|
99
|
+
"mp4a.40.29" — MPEG-4 HE-AAC v2 (AAC LC + SBR + PS)
|
|
100
|
+
"mp4a.67" — MPEG-2 AAC LC
|
|
101
|
+
*/
|
|
102
|
+
const profile = iterator.getBits(5);
|
|
103
|
+
iterator.stopReadingBits();
|
|
104
|
+
iterator.destroy();
|
|
105
|
+
return `mp4a.40.${profile.toString().padStart(2, '0')}`;
|
|
106
|
+
}
|
|
107
|
+
if (codec.codec === 'A_MPEG/L3') {
|
|
108
|
+
return 'mp3';
|
|
109
|
+
}
|
|
110
|
+
throw new Error(`Unknown codec: ${codec.codec}`);
|
|
111
|
+
};
|
|
112
|
+
const getTrack = ({ timescale, track, }) => {
|
|
113
|
+
const trackType = (0, traversal_1.getTrackTypeSegment)(track);
|
|
114
|
+
if (!trackType) {
|
|
115
|
+
throw new Error('Expected track type segment');
|
|
116
|
+
}
|
|
117
|
+
const trackId = (0, traversal_1.getTrackId)(track);
|
|
118
|
+
if (trackType.trackType === 'video') {
|
|
119
|
+
const width = (0, traversal_1.getWidthSegment)(track);
|
|
120
|
+
if (width === null) {
|
|
121
|
+
throw new Error('Expected width segment');
|
|
122
|
+
}
|
|
123
|
+
const height = (0, traversal_1.getHeightSegment)(track);
|
|
124
|
+
if (height === null) {
|
|
125
|
+
throw new Error('Expected height segment');
|
|
126
|
+
}
|
|
127
|
+
const displayHeight = (0, traversal_1.getDisplayHeightSegment)(track);
|
|
128
|
+
const displayWidth = (0, traversal_1.getDisplayWidthSegment)(track);
|
|
129
|
+
const codec = (0, traversal_1.getCodecSegment)(track);
|
|
130
|
+
if (!codec) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const codecString = getMatroskaVideoCodecString({
|
|
134
|
+
track,
|
|
135
|
+
codecSegment: codec,
|
|
136
|
+
});
|
|
137
|
+
if (!codecString) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
type: 'video',
|
|
142
|
+
trackId,
|
|
143
|
+
codec: codecString,
|
|
144
|
+
description: getDescription(track),
|
|
145
|
+
height: displayHeight ? displayHeight.displayHeight : height.height,
|
|
146
|
+
width: displayWidth ? displayWidth.displayWidth : width.width,
|
|
147
|
+
sampleAspectRatio: {
|
|
148
|
+
numerator: 1,
|
|
149
|
+
denominator: 1,
|
|
150
|
+
},
|
|
151
|
+
timescale,
|
|
152
|
+
samplePositions: [],
|
|
153
|
+
codedHeight: height.height,
|
|
154
|
+
codedWidth: width.width,
|
|
155
|
+
displayAspectHeight: displayHeight
|
|
156
|
+
? displayHeight.displayHeight
|
|
157
|
+
: height.height,
|
|
158
|
+
displayAspectWidth: displayWidth
|
|
159
|
+
? displayWidth.displayWidth
|
|
160
|
+
: width.width,
|
|
161
|
+
rotation: 0,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (trackType.trackType === 'audio') {
|
|
165
|
+
const sampleRate = (0, traversal_1.getSampleRate)(track);
|
|
166
|
+
const numberOfChannels = (0, traversal_1.getNumberOfChannels)(track);
|
|
167
|
+
if (sampleRate === null) {
|
|
168
|
+
throw new Error('Could not find sample rate or number of channels');
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
type: 'audio',
|
|
172
|
+
trackId,
|
|
173
|
+
codec: getMatroskaAudioCodecString(track),
|
|
174
|
+
samplePositions: null,
|
|
175
|
+
timescale,
|
|
176
|
+
numberOfChannels,
|
|
177
|
+
sampleRate,
|
|
178
|
+
description: (0, description_1.getAudioDescription)(track),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
};
|
|
183
|
+
exports.getTrack = getTrack;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
2
|
import type { ParseResult } from '../../parse-result';
|
|
3
|
-
|
|
3
|
+
import type { ParserContext } from '../../parser-context';
|
|
4
|
+
export declare const parseWebm: (counter: BufferIterator, parserContext: ParserContext) => Promise<ParseResult>;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseWebm = void 0;
|
|
4
4
|
const segments_1 = require("./segments");
|
|
5
5
|
// Parsing according to https://darkcoding.net/software/reading-mediarecorders-webm-opus-output/
|
|
6
|
-
const parseWebm = (counter) => {
|
|
6
|
+
const parseWebm = (counter, parserContext) => {
|
|
7
7
|
counter.discard(4);
|
|
8
8
|
const length = counter.getVint();
|
|
9
9
|
if (length !== 31 && length !== 35) {
|
|
@@ -11,6 +11,6 @@ const parseWebm = (counter) => {
|
|
|
11
11
|
}
|
|
12
12
|
// Discard header for now
|
|
13
13
|
counter.discard(length);
|
|
14
|
-
return
|
|
14
|
+
return (0, segments_1.expectSegment)(counter, parserContext);
|
|
15
15
|
};
|
|
16
16
|
exports.parseWebm = parseWebm;
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
export declare const matroskaElements: {
|
|
2
|
+
readonly EBMLMaxIDLength: "0x42f2";
|
|
3
|
+
readonly EBMLMaxSizeLength: "0x42f3";
|
|
4
|
+
readonly Segment: "0x18538067";
|
|
5
|
+
readonly SeekHead: "0x114d9b74";
|
|
6
|
+
readonly Seek: "0x4dbb";
|
|
7
|
+
readonly SeekID: "0x53ab";
|
|
8
|
+
readonly SeekPosition: "0x53ac";
|
|
9
|
+
readonly Info: "0x1549a966";
|
|
10
|
+
readonly SegmentUUID: "0x73a4";
|
|
11
|
+
readonly SegmentFilename: "0x7384";
|
|
12
|
+
readonly PrevUUID: "0x3cb923";
|
|
13
|
+
readonly PrevFilename: "0x3c83ab";
|
|
14
|
+
readonly NextUUID: "0x3eb923";
|
|
15
|
+
readonly NextFilename: "0x3e83bb";
|
|
16
|
+
readonly SegmentFamily: "0x4444";
|
|
17
|
+
readonly ChapterTranslate: "0x6924";
|
|
18
|
+
readonly ChapterTranslateID: "0x69a5";
|
|
19
|
+
readonly ChapterTranslateCodec: "0x69bf";
|
|
20
|
+
readonly ChapterTranslateEditionUID: "0x69fc";
|
|
21
|
+
readonly TimestampScale: "0x2ad7b1";
|
|
22
|
+
readonly Duration: "0x4489";
|
|
23
|
+
readonly DateUTC: "0x4461";
|
|
24
|
+
readonly Title: "0x7ba9";
|
|
25
|
+
readonly MuxingApp: "0x4d80";
|
|
26
|
+
readonly WritingApp: "0x5741";
|
|
27
|
+
readonly Cluster: "0x1f43b675";
|
|
28
|
+
readonly Timestamp: "0xe7";
|
|
29
|
+
readonly SilentTracks: "0x5854";
|
|
30
|
+
readonly SilentTrackNumber: "0x58d7";
|
|
31
|
+
readonly Position: "0xa7";
|
|
32
|
+
readonly PrevSize: "0xab";
|
|
33
|
+
readonly SimpleBlock: "0xa3";
|
|
34
|
+
readonly BlockGroup: "0xa0";
|
|
35
|
+
readonly Block: "0xa1";
|
|
36
|
+
readonly BlockVirtual: "0xa2";
|
|
37
|
+
readonly BlockAdditions: "0x75a1";
|
|
38
|
+
readonly BlockMore: "0xa6";
|
|
39
|
+
readonly BlockAdditional: "0xa5";
|
|
40
|
+
readonly BlockAddID: "0xee";
|
|
41
|
+
readonly BlockDuration: "0x9b";
|
|
42
|
+
readonly ReferencePriority: "0xfa";
|
|
43
|
+
readonly ReferenceBlock: "0xfb";
|
|
44
|
+
readonly ReferenceVirtual: "0xfd";
|
|
45
|
+
readonly CodecState: "0xa4";
|
|
46
|
+
readonly DiscardPadding: "0x75a2";
|
|
47
|
+
readonly Slices: "0x8e";
|
|
48
|
+
readonly TimeSlice: "0xe8";
|
|
49
|
+
readonly LaceNumber: "0xcc";
|
|
50
|
+
readonly FrameNumber: "0xcd";
|
|
51
|
+
readonly BlockAdditionID: "0xcb";
|
|
52
|
+
readonly Delay: "0xce";
|
|
53
|
+
readonly SliceDuration: "0xcf";
|
|
54
|
+
readonly ReferenceFrame: "0xc8";
|
|
55
|
+
readonly ReferenceOffset: "0xc9";
|
|
56
|
+
readonly ReferenceTimestamp: "0xca";
|
|
57
|
+
readonly EncryptedBlock: "0xaf";
|
|
58
|
+
readonly Tracks: "0x1654ae6b";
|
|
59
|
+
readonly TrackEntry: "0xae";
|
|
60
|
+
readonly TrackNumber: "0xd7";
|
|
61
|
+
readonly TrackUID: "0x73c5";
|
|
62
|
+
readonly TrackType: "0x83";
|
|
63
|
+
readonly FlagEnabled: "0xb9";
|
|
64
|
+
readonly FlagDefault: "0x88";
|
|
65
|
+
readonly FlagForced: "0x55aa";
|
|
66
|
+
readonly FlagHearingImpaired: "0x55ab";
|
|
67
|
+
readonly FlagVisualImpaired: "0x55ac";
|
|
68
|
+
readonly FlagTextDescriptions: "0x55ad";
|
|
69
|
+
readonly FlagOriginal: "0x55ae";
|
|
70
|
+
readonly FlagCommentary: "0x55af";
|
|
71
|
+
readonly FlagLacing: "0x9c";
|
|
72
|
+
readonly MinCache: "0x6de7";
|
|
73
|
+
readonly MaxCache: "0x6df8";
|
|
74
|
+
readonly DefaultDuration: "0x23e383";
|
|
75
|
+
readonly DefaultDecodedFieldDuration: "0x234e7a";
|
|
76
|
+
readonly TrackTimestampScale: "0x23314f";
|
|
77
|
+
readonly TrackOffset: "0x537f";
|
|
78
|
+
readonly MaxBlockAdditionID: "0x55ee";
|
|
79
|
+
readonly BlockAdditionMapping: "0x41e4";
|
|
80
|
+
readonly BlockAddIDValue: "0x41f0";
|
|
81
|
+
readonly BlockAddIDName: "0x41a4";
|
|
82
|
+
readonly BlockAddIDType: "0x41e7";
|
|
83
|
+
readonly BlockAddIDExtraData: "0x41ed";
|
|
84
|
+
readonly Name: "0x536e";
|
|
85
|
+
readonly Language: "0x22b59c";
|
|
86
|
+
readonly LanguageBCP47: "0x22b59d";
|
|
87
|
+
readonly CodecID: "0x86";
|
|
88
|
+
readonly CodecPrivate: "0x63a2";
|
|
89
|
+
readonly CodecName: "0x258688";
|
|
90
|
+
readonly AttachmentLink: "0x7446";
|
|
91
|
+
readonly CodecSettings: "0x3a9697";
|
|
92
|
+
readonly CodecInfoURL: "0x3b4040";
|
|
93
|
+
readonly CodecDownloadURL: "0x26b240";
|
|
94
|
+
readonly CodecDecodeAll: "0xaa";
|
|
95
|
+
readonly TrackOverlay: "0x6fab";
|
|
96
|
+
readonly CodecDelay: "0x56aa";
|
|
97
|
+
readonly SeekPreRoll: "0x56bb";
|
|
98
|
+
readonly TrackTranslate: "0x6624";
|
|
99
|
+
readonly TrackTranslateTrackID: "0x66a5";
|
|
100
|
+
readonly TrackTranslateCodec: "0x66bf";
|
|
101
|
+
readonly TrackTranslateEditionUID: "0x66fc";
|
|
102
|
+
readonly Video: "0xe0";
|
|
103
|
+
readonly FlagInterlaced: "0x9a";
|
|
104
|
+
readonly FieldOrder: "0x9d";
|
|
105
|
+
readonly StereoMode: "0x53b8";
|
|
106
|
+
readonly AlphaMode: "0x53c0";
|
|
107
|
+
readonly OldStereoMode: "0x53b9";
|
|
108
|
+
readonly PixelWidth: "0xb0";
|
|
109
|
+
readonly PixelHeight: "0xba";
|
|
110
|
+
readonly PixelCropBottom: "0x54aa";
|
|
111
|
+
readonly PixelCropTop: "0x54bb";
|
|
112
|
+
readonly PixelCropLeft: "0x54cc";
|
|
113
|
+
readonly PixelCropRight: "0x54dd";
|
|
114
|
+
readonly DisplayWidth: "0x54b0";
|
|
115
|
+
readonly DisplayHeight: "0x54ba";
|
|
116
|
+
readonly DisplayUnit: "0x54b2";
|
|
117
|
+
readonly AspectRatioType: "0x54b3";
|
|
118
|
+
readonly UncompressedFourCC: "0x2eb524";
|
|
119
|
+
readonly GammaValue: "0x2fb523";
|
|
120
|
+
readonly FrameRate: "0x2383e3";
|
|
121
|
+
readonly Colour: "0x55b0";
|
|
122
|
+
readonly MatrixCoefficients: "0x55b1";
|
|
123
|
+
readonly BitsPerChannel: "0x55b2";
|
|
124
|
+
readonly ChromaSubsamplingHorz: "0x55b3";
|
|
125
|
+
readonly ChromaSubsamplingVert: "0x55b4";
|
|
126
|
+
readonly CbSubsamplingHorz: "0x55b5";
|
|
127
|
+
readonly CbSubsamplingVert: "0x55b6";
|
|
128
|
+
readonly ChromaSitingHorz: "0x55b7";
|
|
129
|
+
readonly ChromaSitingVert: "0x55b8";
|
|
130
|
+
readonly Range: "0x55b9";
|
|
131
|
+
readonly TransferCharacteristics: "0x55ba";
|
|
132
|
+
readonly Primaries: "0x55bb";
|
|
133
|
+
readonly MaxCLL: "0x55bc";
|
|
134
|
+
readonly MaxFALL: "0x55bd";
|
|
135
|
+
readonly MasteringMetadata: "0x55d0";
|
|
136
|
+
readonly PrimaryRChromaticityX: "0x55d1";
|
|
137
|
+
readonly PrimaryRChromaticityY: "0x55d2";
|
|
138
|
+
readonly PrimaryGChromaticityX: "0x55d3";
|
|
139
|
+
readonly PrimaryGChromaticityY: "0x55d4";
|
|
140
|
+
readonly PrimaryBChromaticityX: "0x55d5";
|
|
141
|
+
readonly PrimaryBChromaticityY: "0x55d6";
|
|
142
|
+
readonly WhitePointChromaticityX: "0x55d7";
|
|
143
|
+
readonly WhitePointChromaticityY: "0x55d8";
|
|
144
|
+
readonly LuminanceMax: "0x55d9";
|
|
145
|
+
readonly LuminanceMin: "0x55da";
|
|
146
|
+
readonly Projection: "0x7670";
|
|
147
|
+
readonly ProjectionType: "0x7671";
|
|
148
|
+
readonly ProjectionPrivate: "0x7672";
|
|
149
|
+
readonly ProjectionPoseYaw: "0x7673";
|
|
150
|
+
readonly ProjectionPosePitch: "0x7674";
|
|
151
|
+
readonly ProjectionPoseRoll: "0x7675";
|
|
152
|
+
readonly Audio: "0xe1";
|
|
153
|
+
readonly SamplingFrequency: "0xb5";
|
|
154
|
+
readonly OutputSamplingFrequency: "0x78b5";
|
|
155
|
+
readonly Channels: "0x9f";
|
|
156
|
+
readonly ChannelPositions: "0x7d7b";
|
|
157
|
+
readonly BitDepth: "0x6264";
|
|
158
|
+
readonly Emphasis: "0x52f1";
|
|
159
|
+
readonly TrackOperation: "0xe2";
|
|
160
|
+
readonly TrackCombinePlanes: "0xe3";
|
|
161
|
+
readonly TrackPlane: "0xe4";
|
|
162
|
+
readonly TrackPlaneUID: "0xe5";
|
|
163
|
+
readonly TrackPlaneType: "0xe6";
|
|
164
|
+
readonly TrackJoinBlocks: "0xe9";
|
|
165
|
+
readonly TrackJoinUID: "0xed";
|
|
166
|
+
readonly TrickTrackUID: "0xc0";
|
|
167
|
+
readonly TrickTrackSegmentUID: "0xc1";
|
|
168
|
+
readonly TrickTrackFlag: "0xc6";
|
|
169
|
+
readonly TrickMasterTrackUID: "0xc7";
|
|
170
|
+
readonly TrickMasterTrackSegmentUID: "0xc4";
|
|
171
|
+
readonly ContentEncodings: "0x6d80";
|
|
172
|
+
readonly ContentEncoding: "0x6240";
|
|
173
|
+
readonly ContentEncodingOrder: "0x5031";
|
|
174
|
+
readonly ContentEncodingScope: "0x5032";
|
|
175
|
+
readonly ContentEncodingType: "0x5033";
|
|
176
|
+
readonly ContentCompression: "0x5034";
|
|
177
|
+
readonly ContentCompAlgo: "0x4254";
|
|
178
|
+
readonly ContentCompSettings: "0x4255";
|
|
179
|
+
readonly ContentEncryption: "0x5035";
|
|
180
|
+
readonly ContentEncAlgo: "0x47e1";
|
|
181
|
+
readonly ContentEncKeyID: "0x47e2";
|
|
182
|
+
readonly ContentEncAESSettings: "0x47e7";
|
|
183
|
+
readonly AESSettingsCipherMode: "0x47e8";
|
|
184
|
+
readonly ContentSignature: "0x47e3";
|
|
185
|
+
readonly ContentSigKeyID: "0x47e4";
|
|
186
|
+
readonly ContentSigAlgo: "0x47e5";
|
|
187
|
+
readonly ContentSigHashAlgo: "0x47e6";
|
|
188
|
+
readonly Cues: "0x1c53bb6b";
|
|
189
|
+
readonly CuePoint: "0xbb";
|
|
190
|
+
readonly CueTime: "0xb3";
|
|
191
|
+
readonly CueTrackPositions: "0xb7";
|
|
192
|
+
readonly CueTrack: "0xf7";
|
|
193
|
+
readonly CueClusterPosition: "0xf1";
|
|
194
|
+
readonly CueRelativePosition: "0xf0";
|
|
195
|
+
readonly CueDuration: "0xb2";
|
|
196
|
+
readonly CueBlockNumber: "0x5378";
|
|
197
|
+
readonly CueCodecState: "0xea";
|
|
198
|
+
readonly CueReference: "0xdb";
|
|
199
|
+
readonly CueRefTime: "0x96";
|
|
200
|
+
readonly CueRefCluster: "0x97";
|
|
201
|
+
readonly CueRefNumber: "0x535f";
|
|
202
|
+
readonly CueRefCodecState: "0xeb";
|
|
203
|
+
readonly Attachments: "0x1941a469";
|
|
204
|
+
readonly AttachedFile: "0x61a7";
|
|
205
|
+
readonly FileDescription: "0x467e";
|
|
206
|
+
readonly FileName: "0x466e";
|
|
207
|
+
readonly FileMediaType: "0x4660";
|
|
208
|
+
readonly FileData: "0x465c";
|
|
209
|
+
readonly FileUID: "0x46ae";
|
|
210
|
+
readonly FileReferral: "0x4675";
|
|
211
|
+
readonly FileUsedStartTime: "0x4661";
|
|
212
|
+
readonly FileUsedEndTime: "0x4662";
|
|
213
|
+
readonly Chapters: "0x1043a770";
|
|
214
|
+
readonly EditionEntry: "0x45b9";
|
|
215
|
+
readonly EditionUID: "0x45bc";
|
|
216
|
+
readonly EditionFlagHidden: "0x45bd";
|
|
217
|
+
readonly EditionFlagDefault: "0x45db";
|
|
218
|
+
readonly EditionFlagOrdered: "0x45dd";
|
|
219
|
+
readonly EditionDisplay: "0x4520";
|
|
220
|
+
readonly EditionString: "0x4521";
|
|
221
|
+
readonly EditionLanguageIETF: "0x45e4";
|
|
222
|
+
readonly ChapterAtom: "0xb6";
|
|
223
|
+
readonly ChapterUID: "0x73c4";
|
|
224
|
+
readonly ChapterStringUID: "0x5654";
|
|
225
|
+
readonly ChapterTimeStart: "0x91";
|
|
226
|
+
readonly ChapterTimeEnd: "0x92";
|
|
227
|
+
readonly ChapterFlagHidden: "0x98";
|
|
228
|
+
readonly ChapterFlagEnabled: "0x4598";
|
|
229
|
+
readonly ChapterSegmentUUID: "0x6e67";
|
|
230
|
+
readonly ChapterSkipType: "0x4588";
|
|
231
|
+
readonly ChapterSegmentEditionUID: "0x6ebc";
|
|
232
|
+
readonly ChapterPhysicalEquiv: "0x63c3";
|
|
233
|
+
readonly ChapterTrack: "0x8f";
|
|
234
|
+
readonly ChapterTrackUID: "0x89";
|
|
235
|
+
readonly ChapterDisplay: "0x80";
|
|
236
|
+
readonly ChapString: "0x85";
|
|
237
|
+
readonly ChapLanguage: "0x437c";
|
|
238
|
+
readonly ChapLanguageBCP47: "0x437d";
|
|
239
|
+
readonly ChapCountry: "0x437e";
|
|
240
|
+
readonly ChapProcess: "0x6944";
|
|
241
|
+
readonly ChapProcessCodecID: "0x6955";
|
|
242
|
+
readonly ChapProcessPrivate: "0x450d";
|
|
243
|
+
readonly ChapProcessCommand: "0x6911";
|
|
244
|
+
readonly ChapProcessTime: "0x6922";
|
|
245
|
+
readonly ChapProcessData: "0x6933";
|
|
246
|
+
readonly Tags: "0x1254c367";
|
|
247
|
+
readonly Tag: "0x7373";
|
|
248
|
+
readonly Targets: "0x63c0";
|
|
249
|
+
readonly TargetTypeValue: "0x68ca";
|
|
250
|
+
readonly TargetType: "0x63ca";
|
|
251
|
+
readonly TagTrackUID: "0x63c5";
|
|
252
|
+
readonly TagEditionUID: "0x63c9";
|
|
253
|
+
readonly TagChapterUID: "0x63c4";
|
|
254
|
+
readonly TagAttachmentUID: "0x63c6";
|
|
255
|
+
readonly SimpleTag: "0x67c8";
|
|
256
|
+
readonly TagName: "0x45a3";
|
|
257
|
+
readonly TagLanguage: "0x447a";
|
|
258
|
+
readonly TagLanguageBCP47: "0x447b";
|
|
259
|
+
readonly TagDefault: "0x4484";
|
|
260
|
+
readonly TagDefaultBogus: "0x44b4";
|
|
261
|
+
readonly TagString: "0x4487";
|
|
262
|
+
readonly TagBinary: "0x4485";
|
|
263
|
+
readonly Void: "0xec";
|
|
264
|
+
readonly Crc32: "0xbf";
|
|
265
|
+
};
|
|
266
|
+
export declare const knownIdsWithOneLength: string[];
|
|
267
|
+
export declare const knownIdsWithTwoLength: string[];
|
|
268
|
+
export declare const knownIdsWithThreeLength: string[];
|
|
269
|
+
export declare const getSegmentName: (id: string) => string | undefined;
|