@remotion/media-parser 4.0.200 → 4.0.202
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/av1-codec-string.d.ts +5 -0
- package/dist/av1-codec-string.js +18 -1
- package/dist/bitstream/av1.d.ts +2 -0
- package/dist/bitstream/av1.js +12 -0
- package/dist/boxes/iso-base-media/avcc-hvcc.d.ts +20 -0
- package/dist/boxes/iso-base-media/avcc-hvcc.js +73 -0
- package/dist/boxes/iso-base-media/avcc.d.ts +18 -0
- package/dist/boxes/iso-base-media/avcc.js +27 -0
- package/dist/boxes/iso-base-media/esds-descriptors.d.ts +21 -0
- package/dist/boxes/iso-base-media/esds-descriptors.js +62 -0
- package/dist/boxes/iso-base-media/esds.d.ts +15 -0
- package/dist/boxes/iso-base-media/esds.js +27 -0
- package/dist/boxes/iso-base-media/mdat/mdat.js +2 -1
- package/dist/boxes/iso-base-media/moov/moov.js +1 -0
- package/dist/boxes/iso-base-media/mvhd.js +2 -2
- package/dist/boxes/iso-base-media/process-box.d.ts +4 -2
- package/dist/boxes/iso-base-media/process-box.js +56 -40
- package/dist/boxes/iso-base-media/stsd/keys.js +1 -1
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
- package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
- package/dist/boxes/iso-base-media/stsd/samples.js +3 -0
- package/dist/boxes/iso-base-media/stsd/stco.d.ts +3 -2
- package/dist/boxes/iso-base-media/stsd/stco.js +2 -2
- package/dist/boxes/iso-base-media/trak/trak.js +1 -0
- package/dist/boxes/webm/av1-codec-private.js +1 -1
- package/dist/boxes/webm/bitstream/av1.js +10 -1
- package/dist/boxes/webm/description.d.ts +2 -2
- package/dist/boxes/webm/description.js +2 -2
- package/dist/boxes/webm/ebml.d.ts +2 -2
- package/dist/boxes/webm/ebml.js +23 -1
- package/dist/boxes/webm/get-ready-tracks.d.ts +1 -1
- package/dist/boxes/webm/get-ready-tracks.js +3 -3
- package/dist/boxes/webm/get-sample-from-block.d.ts +17 -0
- package/dist/boxes/webm/get-sample-from-block.js +78 -0
- package/dist/boxes/webm/get-track.d.ts +2 -2
- package/dist/boxes/webm/get-track.js +26 -25
- package/dist/boxes/webm/make-header.d.ts +3 -1
- package/dist/boxes/webm/make-header.js +90 -32
- package/dist/boxes/webm/parse-ebml.d.ts +12 -0
- package/dist/boxes/webm/parse-ebml.js +175 -0
- package/dist/boxes/webm/parse-webm-header.js +8 -9
- package/dist/boxes/webm/segments/all-segments.d.ts +572 -1
- package/dist/boxes/webm/segments/all-segments.js +353 -2
- package/dist/boxes/webm/segments/track-entry.d.ts +5 -189
- package/dist/boxes/webm/segments/track-entry.js +2 -457
- package/dist/boxes/webm/segments.d.ts +3 -16
- package/dist/boxes/webm/segments.js +40 -219
- package/dist/boxes/webm/traversal.d.ts +5 -5
- package/dist/boxes/webm/traversal.js +17 -6
- package/dist/buffer-iterator.d.ts +10 -7
- package/dist/buffer-iterator.js +83 -7
- package/dist/create/create-media.d.ts +2 -0
- package/dist/create/create-media.js +36 -0
- package/dist/create/matroska-header.d.ts +1 -0
- package/dist/create/matroska-header.js +66 -0
- package/dist/create/matroska-info.d.ts +4 -0
- package/dist/create/matroska-info.js +39 -0
- package/dist/create/matroska-segment.d.ts +1 -0
- package/dist/create/matroska-segment.js +12 -0
- package/dist/create/matroska-trackentry.d.ts +21 -0
- package/dist/create/matroska-trackentry.js +191 -0
- package/dist/create-media.d.ts +1 -0
- package/dist/create-media.js +78 -0
- package/dist/from-fetch.js +13 -3
- package/dist/from-input-type-file.d.ts +2 -0
- package/dist/from-input-type-file.js +37 -0
- package/dist/from-node.js +9 -2
- package/dist/from-web-file.js +6 -1
- package/dist/from-web.js +15 -6
- package/dist/get-audio-codec.d.ts +2 -2
- package/dist/get-audio-codec.js +13 -13
- package/dist/get-codec.d.ts +4 -0
- package/dist/get-codec.js +22 -0
- package/dist/get-duration.js +12 -14
- package/dist/get-sample-positions.js +1 -1
- package/dist/get-tracks.js +2 -2
- package/dist/get-video-codec.js +13 -13
- package/dist/has-all-info.js +1 -1
- package/dist/options.d.ts +3 -2
- package/dist/parse-media.js +17 -10
- package/dist/parse-video.js +16 -0
- package/dist/parser-context.d.ts +1 -0
- package/dist/parser-state.d.ts +4 -3
- package/dist/parser-state.js +16 -3
- package/dist/reader.d.ts +1 -1
- package/dist/readers/from-fetch.d.ts +2 -0
- package/dist/readers/from-fetch.js +64 -0
- package/dist/readers/from-node.d.ts +2 -0
- package/dist/readers/from-node.js +40 -0
- package/dist/readers/from-web-file.d.ts +2 -0
- package/dist/readers/from-web-file.js +39 -0
- package/dist/readers/reader.d.ts +11 -0
- package/dist/readers/reader.js +2 -0
- package/dist/traversal.d.ts +19 -17
- package/dist/traversal.js +38 -39
- package/dist/web-file.d.ts +2 -0
- package/dist/web-file.js +37 -0
- package/dist/writers/web-fs.d.ts +2 -0
- package/dist/writers/web-fs.js +28 -0
- package/dist/writers/writer.d.ts +9 -0
- package/dist/writers/writer.js +2 -0
- package/input.webm +0 -0
- package/package.json +2 -2
- package/src/boxes/iso-base-media/mdat/mdat.ts +2 -1
- package/src/boxes/iso-base-media/moov/moov.ts +1 -0
- package/src/boxes/iso-base-media/mvhd.ts +2 -2
- package/src/boxes/iso-base-media/process-box.ts +70 -40
- package/src/boxes/iso-base-media/stsd/keys.ts +1 -1
- package/src/boxes/iso-base-media/stsd/mebx.ts +3 -0
- package/src/boxes/iso-base-media/stsd/samples.ts +3 -0
- package/src/boxes/iso-base-media/stsd/stco.ts +5 -3
- package/src/boxes/iso-base-media/trak/trak.ts +1 -0
- package/src/boxes/webm/av1-codec-private.ts +1 -1
- package/src/boxes/webm/description.ts +7 -4
- package/src/boxes/webm/ebml.ts +24 -4
- package/src/boxes/webm/get-ready-tracks.ts +4 -4
- package/src/boxes/webm/get-sample-from-block.ts +125 -0
- package/src/boxes/webm/get-track.ts +38 -31
- package/src/boxes/webm/make-header.ts +129 -32
- package/src/boxes/webm/parse-ebml.ts +247 -0
- package/src/boxes/webm/parse-webm-header.ts +8 -12
- package/src/boxes/webm/segments/all-segments.ts +539 -1
- package/src/boxes/webm/segments/track-entry.ts +5 -843
- package/src/boxes/webm/segments.ts +48 -435
- package/src/boxes/webm/traversal.ts +28 -15
- package/src/buffer-iterator.ts +104 -10
- package/src/from-fetch.ts +22 -3
- package/src/from-node.ts +18 -4
- package/src/from-web-file.ts +11 -1
- package/src/get-audio-codec.ts +14 -16
- package/src/get-duration.ts +15 -16
- package/src/get-sample-positions.ts +1 -1
- package/src/get-tracks.ts +2 -2
- package/src/get-video-codec.ts +13 -15
- package/src/has-all-info.ts +1 -1
- package/src/options.ts +3 -2
- package/src/parse-media.ts +20 -9
- package/src/parse-video.ts +17 -0
- package/src/parser-context.ts +1 -0
- package/src/parser-state.ts +22 -5
- package/src/reader.ts +1 -0
- package/src/test/create-matroska.test.ts +255 -7
- package/src/test/matroska.test.ts +311 -334
- package/src/test/mvhd.test.ts +1 -1
- package/src/test/parse-esds.test.ts +2 -2
- package/src/test/parse-stco.test.ts +4 -2
- package/src/test/parse-stsc.test.ts +2 -2
- package/src/test/parse-stsz.test.ts +2 -2
- package/src/test/parse-stts.test.ts +1 -1
- package/src/test/stream-local.test.ts +23 -9
- package/src/test/stream-remote.test.ts +23 -19
- package/src/test/stsd.test.ts +6 -2
- package/src/test/tkhd.test.ts +1 -1
- package/src/traversal.ts +62 -85
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/boxes/iso-base-media/ftype.d.ts +0 -9
- package/dist/boxes/iso-base-media/ftype.js +0 -31
- package/dist/get-video-metadata.d.ts +0 -2
- package/dist/get-video-metadata.js +0 -44
- package/dist/read-and-increment-offset.d.ts +0 -28
- package/dist/read-and-increment-offset.js +0 -177
- package/dist/understand-vorbis.d.ts +0 -1
- package/dist/understand-vorbis.js +0 -12
- package/src/boxes/webm/segments/duration.ts +0 -29
- package/src/boxes/webm/segments/info.ts +0 -34
- package/src/boxes/webm/segments/main.ts +0 -6
- package/src/boxes/webm/segments/muxing.ts +0 -18
- package/src/boxes/webm/segments/seek-head.ts +0 -34
- package/src/boxes/webm/segments/seek-position.ts +0 -18
- package/src/boxes/webm/segments/seek.ts +0 -45
- package/src/boxes/webm/segments/timestamp-scale.ts +0 -17
- package/src/boxes/webm/segments/tracks.ts +0 -32
- package/src/boxes/webm/segments/unknown.ts +0 -19
- package/src/boxes/webm/segments/void.ts +0 -18
- package/src/boxes/webm/segments/writing.ts +0 -18
- package/src/combine-uint8array.ts +0 -13
- /package/dist/{boxes/webm/bitstream/av1/frame.d.ts → get-samples.d.ts} +0 -0
- /package/dist/{boxes/webm/bitstream/av1/frame.js → get-samples.js} +0 -0
- /package/dist/{boxes/webm/bitstream/h264/get-h264-descriptor.d.ts → sample-aspect-ratio.d.ts} +0 -0
- /package/dist/{boxes/webm/bitstream/h264/get-h264-descriptor.js → sample-aspect-ratio.js} +0 -0
|
@@ -1,226 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.expectSegment = void 0;
|
|
4
|
-
const
|
|
5
|
-
const get_track_1 = require("./get-track");
|
|
6
|
-
const all_segments_1 = require("./segments/all-segments");
|
|
7
|
-
const duration_1 = require("./segments/duration");
|
|
8
|
-
const info_1 = require("./segments/info");
|
|
9
|
-
const muxing_1 = require("./segments/muxing");
|
|
4
|
+
const parse_ebml_1 = require("./parse-ebml");
|
|
10
5
|
const parse_children_1 = require("./segments/parse-children");
|
|
11
|
-
const
|
|
12
|
-
const seek_head_1 = require("./segments/seek-head");
|
|
13
|
-
const seek_position_1 = require("./segments/seek-position");
|
|
14
|
-
const timestamp_scale_1 = require("./segments/timestamp-scale");
|
|
15
|
-
const track_entry_1 = require("./segments/track-entry");
|
|
16
|
-
const tracks_1 = require("./segments/tracks");
|
|
17
|
-
const unknown_1 = require("./segments/unknown");
|
|
18
|
-
const void_1 = require("./segments/void");
|
|
19
|
-
const writing_1 = require("./segments/writing");
|
|
20
|
-
const parseSegment = async ({ segmentId, iterator, length, parserContext, }) => {
|
|
6
|
+
const parseSegment = async ({ segmentId, iterator, length, parserContext, headerReadSoFar, }) => {
|
|
21
7
|
if (length === 0) {
|
|
22
8
|
throw new Error(`Expected length of ${segmentId} to be greater than 0`);
|
|
23
9
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
// Log this to debug
|
|
31
|
-
/*
|
|
32
|
-
console.log(
|
|
33
|
-
'segmentId',
|
|
34
|
-
segmentId,
|
|
35
|
-
getSegmentName(segmentId),
|
|
36
|
-
iterator.counter.getOffset(),
|
|
37
|
-
);
|
|
38
|
-
*/
|
|
39
|
-
if (segmentId === '0x114d9b74') {
|
|
40
|
-
return (0, seek_head_1.parseSeekHeadSegment)(iterator, length, parserContext);
|
|
41
|
-
}
|
|
42
|
-
if (segmentId === '0x53ab') {
|
|
43
|
-
return (0, seek_1.parseSeekIdSegment)(iterator);
|
|
44
|
-
}
|
|
45
|
-
if (segmentId === '0x4dbb') {
|
|
46
|
-
return (0, seek_1.parseSeekSegment)(iterator, length, parserContext);
|
|
47
|
-
}
|
|
48
|
-
if (segmentId === '0x53ac') {
|
|
49
|
-
return (0, seek_position_1.parseSeekPositionSegment)(iterator, length);
|
|
50
|
-
}
|
|
51
|
-
if (segmentId === '0xec') {
|
|
52
|
-
return (0, void_1.parseVoidSegment)(iterator, length);
|
|
53
|
-
}
|
|
54
|
-
if (segmentId === '0x1549a966') {
|
|
55
|
-
return (0, info_1.parseInfoSegment)(iterator, length, parserContext);
|
|
56
|
-
}
|
|
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;
|
|
61
|
-
}
|
|
62
|
-
if (segmentId === '0x4d80') {
|
|
63
|
-
return (0, muxing_1.parseMuxingSegment)(iterator, length);
|
|
64
|
-
}
|
|
65
|
-
if (segmentId === '0x5741') {
|
|
66
|
-
return (0, writing_1.parseWritingSegment)(iterator, length);
|
|
67
|
-
}
|
|
68
|
-
if (segmentId === '0x4489') {
|
|
69
|
-
return (0, duration_1.parseDurationSegment)(iterator, length);
|
|
70
|
-
}
|
|
71
|
-
if (segmentId === '0x1654ae6b') {
|
|
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;
|
|
89
|
-
}
|
|
90
|
-
if (segmentId === '0xd7') {
|
|
91
|
-
return (0, track_entry_1.parseTrackNumber)(iterator, length);
|
|
92
|
-
}
|
|
93
|
-
if (segmentId === '0x73c5') {
|
|
94
|
-
return (0, track_entry_1.parseTrackUID)(iterator, length);
|
|
95
|
-
}
|
|
96
|
-
if (segmentId === '0x9c') {
|
|
97
|
-
return (0, track_entry_1.parseFlagLacing)(iterator, length);
|
|
98
|
-
}
|
|
99
|
-
if (segmentId === '0x22b59c') {
|
|
100
|
-
return (0, track_entry_1.parseLanguageSegment)(iterator, length);
|
|
101
|
-
}
|
|
102
|
-
if (segmentId === '0x86') {
|
|
103
|
-
return (0, track_entry_1.parseCodecSegment)(iterator, length);
|
|
104
|
-
}
|
|
105
|
-
if (segmentId === '0x83') {
|
|
106
|
-
return (0, track_entry_1.parseTrackTypeSegment)(iterator, length);
|
|
107
|
-
}
|
|
108
|
-
if (segmentId === '0x55ee') {
|
|
109
|
-
return (0, track_entry_1.parseMaxBlockAdditionId)(iterator, length);
|
|
110
|
-
}
|
|
111
|
-
if (segmentId === '0x55b0') {
|
|
112
|
-
return (0, track_entry_1.parseColorSegment)(iterator, length);
|
|
113
|
-
}
|
|
114
|
-
if (segmentId === '0x23e383') {
|
|
115
|
-
return (0, track_entry_1.parseDefaultDurationSegment)(iterator, length);
|
|
116
|
-
}
|
|
117
|
-
if (segmentId === '0xe0') {
|
|
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);
|
|
122
|
-
}
|
|
123
|
-
if (segmentId === '0xb0') {
|
|
124
|
-
return (0, track_entry_1.parseWidthSegment)(iterator, length);
|
|
125
|
-
}
|
|
126
|
-
if (segmentId === '0xba') {
|
|
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);
|
|
134
|
-
}
|
|
135
|
-
if (segmentId === '0x9a') {
|
|
136
|
-
return (0, track_entry_1.parseInterlacedSegment)(iterator, length);
|
|
137
|
-
}
|
|
138
|
-
if (segmentId === '0x53c0') {
|
|
139
|
-
return (0, track_entry_1.parseAlphaModeSegment)(iterator, length);
|
|
140
|
-
}
|
|
141
|
-
if (segmentId === '0x63a2') {
|
|
142
|
-
return (0, track_entry_1.parseCodecPrivateSegment)(iterator, length);
|
|
143
|
-
}
|
|
144
|
-
if (segmentId === '0x7ba9') {
|
|
145
|
-
return (0, track_entry_1.parseTitleSegment)(iterator, length);
|
|
146
|
-
}
|
|
147
|
-
if (segmentId === '0xbf') {
|
|
148
|
-
return (0, track_entry_1.parseCrc32Segment)(iterator, length);
|
|
149
|
-
}
|
|
150
|
-
if (segmentId === '0x73a4') {
|
|
151
|
-
return (0, track_entry_1.parseSegmentUUIDSegment)(iterator, length);
|
|
152
|
-
}
|
|
153
|
-
if (segmentId === '0x88') {
|
|
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 === all_segments_1.matroskaElements.Timestamp) {
|
|
172
|
-
const offset = iterator.counter.getOffset();
|
|
173
|
-
const timestampSegment = (0, track_entry_1.parseTimestampSegment)(iterator, length);
|
|
174
|
-
parserContext.parserState.setTimestampOffset(offset, timestampSegment.timestamp);
|
|
175
|
-
return timestampSegment;
|
|
176
|
-
}
|
|
177
|
-
if (segmentId === all_segments_1.matroskaElements.SimpleBlock ||
|
|
178
|
-
segmentId === all_segments_1.matroskaElements.Block) {
|
|
179
|
-
return (0, track_entry_1.parseSimpleBlockOrBlockSegment)({
|
|
180
|
-
iterator,
|
|
181
|
-
length,
|
|
182
|
-
parserContext,
|
|
183
|
-
type: segmentId,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
if (segmentId === all_segments_1.matroskaElements.ReferenceBlock) {
|
|
187
|
-
return (0, track_entry_1.parseReferenceBlockSegment)(iterator, length);
|
|
188
|
-
}
|
|
189
|
-
if (segmentId === all_segments_1.matroskaElements.BlockAdditions) {
|
|
190
|
-
return (0, track_entry_1.parseBlockAdditionsSegment)(iterator, length);
|
|
191
|
-
}
|
|
192
|
-
if (segmentId === '0xa0') {
|
|
193
|
-
const blockGroup = await (0, track_entry_1.parseBlockGroupSegment)(iterator, length, parserContext);
|
|
194
|
-
// Blocks don't have information about keyframes.
|
|
195
|
-
// https://ffmpeg.org/pipermail/ffmpeg-devel/2015-June/173825.html
|
|
196
|
-
// "For Blocks, keyframes is
|
|
197
|
-
// inferred by the absence of ReferenceBlock element (as done by matroskadec).""
|
|
198
|
-
const block = blockGroup.children.find((c) => c.type === 'simple-block-or-block-segment');
|
|
199
|
-
if (!block || block.type !== 'simple-block-or-block-segment') {
|
|
200
|
-
throw new Error('Expected block segment');
|
|
201
|
-
}
|
|
202
|
-
const hasReferenceBlock = blockGroup.children.find((c) => c.type === 'reference-block-segment');
|
|
203
|
-
const partialVideoSample = block.videoSample;
|
|
204
|
-
if (partialVideoSample) {
|
|
205
|
-
const completeFrame = {
|
|
206
|
-
...partialVideoSample,
|
|
207
|
-
type: hasReferenceBlock ? 'delta' : 'key',
|
|
208
|
-
};
|
|
209
|
-
await parserContext.parserState.onVideoSample(partialVideoSample.trackId, completeFrame);
|
|
210
|
-
}
|
|
211
|
-
return blockGroup;
|
|
212
|
-
}
|
|
213
|
-
if (segmentId === '0xa1') {
|
|
214
|
-
return (0, track_entry_1.parseBlockElementSegment)(iterator, length);
|
|
215
|
-
}
|
|
216
|
-
const bytesRemaining = iterator.byteLength() - iterator.counter.getOffset();
|
|
217
|
-
const toDiscard = Math.min(bytesRemaining, length > 0 ? length : bytesRemaining);
|
|
218
|
-
const child = (0, unknown_1.parseUnknownSegment)(iterator, segmentId, toDiscard);
|
|
219
|
-
return child;
|
|
10
|
+
iterator.counter.decrement(headerReadSoFar);
|
|
11
|
+
const offset = iterator.counter.getOffset();
|
|
12
|
+
const ebml = await (0, parse_ebml_1.parseEbml)(iterator, parserContext);
|
|
13
|
+
const remapped = await (0, parse_ebml_1.postprocessEbml)({ offset, ebml, parserContext });
|
|
14
|
+
return remapped;
|
|
220
15
|
};
|
|
221
16
|
const expectSegment = async (iterator, parserContext) => {
|
|
222
|
-
const
|
|
223
|
-
if (
|
|
17
|
+
const offset = iterator.counter.getOffset();
|
|
18
|
+
if (iterator.bytesRemaining() === 0) {
|
|
224
19
|
return {
|
|
225
20
|
status: 'incomplete',
|
|
226
21
|
segments: [],
|
|
@@ -230,9 +25,32 @@ const expectSegment = async (iterator, parserContext) => {
|
|
|
230
25
|
skipTo: null,
|
|
231
26
|
};
|
|
232
27
|
}
|
|
233
|
-
const offset = iterator.counter.getOffset();
|
|
234
28
|
const segmentId = iterator.getMatroskaSegmentId();
|
|
29
|
+
if (segmentId === null) {
|
|
30
|
+
iterator.counter.decrement(iterator.counter.getOffset() - offset);
|
|
31
|
+
return {
|
|
32
|
+
status: 'incomplete',
|
|
33
|
+
segments: [],
|
|
34
|
+
continueParsing: () => {
|
|
35
|
+
return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
|
|
36
|
+
},
|
|
37
|
+
skipTo: null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const offsetBeforeVInt = iterator.counter.getOffset();
|
|
235
41
|
const length = iterator.getVint();
|
|
42
|
+
const offsetAfterVInt = iterator.counter.getOffset();
|
|
43
|
+
if (length === null) {
|
|
44
|
+
iterator.counter.decrement(iterator.counter.getOffset() - offset);
|
|
45
|
+
return {
|
|
46
|
+
status: 'incomplete',
|
|
47
|
+
segments: [],
|
|
48
|
+
continueParsing: () => {
|
|
49
|
+
return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
|
|
50
|
+
},
|
|
51
|
+
skipTo: null,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
236
54
|
const bytesRemainingNow = iterator.byteLength() - iterator.counter.getOffset();
|
|
237
55
|
if (segmentId === '0x18538067' || segmentId === '0x1f43b675') {
|
|
238
56
|
const main = await (0, parse_children_1.expectChildren)({
|
|
@@ -241,12 +59,14 @@ const expectSegment = async (iterator, parserContext) => {
|
|
|
241
59
|
initialChildren: [],
|
|
242
60
|
wrap: segmentId === '0x18538067'
|
|
243
61
|
? (s) => ({
|
|
244
|
-
type: '
|
|
245
|
-
|
|
62
|
+
type: 'Segment',
|
|
63
|
+
value: s,
|
|
64
|
+
minVintWidth: offsetAfterVInt - offsetBeforeVInt,
|
|
246
65
|
})
|
|
247
66
|
: (s) => ({
|
|
248
|
-
type: '
|
|
249
|
-
|
|
67
|
+
type: 'Cluster',
|
|
68
|
+
value: s,
|
|
69
|
+
minVintWidth: offsetAfterVInt - offsetBeforeVInt,
|
|
250
70
|
}),
|
|
251
71
|
parserContext,
|
|
252
72
|
});
|
|
@@ -280,6 +100,7 @@ const expectSegment = async (iterator, parserContext) => {
|
|
|
280
100
|
iterator,
|
|
281
101
|
length,
|
|
282
102
|
parserContext,
|
|
103
|
+
headerReadSoFar: iterator.counter.getOffset() - offset,
|
|
283
104
|
});
|
|
284
105
|
return {
|
|
285
106
|
status: 'done',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AnySegment } from '../../parse-result';
|
|
2
|
-
import type { MainSegment } from './segments/
|
|
3
|
-
import type { CodecSegment, TrackEntrySegment } from './segments/track-entry';
|
|
2
|
+
import type { CodecIdSegment, MainSegment, TrackEntry } from './segments/all-segments';
|
|
4
3
|
export declare const getMainSegment: (segments: AnySegment[]) => MainSegment | null;
|
|
5
|
-
export declare const getTrackNumber: (track:
|
|
6
|
-
export declare const getTrackCodec: (track:
|
|
7
|
-
export declare const
|
|
4
|
+
export declare const getTrackNumber: (track: TrackEntry) => import("./segments/all-segments").UintWithSize | null;
|
|
5
|
+
export declare const getTrackCodec: (track: TrackEntry) => CodecIdSegment | null;
|
|
6
|
+
export declare const getTrackTimestampScale: (track: TrackEntry) => import("./segments/all-segments").FloatWithSize | null;
|
|
7
|
+
export declare const getTrackByNumber: (tracks: TrackEntry[], id: number) => TrackEntry | undefined;
|
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTrackByNumber = exports.getTrackCodec = exports.getTrackNumber = exports.getMainSegment = void 0;
|
|
3
|
+
exports.getTrackByNumber = exports.getTrackTimestampScale = exports.getTrackCodec = exports.getTrackNumber = exports.getMainSegment = void 0;
|
|
4
4
|
const getMainSegment = (segments) => {
|
|
5
|
-
return segments.find((s) => s.type === '
|
|
5
|
+
return segments.find((s) => s.type === 'Segment');
|
|
6
6
|
};
|
|
7
7
|
exports.getMainSegment = getMainSegment;
|
|
8
8
|
const getTrackNumber = (track) => {
|
|
9
9
|
var _a;
|
|
10
|
-
const child = track.
|
|
11
|
-
return (_a = child === null || child === void 0 ? void 0 : child.
|
|
10
|
+
const child = track.value.find((b) => b.type === 'TrackNumber');
|
|
11
|
+
return (_a = child === null || child === void 0 ? void 0 : child.value) !== null && _a !== void 0 ? _a : null;
|
|
12
12
|
};
|
|
13
13
|
exports.getTrackNumber = getTrackNumber;
|
|
14
14
|
const getTrackCodec = (track) => {
|
|
15
|
-
const child = track.
|
|
15
|
+
const child = track.value.find((b) => b.type === 'CodecID');
|
|
16
16
|
return child !== null && child !== void 0 ? child : null;
|
|
17
17
|
};
|
|
18
18
|
exports.getTrackCodec = getTrackCodec;
|
|
19
|
+
const getTrackTimestampScale = (track) => {
|
|
20
|
+
const child = track.value.find((b) => b.type === 'TrackTimestampScale');
|
|
21
|
+
if (!child) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (child.type !== 'TrackTimestampScale') {
|
|
25
|
+
throw new Error('Expected TrackTimestampScale');
|
|
26
|
+
}
|
|
27
|
+
return child.value;
|
|
28
|
+
};
|
|
29
|
+
exports.getTrackTimestampScale = getTrackTimestampScale;
|
|
19
30
|
const getTrackByNumber = (tracks, id) => {
|
|
20
31
|
return tracks.find((track) => {
|
|
21
32
|
const trackNumber = (0, exports.getTrackNumber)(track);
|
|
22
|
-
return trackNumber === id;
|
|
33
|
+
return (trackNumber === null || trackNumber === void 0 ? void 0 : trackNumber.value) === id;
|
|
23
34
|
});
|
|
24
35
|
};
|
|
25
36
|
exports.getTrackByNumber = getTrackByNumber;
|
|
@@ -8,7 +8,7 @@ export declare class OffsetCounter {
|
|
|
8
8
|
discardBytes(amount: number): void;
|
|
9
9
|
decrement(amount: number): void;
|
|
10
10
|
}
|
|
11
|
-
export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes
|
|
11
|
+
export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes: number | null) => {
|
|
12
12
|
startReadingBits: () => void;
|
|
13
13
|
stopReadingBits: () => void;
|
|
14
14
|
skipTo: (offset: number) => void;
|
|
@@ -21,27 +21,30 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes?
|
|
|
21
21
|
bytesRemaining: () => number;
|
|
22
22
|
isIsoBaseMedia: () => boolean;
|
|
23
23
|
leb128: () => number;
|
|
24
|
-
|
|
24
|
+
removeBytesRead: () => void;
|
|
25
25
|
isWebm: () => boolean;
|
|
26
26
|
discard: (length: number) => void;
|
|
27
|
-
|
|
27
|
+
getEightByteNumber: (littleEndian?: boolean) => number;
|
|
28
|
+
getFourByteNumber: (littleEndian?: boolean) => number;
|
|
28
29
|
getSlice: (amount: number) => Uint8Array;
|
|
29
30
|
getAtom: () => string;
|
|
31
|
+
isRiff: () => boolean;
|
|
30
32
|
getPaddedFourByteNumber: () => number;
|
|
31
|
-
getMatroskaSegmentId: () => string;
|
|
32
|
-
getVint: () => number;
|
|
33
|
+
getMatroskaSegmentId: () => string | null;
|
|
34
|
+
getVint: () => number | null;
|
|
33
35
|
getUint8: () => number;
|
|
34
36
|
getEBML: () => number;
|
|
35
37
|
getInt8: () => number;
|
|
36
38
|
getUint16: () => number;
|
|
37
39
|
getUint24: () => number;
|
|
38
40
|
getInt16: () => number;
|
|
39
|
-
getUint32: () => number;
|
|
41
|
+
getUint32: (littleEndian?: boolean) => number;
|
|
42
|
+
getUint64: (littleEndian?: boolean) => bigint;
|
|
40
43
|
getFixedPointUnsigned1616Number: () => number;
|
|
41
44
|
getFixedPointSigned1616Number: () => number;
|
|
42
45
|
getFixedPointSigned230Number: () => number;
|
|
43
46
|
getPascalString: () => number[];
|
|
44
|
-
|
|
47
|
+
getUint(length: number): number;
|
|
45
48
|
getByteString(length: number): string;
|
|
46
49
|
getFloat64: () => number;
|
|
47
50
|
getFloat32: () => number;
|
package/dist/buffer-iterator.js
CHANGED
|
@@ -51,6 +51,7 @@ exports.OffsetCounter = OffsetCounter;
|
|
|
51
51
|
_OffsetCounter_offset = new WeakMap(), _OffsetCounter_discardedBytes = new WeakMap();
|
|
52
52
|
const isoBaseMediaMp4Pattern = new TextEncoder().encode('ftyp');
|
|
53
53
|
const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
|
|
54
|
+
const riffPattern = new Uint8Array([0x52, 0x49, 0x46, 0x46]);
|
|
54
55
|
const matchesPattern = (pattern) => {
|
|
55
56
|
return (data) => {
|
|
56
57
|
return pattern.every((value, index) => data[index] === value);
|
|
@@ -61,7 +62,9 @@ const makeOffsetCounter = () => {
|
|
|
61
62
|
};
|
|
62
63
|
const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
63
64
|
const buf = new ArrayBuffer(initialData.byteLength, {
|
|
64
|
-
maxByteLength: maxBytes
|
|
65
|
+
maxByteLength: maxBytes === null
|
|
66
|
+
? initialData.byteLength
|
|
67
|
+
: Math.min(maxBytes, 2 ** 32),
|
|
65
68
|
});
|
|
66
69
|
if (!buf.resize) {
|
|
67
70
|
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');
|
|
@@ -80,7 +83,52 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
80
83
|
counter.increment(1);
|
|
81
84
|
return val;
|
|
82
85
|
};
|
|
83
|
-
const
|
|
86
|
+
const getEightByteNumber = (littleEndian = false) => {
|
|
87
|
+
if (littleEndian) {
|
|
88
|
+
const one = getUint8();
|
|
89
|
+
const two = getUint8();
|
|
90
|
+
const three = getUint8();
|
|
91
|
+
const four = getUint8();
|
|
92
|
+
const five = getUint8();
|
|
93
|
+
const six = getUint8();
|
|
94
|
+
const seven = getUint8();
|
|
95
|
+
const eight = getUint8();
|
|
96
|
+
return ((eight << 56) |
|
|
97
|
+
(seven << 48) |
|
|
98
|
+
(six << 40) |
|
|
99
|
+
(five << 32) |
|
|
100
|
+
(four << 24) |
|
|
101
|
+
(three << 16) |
|
|
102
|
+
(two << 8) |
|
|
103
|
+
one);
|
|
104
|
+
}
|
|
105
|
+
function byteArrayToBigInt(byteArray) {
|
|
106
|
+
let result = BigInt(0);
|
|
107
|
+
for (let i = 0; i < byteArray.length; i++) {
|
|
108
|
+
result = (result << BigInt(8)) + BigInt(byteArray[i]);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
const bigInt = byteArrayToBigInt([
|
|
113
|
+
getUint8(),
|
|
114
|
+
getUint8(),
|
|
115
|
+
getUint8(),
|
|
116
|
+
getUint8(),
|
|
117
|
+
getUint8(),
|
|
118
|
+
getUint8(),
|
|
119
|
+
getUint8(),
|
|
120
|
+
getUint8(),
|
|
121
|
+
]);
|
|
122
|
+
return Number(bigInt);
|
|
123
|
+
};
|
|
124
|
+
const getFourByteNumber = (littleEndian = false) => {
|
|
125
|
+
if (littleEndian) {
|
|
126
|
+
const one = getUint8();
|
|
127
|
+
const two = getUint8();
|
|
128
|
+
const three = getUint8();
|
|
129
|
+
const four = getUint8();
|
|
130
|
+
return (four << 24) | (three << 16) | (two << 8) | one;
|
|
131
|
+
}
|
|
84
132
|
return ((getUint8() << 24) | (getUint8() << 16) | (getUint8() << 8) | getUint8());
|
|
85
133
|
};
|
|
86
134
|
const getPaddedFourByteNumber = () => {
|
|
@@ -90,11 +138,16 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
90
138
|
}
|
|
91
139
|
return lastInt;
|
|
92
140
|
};
|
|
93
|
-
const getUint32 = () => {
|
|
94
|
-
const val = view.getUint32(counter.getDiscardedOffset());
|
|
141
|
+
const getUint32 = (littleEndian = false) => {
|
|
142
|
+
const val = view.getUint32(counter.getDiscardedOffset(), littleEndian);
|
|
95
143
|
counter.increment(4);
|
|
96
144
|
return val;
|
|
97
145
|
};
|
|
146
|
+
const getUint64 = (littleEndian = false) => {
|
|
147
|
+
const val = view.getBigUint64(counter.getDiscardedOffset(), littleEndian);
|
|
148
|
+
counter.increment(8);
|
|
149
|
+
return val;
|
|
150
|
+
};
|
|
98
151
|
const getUint32Le = () => {
|
|
99
152
|
const val = view.getUint32(counter.getDiscardedOffset(), true);
|
|
100
153
|
counter.increment(4);
|
|
@@ -128,6 +181,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
128
181
|
const isIsoBaseMedia = () => {
|
|
129
182
|
return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
|
|
130
183
|
};
|
|
184
|
+
const isRiff = () => {
|
|
185
|
+
return matchesPattern(riffPattern)(data.subarray(0, 4));
|
|
186
|
+
};
|
|
131
187
|
const isWebm = () => {
|
|
132
188
|
return matchesPattern(make_header_1.webmPattern)(data.subarray(0, 4));
|
|
133
189
|
};
|
|
@@ -154,7 +210,6 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
154
210
|
counter.setDiscardedOffset(offset);
|
|
155
211
|
}
|
|
156
212
|
else {
|
|
157
|
-
buf.resize(offset);
|
|
158
213
|
const currentOffset = counter.getOffset();
|
|
159
214
|
counter.increment(offset - currentOffset);
|
|
160
215
|
removeBytesRead();
|
|
@@ -225,19 +280,24 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
225
280
|
bytesRemaining,
|
|
226
281
|
isIsoBaseMedia,
|
|
227
282
|
leb128,
|
|
228
|
-
|
|
283
|
+
removeBytesRead,
|
|
229
284
|
isWebm,
|
|
230
285
|
discard: (length) => {
|
|
231
286
|
counter.increment(length);
|
|
232
287
|
},
|
|
288
|
+
getEightByteNumber,
|
|
233
289
|
getFourByteNumber,
|
|
234
290
|
getSlice,
|
|
235
291
|
getAtom: () => {
|
|
236
292
|
const atom = getSlice(4);
|
|
237
293
|
return new TextDecoder().decode(atom);
|
|
238
294
|
},
|
|
295
|
+
isRiff,
|
|
239
296
|
getPaddedFourByteNumber,
|
|
240
297
|
getMatroskaSegmentId: () => {
|
|
298
|
+
if (bytesRemaining() === 0) {
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
241
301
|
const first = getSlice(1);
|
|
242
302
|
const firstOneString = `0x${Array.from(new Uint8Array(first))
|
|
243
303
|
.map((b) => {
|
|
@@ -249,6 +309,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
249
309
|
if (all_segments_1.knownIdsWithOneLength.includes(firstOneString)) {
|
|
250
310
|
return firstOneString;
|
|
251
311
|
}
|
|
312
|
+
if (bytesRemaining() === 0) {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
252
315
|
const firstTwo = getSlice(1);
|
|
253
316
|
const firstTwoString = `${firstOneString}${Array.from(new Uint8Array(firstTwo))
|
|
254
317
|
.map((b) => {
|
|
@@ -258,6 +321,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
258
321
|
if (all_segments_1.knownIdsWithTwoLength.includes(firstTwoString)) {
|
|
259
322
|
return firstTwoString;
|
|
260
323
|
}
|
|
324
|
+
if (bytesRemaining() === 0) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
261
327
|
const firstThree = getSlice(1);
|
|
262
328
|
const firstThreeString = `${firstTwoString}${Array.from(new Uint8Array(firstThree))
|
|
263
329
|
.map((b) => {
|
|
@@ -267,6 +333,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
267
333
|
if (all_segments_1.knownIdsWithThreeLength.includes(firstThreeString)) {
|
|
268
334
|
return firstThreeString;
|
|
269
335
|
}
|
|
336
|
+
if (bytesRemaining() === 0) {
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
270
339
|
const segmentId = getSlice(1);
|
|
271
340
|
return `${firstThreeString}${Array.from(new Uint8Array(segmentId))
|
|
272
341
|
.map((b) => {
|
|
@@ -275,6 +344,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
275
344
|
.join('')}`;
|
|
276
345
|
},
|
|
277
346
|
getVint: () => {
|
|
347
|
+
if (bytesRemaining() === 0) {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
278
350
|
const firstByte = getUint8();
|
|
279
351
|
const totalLength = firstByte;
|
|
280
352
|
if (totalLength === 0) {
|
|
@@ -285,6 +357,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
285
357
|
while (((totalLength >> (7 - actualLength)) & 0x01) === 0) {
|
|
286
358
|
actualLength++;
|
|
287
359
|
}
|
|
360
|
+
if (bytesRemaining() < actualLength) {
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
288
363
|
const slice = getSlice(actualLength);
|
|
289
364
|
const d = [firstByte, ...Array.from(new Uint8Array(slice))];
|
|
290
365
|
actualLength += 1; // Include the first byte set as 1
|
|
@@ -328,6 +403,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
328
403
|
return val;
|
|
329
404
|
},
|
|
330
405
|
getUint32,
|
|
406
|
+
getUint64,
|
|
331
407
|
// https://developer.apple.com/documentation/quicktime-file-format/sound_sample_description_version_1
|
|
332
408
|
// A 32-bit unsigned fixed-point number (16.16) that indicates the rate at which the sound samples were obtained.
|
|
333
409
|
getFixedPointUnsigned1616Number: () => {
|
|
@@ -346,7 +422,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
346
422
|
const val = getSlice(32);
|
|
347
423
|
return [...Array.from(new Uint8Array(val))];
|
|
348
424
|
},
|
|
349
|
-
|
|
425
|
+
getUint(length) {
|
|
350
426
|
const bytes = getSlice(length);
|
|
351
427
|
const numbers = [...Array.from(new Uint8Array(bytes))];
|
|
352
428
|
return numbers.reduce((acc, byte, index) => acc + (byte << (8 * (numbers.length - index - 1))), 0);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMedia = void 0;
|
|
4
|
+
const matroska_header_1 = require("./matroska-header");
|
|
5
|
+
const matroska_info_1 = require("./matroska-info");
|
|
6
|
+
const matroska_segment_1 = require("./matroska-segment");
|
|
7
|
+
const matroska_trackentry_1 = require("./matroska-trackentry");
|
|
8
|
+
const createMedia = async (writer) => {
|
|
9
|
+
const header = (0, matroska_header_1.makeMatroskaHeader)();
|
|
10
|
+
const w = await writer.createContent();
|
|
11
|
+
await w.write(header);
|
|
12
|
+
const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
|
|
13
|
+
timescale: 1000000,
|
|
14
|
+
duration: 2658,
|
|
15
|
+
});
|
|
16
|
+
const matroskaTrackEntry = (0, matroska_trackentry_1.makeMatroskaVideoTrackEntryBytes)({
|
|
17
|
+
color: {
|
|
18
|
+
transferChracteristics: 'bt709',
|
|
19
|
+
matrixCoefficients: 'bt709',
|
|
20
|
+
primaries: 'bt709',
|
|
21
|
+
fullRange: true,
|
|
22
|
+
},
|
|
23
|
+
width: 1920,
|
|
24
|
+
height: 1080,
|
|
25
|
+
defaultDuration: 2658,
|
|
26
|
+
trackNumber: 1,
|
|
27
|
+
codecId: 'V_VP8',
|
|
28
|
+
});
|
|
29
|
+
const matroskaTracks = (0, matroska_trackentry_1.makeMatroskaTracks)([matroskaTrackEntry]);
|
|
30
|
+
const matroskaSegment = (0, matroska_segment_1.createMatroskaSegment)([matroskaInfo, matroskaTracks]);
|
|
31
|
+
await w.write(matroskaSegment);
|
|
32
|
+
return async () => {
|
|
33
|
+
await w.save();
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
exports.createMedia = createMedia;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const makeMatroskaHeader: () => Uint8Array;
|