@remotion/media-parser 4.0.194 → 4.0.196
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/ftype.d.ts +9 -0
- package/dist/boxes/iso-base-media/ftype.js +31 -0
- 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 +6 -2
- package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
- 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 +322 -34
- 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/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 +9 -3
- package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
- 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/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 +15 -1
- package/dist/buffer-iterator.js +115 -46
- 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 +6 -0
- package/dist/from-web-file.d.ts +2 -0
- package/dist/from-web-file.js +34 -0
- package/dist/from-web.js +6 -9
- 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 +11 -1
- package/dist/get-sample-positions.js +31 -2
- package/dist/get-tracks.d.ts +44 -5
- package/dist/get-tracks.js +66 -48
- package/dist/get-video-codec.d.ts +2 -0
- package/dist/get-video-codec.js +47 -31
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +44 -0
- 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 +62 -17
- package/dist/parse-result.d.ts +16 -5
- package/dist/parse-video.d.ts +11 -2
- package/dist/parse-video.js +14 -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/read-and-increment-offset.d.ts +28 -0
- package/dist/read-and-increment-offset.js +177 -0
- package/dist/reader.d.ts +2 -2
- package/dist/traversal.d.ts +37 -0
- package/dist/traversal.js +244 -1
- 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 +388 -38
- 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 +140 -45
- package/src/combine-uint8array.ts +13 -0
- package/src/{from-web.ts → from-fetch.ts} +9 -1
- package/src/from-node.ts +8 -0
- 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 +90 -21
- package/src/parse-result.ts +28 -4
- package/src/parse-video.ts +30 -7
- package/src/parser-context.ts +9 -0
- package/src/parser-state.ts +151 -0
- package/src/reader.ts +2 -2
- 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 +542 -46
- 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/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
- package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
- package/dist/boxes/iso-base-media/esds.d.ts +0 -15
- package/dist/boxes/iso-base-media/esds.js +0 -27
- package/dist/get-codec.d.ts +0 -4
- package/dist/get-codec.js +0 -22
- /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
- /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
- /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.expectSegment = void 0;
|
|
4
|
+
const add_new_matroska_tracks_1 = require("../../add-new-matroska-tracks");
|
|
5
|
+
const get_track_1 = require("./get-track");
|
|
6
|
+
const all_segments_1 = require("./segments/all-segments");
|
|
4
7
|
const duration_1 = require("./segments/duration");
|
|
5
8
|
const info_1 = require("./segments/info");
|
|
6
|
-
const main_1 = require("./segments/main");
|
|
7
9
|
const muxing_1 = require("./segments/muxing");
|
|
10
|
+
const parse_children_1 = require("./segments/parse-children");
|
|
8
11
|
const seek_1 = require("./segments/seek");
|
|
9
12
|
const seek_head_1 = require("./segments/seek-head");
|
|
10
13
|
const seek_position_1 = require("./segments/seek-position");
|
|
@@ -14,111 +17,244 @@ const tracks_1 = require("./segments/tracks");
|
|
|
14
17
|
const unknown_1 = require("./segments/unknown");
|
|
15
18
|
const void_1 = require("./segments/void");
|
|
16
19
|
const writing_1 = require("./segments/writing");
|
|
17
|
-
const
|
|
18
|
-
|
|
20
|
+
const parseSegment = async ({ segmentId, iterator, length, parserContext, }) => {
|
|
21
|
+
if (length === 0) {
|
|
22
|
+
throw new Error(`Expected length of ${segmentId} to be greater than 0`);
|
|
23
|
+
}
|
|
19
24
|
if (segmentId === '0x') {
|
|
20
25
|
return {
|
|
21
26
|
type: 'unknown-segment',
|
|
22
27
|
id: segmentId,
|
|
23
28
|
};
|
|
24
29
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
// Log this to debug
|
|
31
|
+
/*
|
|
32
|
+
console.log(
|
|
33
|
+
'segmentId',
|
|
34
|
+
segmentId,
|
|
35
|
+
getSegmentName(segmentId),
|
|
36
|
+
iterator.counter.getOffset(),
|
|
37
|
+
);
|
|
38
|
+
*/
|
|
28
39
|
if (segmentId === '0x114d9b74') {
|
|
29
|
-
return (0, seek_head_1.parseSeekHeadSegment)(iterator);
|
|
40
|
+
return (0, seek_head_1.parseSeekHeadSegment)(iterator, length, parserContext);
|
|
41
|
+
}
|
|
42
|
+
if (segmentId === '0x53ab') {
|
|
43
|
+
return (0, seek_1.parseSeekIdSegment)(iterator);
|
|
30
44
|
}
|
|
31
45
|
if (segmentId === '0x4dbb') {
|
|
32
|
-
return (0, seek_1.parseSeekSegment)(iterator);
|
|
46
|
+
return (0, seek_1.parseSeekSegment)(iterator, length, parserContext);
|
|
33
47
|
}
|
|
34
48
|
if (segmentId === '0x53ac') {
|
|
35
|
-
return (0, seek_position_1.parseSeekPositionSegment)(iterator);
|
|
49
|
+
return (0, seek_position_1.parseSeekPositionSegment)(iterator, length);
|
|
36
50
|
}
|
|
37
51
|
if (segmentId === '0xec') {
|
|
38
|
-
return (0, void_1.parseVoidSegment)(iterator);
|
|
52
|
+
return (0, void_1.parseVoidSegment)(iterator, length);
|
|
39
53
|
}
|
|
40
54
|
if (segmentId === '0x1549a966') {
|
|
41
|
-
return (0, info_1.parseInfoSegment)(iterator);
|
|
55
|
+
return (0, info_1.parseInfoSegment)(iterator, length, parserContext);
|
|
42
56
|
}
|
|
43
|
-
if (segmentId ===
|
|
44
|
-
|
|
57
|
+
if (segmentId === all_segments_1.matroskaElements.TimestampScale) {
|
|
58
|
+
const timestampScale = (0, timestamp_scale_1.parseTimestampScaleSegment)(iterator);
|
|
59
|
+
parserContext.parserState.setTimescale(timestampScale.timestampScale);
|
|
60
|
+
return timestampScale;
|
|
45
61
|
}
|
|
46
62
|
if (segmentId === '0x4d80') {
|
|
47
|
-
return (0, muxing_1.parseMuxingSegment)(iterator);
|
|
63
|
+
return (0, muxing_1.parseMuxingSegment)(iterator, length);
|
|
48
64
|
}
|
|
49
65
|
if (segmentId === '0x5741') {
|
|
50
|
-
return (0, writing_1.parseWritingSegment)(iterator);
|
|
66
|
+
return (0, writing_1.parseWritingSegment)(iterator, length);
|
|
51
67
|
}
|
|
52
68
|
if (segmentId === '0x4489') {
|
|
53
|
-
return (0, duration_1.parseDurationSegment)(iterator);
|
|
69
|
+
return (0, duration_1.parseDurationSegment)(iterator, length);
|
|
54
70
|
}
|
|
55
71
|
if (segmentId === '0x1654ae6b') {
|
|
56
|
-
return (0, tracks_1.parseTracksSegment)(iterator);
|
|
57
|
-
}
|
|
58
|
-
if (segmentId ===
|
|
59
|
-
|
|
72
|
+
return (0, tracks_1.parseTracksSegment)(iterator, length, parserContext);
|
|
73
|
+
}
|
|
74
|
+
if (segmentId === all_segments_1.matroskaElements.TrackEntry) {
|
|
75
|
+
const trackEntry = await (0, track_entry_1.parseTrackEntry)(iterator, length, parserContext);
|
|
76
|
+
parserContext.parserState.onTrackEntrySegment(trackEntry);
|
|
77
|
+
const track = (0, get_track_1.getTrack)({
|
|
78
|
+
track: trackEntry,
|
|
79
|
+
timescale: parserContext.parserState.getTimescale(),
|
|
80
|
+
});
|
|
81
|
+
if (track) {
|
|
82
|
+
await (0, add_new_matroska_tracks_1.registerTrack)({
|
|
83
|
+
state: parserContext.parserState,
|
|
84
|
+
options: parserContext,
|
|
85
|
+
track,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return trackEntry;
|
|
60
89
|
}
|
|
61
90
|
if (segmentId === '0xd7') {
|
|
62
|
-
return (0, track_entry_1.parseTrackNumber)(iterator);
|
|
91
|
+
return (0, track_entry_1.parseTrackNumber)(iterator, length);
|
|
63
92
|
}
|
|
64
93
|
if (segmentId === '0x73c5') {
|
|
65
|
-
return (0, track_entry_1.parseTrackUID)(iterator);
|
|
94
|
+
return (0, track_entry_1.parseTrackUID)(iterator, length);
|
|
66
95
|
}
|
|
67
96
|
if (segmentId === '0x9c') {
|
|
68
|
-
return (0, track_entry_1.parseFlagLacing)(iterator);
|
|
97
|
+
return (0, track_entry_1.parseFlagLacing)(iterator, length);
|
|
69
98
|
}
|
|
70
99
|
if (segmentId === '0x22b59c') {
|
|
71
|
-
return (0, track_entry_1.parseLanguageSegment)(iterator);
|
|
100
|
+
return (0, track_entry_1.parseLanguageSegment)(iterator, length);
|
|
72
101
|
}
|
|
73
102
|
if (segmentId === '0x86') {
|
|
74
|
-
return (0, track_entry_1.parseCodecSegment)(iterator);
|
|
103
|
+
return (0, track_entry_1.parseCodecSegment)(iterator, length);
|
|
75
104
|
}
|
|
76
105
|
if (segmentId === '0x83') {
|
|
77
|
-
return (0, track_entry_1.parseTrackTypeSegment)(iterator);
|
|
106
|
+
return (0, track_entry_1.parseTrackTypeSegment)(iterator, length);
|
|
78
107
|
}
|
|
79
108
|
if (segmentId === '0x55ee') {
|
|
80
|
-
return (0, track_entry_1.parseMaxBlockAdditionId)(iterator);
|
|
109
|
+
return (0, track_entry_1.parseMaxBlockAdditionId)(iterator, length);
|
|
81
110
|
}
|
|
82
111
|
if (segmentId === '0x55b0') {
|
|
83
|
-
return (0, track_entry_1.parseColorSegment)(iterator);
|
|
112
|
+
return (0, track_entry_1.parseColorSegment)(iterator, length);
|
|
84
113
|
}
|
|
85
114
|
if (segmentId === '0x23e383') {
|
|
86
|
-
return (0, track_entry_1.parseDefaultDurationSegment)(iterator);
|
|
115
|
+
return (0, track_entry_1.parseDefaultDurationSegment)(iterator, length);
|
|
87
116
|
}
|
|
88
117
|
if (segmentId === '0xe0') {
|
|
89
|
-
return (0, track_entry_1.parseVideoSegment)(iterator);
|
|
118
|
+
return (0, track_entry_1.parseVideoSegment)(iterator, length, parserContext);
|
|
119
|
+
}
|
|
120
|
+
if (segmentId === '0xe1') {
|
|
121
|
+
return (0, track_entry_1.parseAudioSegment)(iterator, length, parserContext);
|
|
90
122
|
}
|
|
91
123
|
if (segmentId === '0xb0') {
|
|
92
|
-
return (0, track_entry_1.parseWidthSegment)(iterator);
|
|
124
|
+
return (0, track_entry_1.parseWidthSegment)(iterator, length);
|
|
93
125
|
}
|
|
94
126
|
if (segmentId === '0xba') {
|
|
95
|
-
return (0, track_entry_1.parseHeightSegment)(iterator);
|
|
127
|
+
return (0, track_entry_1.parseHeightSegment)(iterator, length);
|
|
128
|
+
}
|
|
129
|
+
if (segmentId === all_segments_1.matroskaElements.DisplayWidth) {
|
|
130
|
+
return (0, track_entry_1.parseDisplayWidthSegment)(iterator, length);
|
|
131
|
+
}
|
|
132
|
+
if (segmentId === all_segments_1.matroskaElements.DisplayHeight) {
|
|
133
|
+
return (0, track_entry_1.parseDisplayHeightSegment)(iterator, length);
|
|
96
134
|
}
|
|
97
135
|
if (segmentId === '0x9a') {
|
|
98
|
-
return (0, track_entry_1.parseInterlacedSegment)(iterator);
|
|
136
|
+
return (0, track_entry_1.parseInterlacedSegment)(iterator, length);
|
|
99
137
|
}
|
|
100
138
|
if (segmentId === '0x53c0') {
|
|
101
|
-
return (0, track_entry_1.parseAlphaModeSegment)(iterator);
|
|
139
|
+
return (0, track_entry_1.parseAlphaModeSegment)(iterator, length);
|
|
102
140
|
}
|
|
103
141
|
if (segmentId === '0x63a2') {
|
|
104
|
-
return (0, track_entry_1.parseCodecPrivateSegment)(iterator);
|
|
142
|
+
return (0, track_entry_1.parseCodecPrivateSegment)(iterator, length);
|
|
105
143
|
}
|
|
106
144
|
if (segmentId === '0x7ba9') {
|
|
107
|
-
return (0, track_entry_1.parseTitleSegment)(iterator);
|
|
145
|
+
return (0, track_entry_1.parseTitleSegment)(iterator, length);
|
|
108
146
|
}
|
|
109
147
|
if (segmentId === '0xbf') {
|
|
110
|
-
return (0, track_entry_1.parseCrc32Segment)(iterator);
|
|
148
|
+
return (0, track_entry_1.parseCrc32Segment)(iterator, length);
|
|
111
149
|
}
|
|
112
150
|
if (segmentId === '0x73a4') {
|
|
113
|
-
return (0, track_entry_1.parseSegmentUUIDSegment)(iterator);
|
|
151
|
+
return (0, track_entry_1.parseSegmentUUIDSegment)(iterator, length);
|
|
114
152
|
}
|
|
115
153
|
if (segmentId === '0x88') {
|
|
116
|
-
return (0, track_entry_1.parseDefaultFlagSegment)(iterator);
|
|
154
|
+
return (0, track_entry_1.parseDefaultFlagSegment)(iterator, length);
|
|
155
|
+
}
|
|
156
|
+
if (segmentId === '0x1254c367') {
|
|
157
|
+
return (0, track_entry_1.parseTagsSegment)(iterator, length, parserContext);
|
|
158
|
+
}
|
|
159
|
+
if (segmentId === '0x7373') {
|
|
160
|
+
return (0, track_entry_1.parseTagSegment)(iterator, length);
|
|
161
|
+
}
|
|
162
|
+
if (segmentId === all_segments_1.matroskaElements.SamplingFrequency) {
|
|
163
|
+
return (0, track_entry_1.parseSamplingFrequencySegment)(iterator, length);
|
|
164
|
+
}
|
|
165
|
+
if (segmentId === all_segments_1.matroskaElements.Channels) {
|
|
166
|
+
return (0, track_entry_1.parseChannelsSegment)(iterator, length);
|
|
167
|
+
}
|
|
168
|
+
if (segmentId === all_segments_1.matroskaElements.BitDepth) {
|
|
169
|
+
return (0, track_entry_1.parseBitDepthSegment)(iterator, length);
|
|
170
|
+
}
|
|
171
|
+
if (segmentId === '0xe7') {
|
|
172
|
+
return (0, track_entry_1.parseTimestampSegment)(iterator, length);
|
|
173
|
+
}
|
|
174
|
+
if (segmentId === '0xa3') {
|
|
175
|
+
return (0, track_entry_1.parseSimpleBlockSegment)({
|
|
176
|
+
iterator,
|
|
177
|
+
length,
|
|
178
|
+
parserContext,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
if (segmentId === '0xa0') {
|
|
182
|
+
return (0, track_entry_1.parseBlockGroupSegment)(iterator, length, parserContext);
|
|
183
|
+
}
|
|
184
|
+
if (segmentId === '0xa1') {
|
|
185
|
+
return (0, track_entry_1.parseBlockElementSegment)(iterator, length);
|
|
117
186
|
}
|
|
118
|
-
const length = iterator.getVint();
|
|
119
187
|
const bytesRemaining = iterator.byteLength() - iterator.counter.getOffset();
|
|
120
188
|
const toDiscard = Math.min(bytesRemaining, length > 0 ? length : bytesRemaining);
|
|
121
189
|
const child = (0, unknown_1.parseUnknownSegment)(iterator, segmentId, toDiscard);
|
|
122
190
|
return child;
|
|
123
191
|
};
|
|
192
|
+
const expectSegment = async (iterator, parserContext) => {
|
|
193
|
+
const bytesRemaining_ = iterator.bytesRemaining();
|
|
194
|
+
if (bytesRemaining_ === 0) {
|
|
195
|
+
return {
|
|
196
|
+
status: 'incomplete',
|
|
197
|
+
segments: [],
|
|
198
|
+
continueParsing: () => {
|
|
199
|
+
return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
|
|
200
|
+
},
|
|
201
|
+
skipTo: null,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const offset = iterator.counter.getOffset();
|
|
205
|
+
const segmentId = iterator.getMatroskaSegmentId();
|
|
206
|
+
const length = iterator.getVint();
|
|
207
|
+
const bytesRemainingNow = iterator.byteLength() - iterator.counter.getOffset();
|
|
208
|
+
if (segmentId === '0x18538067' || segmentId === '0x1f43b675') {
|
|
209
|
+
const main = await (0, parse_children_1.expectChildren)({
|
|
210
|
+
iterator,
|
|
211
|
+
length,
|
|
212
|
+
initialChildren: [],
|
|
213
|
+
wrap: segmentId === '0x18538067'
|
|
214
|
+
? (s) => ({
|
|
215
|
+
type: 'main-segment',
|
|
216
|
+
children: s,
|
|
217
|
+
})
|
|
218
|
+
: (s) => ({
|
|
219
|
+
type: 'cluster-segment',
|
|
220
|
+
children: s,
|
|
221
|
+
}),
|
|
222
|
+
parserContext,
|
|
223
|
+
});
|
|
224
|
+
if (main.status === 'incomplete') {
|
|
225
|
+
return {
|
|
226
|
+
status: 'incomplete',
|
|
227
|
+
segments: main.segments,
|
|
228
|
+
skipTo: null,
|
|
229
|
+
continueParsing: main.continueParsing,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
status: 'done',
|
|
234
|
+
segments: main.segments,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
if (bytesRemainingNow < length) {
|
|
238
|
+
const bytesRead = iterator.counter.getOffset() - offset;
|
|
239
|
+
iterator.counter.decrement(bytesRead);
|
|
240
|
+
return {
|
|
241
|
+
status: 'incomplete',
|
|
242
|
+
segments: [],
|
|
243
|
+
continueParsing: () => {
|
|
244
|
+
return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
|
|
245
|
+
},
|
|
246
|
+
skipTo: null,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const segment = await parseSegment({
|
|
250
|
+
segmentId,
|
|
251
|
+
iterator,
|
|
252
|
+
length,
|
|
253
|
+
parserContext,
|
|
254
|
+
});
|
|
255
|
+
return {
|
|
256
|
+
status: 'done',
|
|
257
|
+
segments: [segment],
|
|
258
|
+
};
|
|
259
|
+
};
|
|
124
260
|
exports.expectSegment = expectSegment;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnySegment } from '../../parse-result';
|
|
2
|
+
import type { MainSegment } from './segments/main';
|
|
3
|
+
import type { CodecSegment, TrackEntrySegment } from './segments/track-entry';
|
|
4
|
+
export declare const getMainSegment: (segments: AnySegment[]) => MainSegment | null;
|
|
5
|
+
export declare const getTrackNumber: (track: TrackEntrySegment) => number | null;
|
|
6
|
+
export declare const getTrackCodec: (track: TrackEntrySegment) => CodecSegment | null;
|
|
7
|
+
export declare const getTrackByNumber: (tracks: TrackEntrySegment[], id: number) => TrackEntrySegment | undefined;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTrackByNumber = exports.getTrackCodec = exports.getTrackNumber = exports.getMainSegment = void 0;
|
|
4
|
+
const getMainSegment = (segments) => {
|
|
5
|
+
return segments.find((s) => s.type === 'main-segment');
|
|
6
|
+
};
|
|
7
|
+
exports.getMainSegment = getMainSegment;
|
|
8
|
+
const getTrackNumber = (track) => {
|
|
9
|
+
var _a;
|
|
10
|
+
const child = track.children.find((b) => b.type === 'track-number-segment');
|
|
11
|
+
return (_a = child === null || child === void 0 ? void 0 : child.trackNumber) !== null && _a !== void 0 ? _a : null;
|
|
12
|
+
};
|
|
13
|
+
exports.getTrackNumber = getTrackNumber;
|
|
14
|
+
const getTrackCodec = (track) => {
|
|
15
|
+
const child = track.children.find((b) => b.type === 'codec-segment');
|
|
16
|
+
return child !== null && child !== void 0 ? child : null;
|
|
17
|
+
};
|
|
18
|
+
exports.getTrackCodec = getTrackCodec;
|
|
19
|
+
const getTrackByNumber = (tracks, id) => {
|
|
20
|
+
return tracks.find((track) => {
|
|
21
|
+
const trackNumber = (0, exports.getTrackNumber)(track);
|
|
22
|
+
return trackNumber === id;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.getTrackByNumber = getTrackByNumber;
|
|
@@ -4,16 +4,23 @@ export declare class OffsetCounter {
|
|
|
4
4
|
increment(amount: number): void;
|
|
5
5
|
getOffset(): number;
|
|
6
6
|
getDiscardedOffset(): number;
|
|
7
|
+
setDiscardedOffset(offset: number): void;
|
|
7
8
|
discardBytes(amount: number): void;
|
|
8
9
|
decrement(amount: number): void;
|
|
9
10
|
}
|
|
10
11
|
export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes?: number) => {
|
|
12
|
+
startReadingBits: () => void;
|
|
13
|
+
stopReadingBits: () => void;
|
|
11
14
|
skipTo: (offset: number) => void;
|
|
12
15
|
addData: (newData: Uint8Array) => void;
|
|
13
16
|
counter: OffsetCounter;
|
|
17
|
+
peekB: (length: number) => void;
|
|
18
|
+
peekD: (length: number) => void;
|
|
19
|
+
getBits: (bits: number) => number;
|
|
14
20
|
byteLength: () => number;
|
|
15
21
|
bytesRemaining: () => number;
|
|
16
22
|
isIsoBaseMedia: () => boolean;
|
|
23
|
+
leb128: () => number;
|
|
17
24
|
discardFirstBytes: () => void;
|
|
18
25
|
isWebm: () => boolean;
|
|
19
26
|
discard: (length: number) => void;
|
|
@@ -29,10 +36,17 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes?
|
|
|
29
36
|
getUint16: () => number;
|
|
30
37
|
getInt16: () => number;
|
|
31
38
|
getUint32: () => number;
|
|
32
|
-
|
|
39
|
+
getFixedPointUnsigned1616Number: () => number;
|
|
40
|
+
getFixedPointSigned1616Number: () => number;
|
|
41
|
+
getFixedPointSigned230Number: () => number;
|
|
33
42
|
getPascalString: () => number[];
|
|
34
43
|
getDecimalBytes(length: number): number;
|
|
35
44
|
getByteString(length: number): string;
|
|
36
45
|
getFloat64: () => number;
|
|
46
|
+
getFloat32: () => number;
|
|
47
|
+
getUint32Le: () => number;
|
|
48
|
+
getInt32Le: () => number;
|
|
49
|
+
destroy: () => void;
|
|
50
|
+
isMp3: () => boolean;
|
|
37
51
|
};
|
|
38
52
|
export type BufferIterator = ReturnType<typeof getArrayBufferIterator>;
|
package/dist/buffer-iterator.js
CHANGED
|
@@ -13,6 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var _OffsetCounter_offset, _OffsetCounter_discardedBytes;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.getArrayBufferIterator = exports.OffsetCounter = void 0;
|
|
16
|
+
const all_segments_1 = require("./boxes/webm/segments/all-segments");
|
|
16
17
|
class OffsetCounter {
|
|
17
18
|
constructor(initial) {
|
|
18
19
|
_OffsetCounter_offset.set(this, void 0);
|
|
@@ -32,6 +33,9 @@ class OffsetCounter {
|
|
|
32
33
|
getDiscardedOffset() {
|
|
33
34
|
return __classPrivateFieldGet(this, _OffsetCounter_offset, "f") - __classPrivateFieldGet(this, _OffsetCounter_discardedBytes, "f");
|
|
34
35
|
}
|
|
36
|
+
setDiscardedOffset(offset) {
|
|
37
|
+
__classPrivateFieldSet(this, _OffsetCounter_discardedBytes, offset, "f");
|
|
38
|
+
}
|
|
35
39
|
discardBytes(amount) {
|
|
36
40
|
__classPrivateFieldSet(this, _OffsetCounter_discardedBytes, __classPrivateFieldGet(this, _OffsetCounter_discardedBytes, "f") + amount, "f");
|
|
37
41
|
}
|
|
@@ -46,6 +50,7 @@ exports.OffsetCounter = OffsetCounter;
|
|
|
46
50
|
_OffsetCounter_offset = new WeakMap(), _OffsetCounter_discardedBytes = new WeakMap();
|
|
47
51
|
const isoBaseMediaMp4Pattern = new TextEncoder().encode('ftyp');
|
|
48
52
|
const webmPattern = new Uint8Array([0x1a, 0x45, 0xdf, 0xa3]);
|
|
53
|
+
const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
|
|
49
54
|
const matchesPattern = (pattern) => {
|
|
50
55
|
return (data) => {
|
|
51
56
|
return pattern.every((value, index) => data[index] === value);
|
|
@@ -59,7 +64,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
59
64
|
maxByteLength: maxBytes !== null && maxBytes !== void 0 ? maxBytes : 1000000000,
|
|
60
65
|
});
|
|
61
66
|
if (!buf.resize) {
|
|
62
|
-
throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. Use at least Node.js 20 or Bun.');
|
|
67
|
+
throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111');
|
|
63
68
|
}
|
|
64
69
|
let data = new Uint8Array(buf);
|
|
65
70
|
data.set(initialData);
|
|
@@ -90,6 +95,21 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
90
95
|
counter.increment(4);
|
|
91
96
|
return val;
|
|
92
97
|
};
|
|
98
|
+
const getUint32Le = () => {
|
|
99
|
+
const val = view.getUint32(counter.getDiscardedOffset(), true);
|
|
100
|
+
counter.increment(4);
|
|
101
|
+
return val;
|
|
102
|
+
};
|
|
103
|
+
const getInt32Le = () => {
|
|
104
|
+
const val = view.getInt32(counter.getDiscardedOffset(), true);
|
|
105
|
+
counter.increment(4);
|
|
106
|
+
return val;
|
|
107
|
+
};
|
|
108
|
+
const getInt32 = () => {
|
|
109
|
+
const val = view.getInt32(counter.getDiscardedOffset());
|
|
110
|
+
counter.increment(4);
|
|
111
|
+
return val;
|
|
112
|
+
};
|
|
93
113
|
const addData = (newData) => {
|
|
94
114
|
const oldLength = buf.byteLength;
|
|
95
115
|
const newLength = oldLength + newData.byteLength;
|
|
@@ -111,6 +131,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
111
131
|
const isWebm = () => {
|
|
112
132
|
return matchesPattern(webmPattern)(data.subarray(0, 4));
|
|
113
133
|
};
|
|
134
|
+
const isMp3 = () => {
|
|
135
|
+
return matchesPattern(mpegPattern)(data.subarray(0, 4));
|
|
136
|
+
};
|
|
114
137
|
const removeBytesRead = () => {
|
|
115
138
|
const bytesToRemove = counter.getDiscardedOffset();
|
|
116
139
|
// Only to this operation if it is really worth it 😇
|
|
@@ -124,18 +147,84 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
124
147
|
view = new DataView(data.buffer);
|
|
125
148
|
};
|
|
126
149
|
const skipTo = (offset) => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
150
|
+
const becomesSmaller = offset < counter.getOffset();
|
|
151
|
+
if (becomesSmaller) {
|
|
152
|
+
buf.resize(0);
|
|
153
|
+
counter.decrement(counter.getOffset() - offset);
|
|
154
|
+
counter.setDiscardedOffset(offset);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
buf.resize(offset);
|
|
158
|
+
const currentOffset = counter.getOffset();
|
|
159
|
+
counter.increment(offset - currentOffset);
|
|
160
|
+
removeBytesRead();
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const peekB = (length) => {
|
|
164
|
+
// eslint-disable-next-line no-console
|
|
165
|
+
console.log([...getSlice(length)].map((b) => b.toString(16).padStart(2, '0')));
|
|
166
|
+
counter.decrement(length);
|
|
167
|
+
};
|
|
168
|
+
const peekD = (length) => {
|
|
169
|
+
// eslint-disable-next-line no-console
|
|
170
|
+
console.log([...getSlice(length)].map((b) => b));
|
|
171
|
+
counter.decrement(length);
|
|
172
|
+
};
|
|
173
|
+
const leb128 = () => {
|
|
174
|
+
let result = 0;
|
|
175
|
+
let shift = 0;
|
|
176
|
+
let byte;
|
|
177
|
+
do {
|
|
178
|
+
byte = getBits(8);
|
|
179
|
+
result |= (byte & 0x7f) << shift;
|
|
180
|
+
shift += 7;
|
|
181
|
+
} while (byte >= 0x80); // Continue if the high bit is set
|
|
182
|
+
return result;
|
|
183
|
+
};
|
|
184
|
+
let bitIndex = 0;
|
|
185
|
+
const stopReadingBits = () => {
|
|
186
|
+
bitIndex = 0;
|
|
187
|
+
};
|
|
188
|
+
let byteToShift = 0;
|
|
189
|
+
const startReadingBits = () => {
|
|
190
|
+
byteToShift = getUint8();
|
|
191
|
+
};
|
|
192
|
+
const getBits = (bits) => {
|
|
193
|
+
let result = 0;
|
|
194
|
+
let bitsCollected = 0;
|
|
195
|
+
while (bitsCollected < bits) {
|
|
196
|
+
if (bitIndex >= 8) {
|
|
197
|
+
bitIndex = 0;
|
|
198
|
+
byteToShift = getUint8();
|
|
199
|
+
}
|
|
200
|
+
const remainingBitsInByte = 8 - bitIndex;
|
|
201
|
+
const bitsToReadNow = Math.min(bits - bitsCollected, remainingBitsInByte);
|
|
202
|
+
const mask = (1 << bitsToReadNow) - 1;
|
|
203
|
+
const shift = remainingBitsInByte - bitsToReadNow;
|
|
204
|
+
result <<= bitsToReadNow;
|
|
205
|
+
result |= (byteToShift >> shift) & mask;
|
|
206
|
+
bitsCollected += bitsToReadNow;
|
|
207
|
+
bitIndex += bitsToReadNow;
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
};
|
|
211
|
+
const destroy = () => {
|
|
212
|
+
data = new Uint8Array(0);
|
|
213
|
+
buf.resize(0);
|
|
131
214
|
};
|
|
132
215
|
return {
|
|
216
|
+
startReadingBits,
|
|
217
|
+
stopReadingBits,
|
|
133
218
|
skipTo,
|
|
134
219
|
addData,
|
|
135
220
|
counter,
|
|
221
|
+
peekB,
|
|
222
|
+
peekD,
|
|
223
|
+
getBits,
|
|
136
224
|
byteLength,
|
|
137
225
|
bytesRemaining,
|
|
138
226
|
isIsoBaseMedia,
|
|
227
|
+
leb128,
|
|
139
228
|
discardFirstBytes: removeBytesRead,
|
|
140
229
|
isWebm,
|
|
141
230
|
discard: (length) => {
|
|
@@ -157,62 +246,25 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
157
246
|
.join('')}`;
|
|
158
247
|
// Catch void block
|
|
159
248
|
// https://www.matroska.org/technical/elements.html
|
|
160
|
-
|
|
161
|
-
'0xec',
|
|
162
|
-
'0xae',
|
|
163
|
-
'0xd7',
|
|
164
|
-
'0x9c',
|
|
165
|
-
'0x86',
|
|
166
|
-
'0x83',
|
|
167
|
-
'0xe0',
|
|
168
|
-
'0xb0',
|
|
169
|
-
'0xba',
|
|
170
|
-
'0x9a',
|
|
171
|
-
'0xe1',
|
|
172
|
-
'0xbf',
|
|
173
|
-
'0x88',
|
|
174
|
-
];
|
|
175
|
-
if (knownIdsWithOneLength.includes(firstOneString)) {
|
|
249
|
+
if (all_segments_1.knownIdsWithOneLength.includes(firstOneString)) {
|
|
176
250
|
return firstOneString;
|
|
177
251
|
}
|
|
178
252
|
const firstTwo = getSlice(1);
|
|
179
|
-
const knownIdsWithTwoLength = [
|
|
180
|
-
'0x4dbb',
|
|
181
|
-
'0x53ac',
|
|
182
|
-
'0xec01',
|
|
183
|
-
'0x73c5',
|
|
184
|
-
'0x53c0',
|
|
185
|
-
'0x4d80',
|
|
186
|
-
'0x5741',
|
|
187
|
-
'0x4489',
|
|
188
|
-
'0x55ee',
|
|
189
|
-
'0x55b0',
|
|
190
|
-
'0x7ba9',
|
|
191
|
-
'0x63a2',
|
|
192
|
-
'0x73a4',
|
|
193
|
-
];
|
|
194
253
|
const firstTwoString = `${firstOneString}${Array.from(new Uint8Array(firstTwo))
|
|
195
254
|
.map((b) => {
|
|
196
255
|
return b.toString(16).padStart(2, '0');
|
|
197
256
|
})
|
|
198
257
|
.join('')}`;
|
|
199
|
-
if (knownIdsWithTwoLength.includes(firstTwoString)) {
|
|
258
|
+
if (all_segments_1.knownIdsWithTwoLength.includes(firstTwoString)) {
|
|
200
259
|
return firstTwoString;
|
|
201
260
|
}
|
|
202
|
-
const knownIdsWithThreeLength = [
|
|
203
|
-
'0x4d808c',
|
|
204
|
-
'0x57418c',
|
|
205
|
-
'0x448988',
|
|
206
|
-
'0x22b59c',
|
|
207
|
-
'0x23e383',
|
|
208
|
-
];
|
|
209
261
|
const firstThree = getSlice(1);
|
|
210
262
|
const firstThreeString = `${firstTwoString}${Array.from(new Uint8Array(firstThree))
|
|
211
263
|
.map((b) => {
|
|
212
264
|
return b.toString(16).padStart(2, '0');
|
|
213
265
|
})
|
|
214
266
|
.join('')}`;
|
|
215
|
-
if (knownIdsWithThreeLength.includes(firstThreeString)) {
|
|
267
|
+
if (all_segments_1.knownIdsWithThreeLength.includes(firstThreeString)) {
|
|
216
268
|
return firstThreeString;
|
|
217
269
|
}
|
|
218
270
|
const segmentId = getSlice(1);
|
|
@@ -271,10 +323,18 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
271
323
|
getUint32,
|
|
272
324
|
// https://developer.apple.com/documentation/quicktime-file-format/sound_sample_description_version_1
|
|
273
325
|
// A 32-bit unsigned fixed-point number (16.16) that indicates the rate at which the sound samples were obtained.
|
|
274
|
-
|
|
326
|
+
getFixedPointUnsigned1616Number: () => {
|
|
275
327
|
const val = getUint32();
|
|
276
328
|
return val / 2 ** 16;
|
|
277
329
|
},
|
|
330
|
+
getFixedPointSigned1616Number: () => {
|
|
331
|
+
const val = getInt32();
|
|
332
|
+
return val / 2 ** 16;
|
|
333
|
+
},
|
|
334
|
+
getFixedPointSigned230Number: () => {
|
|
335
|
+
const val = getInt32();
|
|
336
|
+
return val / 2 ** 30;
|
|
337
|
+
},
|
|
278
338
|
getPascalString: () => {
|
|
279
339
|
const val = getSlice(32);
|
|
280
340
|
return [...Array.from(new Uint8Array(val))];
|
|
@@ -293,6 +353,15 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
293
353
|
counter.increment(8);
|
|
294
354
|
return val;
|
|
295
355
|
},
|
|
356
|
+
getFloat32: () => {
|
|
357
|
+
const val = view.getFloat32(counter.getDiscardedOffset());
|
|
358
|
+
counter.increment(4);
|
|
359
|
+
return val;
|
|
360
|
+
},
|
|
361
|
+
getUint32Le,
|
|
362
|
+
getInt32Le,
|
|
363
|
+
destroy,
|
|
364
|
+
isMp3,
|
|
296
365
|
};
|
|
297
366
|
};
|
|
298
367
|
exports.getArrayBufferIterator = getArrayBufferIterator;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const combineUint8Arrays: (array1: Uint8Array | null, array2: Uint8Array) => Uint8Array;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.combineUint8Arrays = void 0;
|
|
4
|
+
const combineUint8Arrays = (array1, array2) => {
|
|
5
|
+
if (!array1) {
|
|
6
|
+
return array2;
|
|
7
|
+
}
|
|
8
|
+
const combined = new Uint8Array(array1.length + array2.length);
|
|
9
|
+
combined.set(array1);
|
|
10
|
+
combined.set(array2, array1.length);
|
|
11
|
+
return combined;
|
|
12
|
+
};
|
|
13
|
+
exports.combineUint8Arrays = combineUint8Arrays;
|