@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,4 +1,5 @@
|
|
|
1
1
|
import type {BufferIterator} from '../../../buffer-iterator';
|
|
2
|
+
import type {ParserContext} from '../../../parser-context';
|
|
2
3
|
import type {MatroskaSegment} from '../segments';
|
|
3
4
|
import {expectChildren} from './parse-children';
|
|
4
5
|
|
|
@@ -7,16 +8,25 @@ export type TracksSegment = {
|
|
|
7
8
|
children: MatroskaSegment[];
|
|
8
9
|
};
|
|
9
10
|
|
|
10
|
-
export const parseTracksSegment = (
|
|
11
|
-
|
|
11
|
+
export const parseTracksSegment = async (
|
|
12
|
+
iterator: BufferIterator,
|
|
13
|
+
length: number,
|
|
14
|
+
parserContext: ParserContext,
|
|
15
|
+
): Promise<TracksSegment> => {
|
|
16
|
+
const children = await expectChildren({
|
|
17
|
+
iterator,
|
|
18
|
+
length,
|
|
19
|
+
initialChildren: [],
|
|
20
|
+
wrap: null,
|
|
21
|
+
parserContext,
|
|
22
|
+
});
|
|
12
23
|
|
|
13
|
-
|
|
24
|
+
if (children.status === 'incomplete') {
|
|
25
|
+
throw new Error('Incomplete children');
|
|
26
|
+
}
|
|
14
27
|
|
|
15
28
|
return {
|
|
16
29
|
type: 'tracks-segment',
|
|
17
|
-
children:
|
|
18
|
-
iterator,
|
|
19
|
-
length - (iterator.counter.getOffset() - offset),
|
|
20
|
-
),
|
|
30
|
+
children: children.segments as MatroskaSegment[],
|
|
21
31
|
};
|
|
22
32
|
};
|
|
@@ -5,8 +5,10 @@ export type VoidSegment = {
|
|
|
5
5
|
length: number;
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
export const parseVoidSegment = (
|
|
9
|
-
|
|
8
|
+
export const parseVoidSegment = (
|
|
9
|
+
iterator: BufferIterator,
|
|
10
|
+
length: number,
|
|
11
|
+
): VoidSegment => {
|
|
10
12
|
iterator.discard(length);
|
|
11
13
|
|
|
12
14
|
return {
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import {registerTrack} from '../../add-new-matroska-tracks';
|
|
1
2
|
import type {BufferIterator} from '../../buffer-iterator';
|
|
3
|
+
import type {ParseResult} from '../../parse-result';
|
|
4
|
+
import type {ParserContext} from '../../parser-context';
|
|
5
|
+
import {getTrack} from './get-track';
|
|
6
|
+
import {matroskaElements} from './segments/all-segments';
|
|
2
7
|
import type {DurationSegment} from './segments/duration';
|
|
3
8
|
import {parseDurationSegment} from './segments/duration';
|
|
4
9
|
import type {InfoSegment} from './segments/info';
|
|
5
10
|
import {parseInfoSegment} from './segments/info';
|
|
6
|
-
import type
|
|
7
|
-
import {parseMainSegment} from './segments/main';
|
|
11
|
+
import {type MainSegment} from './segments/main';
|
|
8
12
|
import {parseMuxingSegment, type MuxingAppSegment} from './segments/muxing';
|
|
9
|
-
import {
|
|
13
|
+
import {expectChildren} from './segments/parse-children';
|
|
14
|
+
import type {SeekIdSegment} from './segments/seek';
|
|
15
|
+
import {
|
|
16
|
+
parseSeekIdSegment,
|
|
17
|
+
parseSeekSegment,
|
|
18
|
+
type SeekSegment,
|
|
19
|
+
} from './segments/seek';
|
|
10
20
|
import type {SeekHeadSegment} from './segments/seek-head';
|
|
11
21
|
import {parseSeekHeadSegment} from './segments/seek-head';
|
|
12
22
|
import {
|
|
@@ -17,18 +27,31 @@ import type {TimestampScaleSegment} from './segments/timestamp-scale';
|
|
|
17
27
|
import {parseTimestampScaleSegment} from './segments/timestamp-scale';
|
|
18
28
|
import type {
|
|
19
29
|
AlphaModeSegment,
|
|
30
|
+
AudioSegment,
|
|
31
|
+
BitDepthSegment,
|
|
32
|
+
BlockElement,
|
|
33
|
+
BlockGroupSegment,
|
|
34
|
+
ChannelsSegment,
|
|
35
|
+
ClusterSegment,
|
|
20
36
|
CodecPrivateSegment,
|
|
21
37
|
CodecSegment,
|
|
22
38
|
ColorSegment,
|
|
23
39
|
Crc32Segment,
|
|
24
40
|
DefaultDurationSegment,
|
|
25
41
|
DefaultFlagSegment,
|
|
42
|
+
DisplayHeightSegment,
|
|
43
|
+
DisplayWidthSegment,
|
|
26
44
|
FlagLacingSegment,
|
|
27
45
|
HeightSegment,
|
|
28
46
|
InterlacedSegment,
|
|
29
47
|
LanguageSegment,
|
|
30
48
|
MaxBlockAdditionId,
|
|
49
|
+
SamplingFrequencySegment,
|
|
31
50
|
SegmentUUIDSegment,
|
|
51
|
+
SimpleBlockSegment,
|
|
52
|
+
TagSegment,
|
|
53
|
+
TagsSegment,
|
|
54
|
+
TimestampSegment,
|
|
32
55
|
TitleSegment,
|
|
33
56
|
TrackEntrySegment,
|
|
34
57
|
TrackNumberSegment,
|
|
@@ -39,18 +62,30 @@ import type {
|
|
|
39
62
|
} from './segments/track-entry';
|
|
40
63
|
import {
|
|
41
64
|
parseAlphaModeSegment,
|
|
65
|
+
parseAudioSegment,
|
|
66
|
+
parseBitDepthSegment,
|
|
67
|
+
parseBlockElementSegment,
|
|
68
|
+
parseBlockGroupSegment,
|
|
69
|
+
parseChannelsSegment,
|
|
42
70
|
parseCodecPrivateSegment,
|
|
43
71
|
parseCodecSegment,
|
|
44
72
|
parseColorSegment,
|
|
45
73
|
parseCrc32Segment,
|
|
46
74
|
parseDefaultDurationSegment,
|
|
47
75
|
parseDefaultFlagSegment,
|
|
76
|
+
parseDisplayHeightSegment,
|
|
77
|
+
parseDisplayWidthSegment,
|
|
48
78
|
parseFlagLacing,
|
|
49
79
|
parseHeightSegment,
|
|
50
80
|
parseInterlacedSegment,
|
|
51
81
|
parseLanguageSegment,
|
|
52
82
|
parseMaxBlockAdditionId,
|
|
83
|
+
parseSamplingFrequencySegment,
|
|
53
84
|
parseSegmentUUIDSegment,
|
|
85
|
+
parseSimpleBlockSegment,
|
|
86
|
+
parseTagSegment,
|
|
87
|
+
parseTagsSegment,
|
|
88
|
+
parseTimestampSegment,
|
|
54
89
|
parseTitleSegment,
|
|
55
90
|
parseTrackEntry,
|
|
56
91
|
parseTrackNumber,
|
|
@@ -92,6 +127,8 @@ export type MatroskaSegment =
|
|
|
92
127
|
| VideoSegment
|
|
93
128
|
| WidthSegment
|
|
94
129
|
| HeightSegment
|
|
130
|
+
| DisplayWidthSegment
|
|
131
|
+
| DisplayHeightSegment
|
|
95
132
|
| AlphaModeSegment
|
|
96
133
|
| MaxBlockAdditionId
|
|
97
134
|
| ColorSegment
|
|
@@ -100,10 +137,37 @@ export type MatroskaSegment =
|
|
|
100
137
|
| CodecPrivateSegment
|
|
101
138
|
| Crc32Segment
|
|
102
139
|
| SegmentUUIDSegment
|
|
103
|
-
| DefaultFlagSegment
|
|
140
|
+
| DefaultFlagSegment
|
|
141
|
+
| TagsSegment
|
|
142
|
+
| TagSegment
|
|
143
|
+
| ClusterSegment
|
|
144
|
+
| TimestampSegment
|
|
145
|
+
| SimpleBlockSegment
|
|
146
|
+
| BlockGroupSegment
|
|
147
|
+
| BlockElement
|
|
148
|
+
| SeekIdSegment
|
|
149
|
+
| AudioSegment
|
|
150
|
+
| SamplingFrequencySegment
|
|
151
|
+
| ChannelsSegment
|
|
152
|
+
| BitDepthSegment;
|
|
153
|
+
|
|
154
|
+
export type OnTrackEntrySegment = (trackEntry: TrackEntrySegment) => void;
|
|
155
|
+
|
|
156
|
+
const parseSegment = async ({
|
|
157
|
+
segmentId,
|
|
158
|
+
iterator,
|
|
159
|
+
length,
|
|
160
|
+
parserContext,
|
|
161
|
+
}: {
|
|
162
|
+
segmentId: string;
|
|
163
|
+
iterator: BufferIterator;
|
|
164
|
+
length: number;
|
|
165
|
+
parserContext: ParserContext;
|
|
166
|
+
}): Promise<Promise<MatroskaSegment> | MatroskaSegment> => {
|
|
167
|
+
if (length === 0) {
|
|
168
|
+
throw new Error(`Expected length of ${segmentId} to be greater than 0`);
|
|
169
|
+
}
|
|
104
170
|
|
|
105
|
-
export const expectSegment = (iterator: BufferIterator): MatroskaSegment => {
|
|
106
|
-
const segmentId = iterator.getMatroskaSegmentId();
|
|
107
171
|
if (segmentId === '0x') {
|
|
108
172
|
return {
|
|
109
173
|
type: 'unknown-segment',
|
|
@@ -111,131 +175,210 @@ export const expectSegment = (iterator: BufferIterator): MatroskaSegment => {
|
|
|
111
175
|
};
|
|
112
176
|
}
|
|
113
177
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
178
|
+
// Log this to debug
|
|
179
|
+
/*
|
|
180
|
+
console.log(
|
|
181
|
+
'segmentId',
|
|
182
|
+
segmentId,
|
|
183
|
+
getSegmentName(segmentId),
|
|
184
|
+
iterator.counter.getOffset(),
|
|
185
|
+
);
|
|
186
|
+
*/
|
|
117
187
|
|
|
118
188
|
if (segmentId === '0x114d9b74') {
|
|
119
|
-
return parseSeekHeadSegment(iterator);
|
|
189
|
+
return parseSeekHeadSegment(iterator, length, parserContext);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (segmentId === '0x53ab') {
|
|
193
|
+
return parseSeekIdSegment(iterator);
|
|
120
194
|
}
|
|
121
195
|
|
|
122
196
|
if (segmentId === '0x4dbb') {
|
|
123
|
-
return parseSeekSegment(iterator);
|
|
197
|
+
return parseSeekSegment(iterator, length, parserContext);
|
|
124
198
|
}
|
|
125
199
|
|
|
126
200
|
if (segmentId === '0x53ac') {
|
|
127
|
-
return parseSeekPositionSegment(iterator);
|
|
201
|
+
return parseSeekPositionSegment(iterator, length);
|
|
128
202
|
}
|
|
129
203
|
|
|
130
204
|
if (segmentId === '0xec') {
|
|
131
|
-
return parseVoidSegment(iterator);
|
|
205
|
+
return parseVoidSegment(iterator, length);
|
|
132
206
|
}
|
|
133
207
|
|
|
134
208
|
if (segmentId === '0x1549a966') {
|
|
135
|
-
return parseInfoSegment(iterator);
|
|
209
|
+
return parseInfoSegment(iterator, length, parserContext);
|
|
136
210
|
}
|
|
137
211
|
|
|
138
|
-
if (segmentId ===
|
|
139
|
-
|
|
212
|
+
if (segmentId === matroskaElements.TimestampScale) {
|
|
213
|
+
const timestampScale = parseTimestampScaleSegment(iterator);
|
|
214
|
+
parserContext.parserState.setTimescale(timestampScale.timestampScale);
|
|
215
|
+
return timestampScale;
|
|
140
216
|
}
|
|
141
217
|
|
|
142
218
|
if (segmentId === '0x4d80') {
|
|
143
|
-
return parseMuxingSegment(iterator);
|
|
219
|
+
return parseMuxingSegment(iterator, length);
|
|
144
220
|
}
|
|
145
221
|
|
|
146
222
|
if (segmentId === '0x5741') {
|
|
147
|
-
return parseWritingSegment(iterator);
|
|
223
|
+
return parseWritingSegment(iterator, length);
|
|
148
224
|
}
|
|
149
225
|
|
|
150
226
|
if (segmentId === '0x4489') {
|
|
151
|
-
return parseDurationSegment(iterator);
|
|
227
|
+
return parseDurationSegment(iterator, length);
|
|
152
228
|
}
|
|
153
229
|
|
|
154
230
|
if (segmentId === '0x1654ae6b') {
|
|
155
|
-
return parseTracksSegment(iterator);
|
|
231
|
+
return parseTracksSegment(iterator, length, parserContext);
|
|
156
232
|
}
|
|
157
233
|
|
|
158
|
-
if (segmentId ===
|
|
159
|
-
|
|
234
|
+
if (segmentId === matroskaElements.TrackEntry) {
|
|
235
|
+
const trackEntry = await parseTrackEntry(iterator, length, parserContext);
|
|
236
|
+
|
|
237
|
+
parserContext.parserState.onTrackEntrySegment(trackEntry);
|
|
238
|
+
|
|
239
|
+
const track = getTrack({
|
|
240
|
+
track: trackEntry,
|
|
241
|
+
timescale: parserContext.parserState.getTimescale(),
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
if (track) {
|
|
245
|
+
await registerTrack({
|
|
246
|
+
state: parserContext.parserState,
|
|
247
|
+
options: parserContext,
|
|
248
|
+
track,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return trackEntry;
|
|
160
253
|
}
|
|
161
254
|
|
|
162
255
|
if (segmentId === '0xd7') {
|
|
163
|
-
return parseTrackNumber(iterator);
|
|
256
|
+
return parseTrackNumber(iterator, length);
|
|
164
257
|
}
|
|
165
258
|
|
|
166
259
|
if (segmentId === '0x73c5') {
|
|
167
|
-
return parseTrackUID(iterator);
|
|
260
|
+
return parseTrackUID(iterator, length);
|
|
168
261
|
}
|
|
169
262
|
|
|
170
263
|
if (segmentId === '0x9c') {
|
|
171
|
-
return parseFlagLacing(iterator);
|
|
264
|
+
return parseFlagLacing(iterator, length);
|
|
172
265
|
}
|
|
173
266
|
|
|
174
267
|
if (segmentId === '0x22b59c') {
|
|
175
|
-
return parseLanguageSegment(iterator);
|
|
268
|
+
return parseLanguageSegment(iterator, length);
|
|
176
269
|
}
|
|
177
270
|
|
|
178
271
|
if (segmentId === '0x86') {
|
|
179
|
-
return parseCodecSegment(iterator);
|
|
272
|
+
return parseCodecSegment(iterator, length);
|
|
180
273
|
}
|
|
181
274
|
|
|
182
275
|
if (segmentId === '0x83') {
|
|
183
|
-
return parseTrackTypeSegment(iterator);
|
|
276
|
+
return parseTrackTypeSegment(iterator, length);
|
|
184
277
|
}
|
|
185
278
|
|
|
186
279
|
if (segmentId === '0x55ee') {
|
|
187
|
-
return parseMaxBlockAdditionId(iterator);
|
|
280
|
+
return parseMaxBlockAdditionId(iterator, length);
|
|
188
281
|
}
|
|
189
282
|
|
|
190
283
|
if (segmentId === '0x55b0') {
|
|
191
|
-
return parseColorSegment(iterator);
|
|
284
|
+
return parseColorSegment(iterator, length);
|
|
192
285
|
}
|
|
193
286
|
|
|
194
287
|
if (segmentId === '0x23e383') {
|
|
195
|
-
return parseDefaultDurationSegment(iterator);
|
|
288
|
+
return parseDefaultDurationSegment(iterator, length);
|
|
196
289
|
}
|
|
197
290
|
|
|
198
291
|
if (segmentId === '0xe0') {
|
|
199
|
-
return parseVideoSegment(iterator);
|
|
292
|
+
return parseVideoSegment(iterator, length, parserContext);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (segmentId === '0xe1') {
|
|
296
|
+
return parseAudioSegment(iterator, length, parserContext);
|
|
200
297
|
}
|
|
201
298
|
|
|
202
299
|
if (segmentId === '0xb0') {
|
|
203
|
-
return parseWidthSegment(iterator);
|
|
300
|
+
return parseWidthSegment(iterator, length);
|
|
204
301
|
}
|
|
205
302
|
|
|
206
303
|
if (segmentId === '0xba') {
|
|
207
|
-
return parseHeightSegment(iterator);
|
|
304
|
+
return parseHeightSegment(iterator, length);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (segmentId === matroskaElements.DisplayWidth) {
|
|
308
|
+
return parseDisplayWidthSegment(iterator, length);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (segmentId === matroskaElements.DisplayHeight) {
|
|
312
|
+
return parseDisplayHeightSegment(iterator, length);
|
|
208
313
|
}
|
|
209
314
|
|
|
210
315
|
if (segmentId === '0x9a') {
|
|
211
|
-
return parseInterlacedSegment(iterator);
|
|
316
|
+
return parseInterlacedSegment(iterator, length);
|
|
212
317
|
}
|
|
213
318
|
|
|
214
319
|
if (segmentId === '0x53c0') {
|
|
215
|
-
return parseAlphaModeSegment(iterator);
|
|
320
|
+
return parseAlphaModeSegment(iterator, length);
|
|
216
321
|
}
|
|
217
322
|
|
|
218
323
|
if (segmentId === '0x63a2') {
|
|
219
|
-
return parseCodecPrivateSegment(iterator);
|
|
324
|
+
return parseCodecPrivateSegment(iterator, length);
|
|
220
325
|
}
|
|
221
326
|
|
|
222
327
|
if (segmentId === '0x7ba9') {
|
|
223
|
-
return parseTitleSegment(iterator);
|
|
328
|
+
return parseTitleSegment(iterator, length);
|
|
224
329
|
}
|
|
225
330
|
|
|
226
331
|
if (segmentId === '0xbf') {
|
|
227
|
-
return parseCrc32Segment(iterator);
|
|
332
|
+
return parseCrc32Segment(iterator, length);
|
|
228
333
|
}
|
|
229
334
|
|
|
230
335
|
if (segmentId === '0x73a4') {
|
|
231
|
-
return parseSegmentUUIDSegment(iterator);
|
|
336
|
+
return parseSegmentUUIDSegment(iterator, length);
|
|
232
337
|
}
|
|
233
338
|
|
|
234
339
|
if (segmentId === '0x88') {
|
|
235
|
-
return parseDefaultFlagSegment(iterator);
|
|
340
|
+
return parseDefaultFlagSegment(iterator, length);
|
|
236
341
|
}
|
|
237
342
|
|
|
238
|
-
|
|
343
|
+
if (segmentId === '0x1254c367') {
|
|
344
|
+
return parseTagsSegment(iterator, length, parserContext);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (segmentId === '0x7373') {
|
|
348
|
+
return parseTagSegment(iterator, length);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (segmentId === matroskaElements.SamplingFrequency) {
|
|
352
|
+
return parseSamplingFrequencySegment(iterator, length);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (segmentId === matroskaElements.Channels) {
|
|
356
|
+
return parseChannelsSegment(iterator, length);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (segmentId === matroskaElements.BitDepth) {
|
|
360
|
+
return parseBitDepthSegment(iterator, length);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if (segmentId === '0xe7') {
|
|
364
|
+
return parseTimestampSegment(iterator, length);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
if (segmentId === '0xa3') {
|
|
368
|
+
return parseSimpleBlockSegment({
|
|
369
|
+
iterator,
|
|
370
|
+
length,
|
|
371
|
+
parserContext,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (segmentId === '0xa0') {
|
|
376
|
+
return parseBlockGroupSegment(iterator, length, parserContext);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (segmentId === '0xa1') {
|
|
380
|
+
return parseBlockElementSegment(iterator, length);
|
|
381
|
+
}
|
|
239
382
|
|
|
240
383
|
const bytesRemaining = iterator.byteLength() - iterator.counter.getOffset();
|
|
241
384
|
const toDiscard = Math.min(
|
|
@@ -246,3 +389,84 @@ export const expectSegment = (iterator: BufferIterator): MatroskaSegment => {
|
|
|
246
389
|
const child = parseUnknownSegment(iterator, segmentId, toDiscard);
|
|
247
390
|
return child;
|
|
248
391
|
};
|
|
392
|
+
|
|
393
|
+
export const expectSegment = async (
|
|
394
|
+
iterator: BufferIterator,
|
|
395
|
+
parserContext: ParserContext,
|
|
396
|
+
): Promise<ParseResult> => {
|
|
397
|
+
const bytesRemaining_ = iterator.bytesRemaining();
|
|
398
|
+
if (bytesRemaining_ === 0) {
|
|
399
|
+
return {
|
|
400
|
+
status: 'incomplete',
|
|
401
|
+
segments: [],
|
|
402
|
+
continueParsing: () => {
|
|
403
|
+
return Promise.resolve(expectSegment(iterator, parserContext));
|
|
404
|
+
},
|
|
405
|
+
skipTo: null,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const offset = iterator.counter.getOffset();
|
|
410
|
+
const segmentId = iterator.getMatroskaSegmentId();
|
|
411
|
+
const length = iterator.getVint();
|
|
412
|
+
const bytesRemainingNow =
|
|
413
|
+
iterator.byteLength() - iterator.counter.getOffset();
|
|
414
|
+
|
|
415
|
+
if (segmentId === '0x18538067' || segmentId === '0x1f43b675') {
|
|
416
|
+
const main = await expectChildren({
|
|
417
|
+
iterator,
|
|
418
|
+
length,
|
|
419
|
+
initialChildren: [],
|
|
420
|
+
wrap:
|
|
421
|
+
segmentId === '0x18538067'
|
|
422
|
+
? (s) => ({
|
|
423
|
+
type: 'main-segment',
|
|
424
|
+
children: s,
|
|
425
|
+
})
|
|
426
|
+
: (s) => ({
|
|
427
|
+
type: 'cluster-segment',
|
|
428
|
+
children: s,
|
|
429
|
+
}),
|
|
430
|
+
parserContext,
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
if (main.status === 'incomplete') {
|
|
434
|
+
return {
|
|
435
|
+
status: 'incomplete',
|
|
436
|
+
segments: main.segments,
|
|
437
|
+
skipTo: null,
|
|
438
|
+
continueParsing: main.continueParsing,
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
return {
|
|
443
|
+
status: 'done',
|
|
444
|
+
segments: main.segments,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (bytesRemainingNow < length) {
|
|
449
|
+
const bytesRead = iterator.counter.getOffset() - offset;
|
|
450
|
+
iterator.counter.decrement(bytesRead);
|
|
451
|
+
return {
|
|
452
|
+
status: 'incomplete',
|
|
453
|
+
segments: [],
|
|
454
|
+
continueParsing: () => {
|
|
455
|
+
return Promise.resolve(expectSegment(iterator, parserContext));
|
|
456
|
+
},
|
|
457
|
+
skipTo: null,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
const segment = await parseSegment({
|
|
462
|
+
segmentId,
|
|
463
|
+
iterator,
|
|
464
|
+
length,
|
|
465
|
+
parserContext,
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
return {
|
|
469
|
+
status: 'done',
|
|
470
|
+
segments: [segment],
|
|
471
|
+
};
|
|
472
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type {AnySegment} from '../../parse-result';
|
|
2
|
+
import type {MainSegment} from './segments/main';
|
|
3
|
+
import type {
|
|
4
|
+
CodecSegment,
|
|
5
|
+
TrackEntrySegment,
|
|
6
|
+
TrackNumberSegment,
|
|
7
|
+
} from './segments/track-entry';
|
|
8
|
+
|
|
9
|
+
export const getMainSegment = (segments: AnySegment[]): MainSegment | null => {
|
|
10
|
+
return segments.find((s) => s.type === 'main-segment') as MainSegment | null;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const getTrackNumber = (track: TrackEntrySegment) => {
|
|
14
|
+
const child = track.children.find(
|
|
15
|
+
(b) => b.type === 'track-number-segment',
|
|
16
|
+
) as TrackNumberSegment | null;
|
|
17
|
+
return child?.trackNumber ?? null;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const getTrackCodec = (track: TrackEntrySegment) => {
|
|
21
|
+
const child = track.children.find(
|
|
22
|
+
(b) => b.type === 'codec-segment',
|
|
23
|
+
) as CodecSegment | null;
|
|
24
|
+
return child ?? null;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const getTrackByNumber = (tracks: TrackEntrySegment[], id: number) => {
|
|
28
|
+
return tracks.find((track) => {
|
|
29
|
+
const trackNumber = getTrackNumber(track);
|
|
30
|
+
return trackNumber === id;
|
|
31
|
+
});
|
|
32
|
+
};
|