@remotion/media-parser 4.0.228 → 4.0.230
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/boxes/iso-base-media/esds/decoder-specific-config.d.ts +3 -2
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +7 -8
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +4 -2
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +5 -4
- package/dist/boxes/iso-base-media/esds/esds.d.ts +3 -1
- package/dist/boxes/iso-base-media/esds/esds.js +2 -2
- package/dist/boxes/iso-base-media/make-track.js +2 -1
- package/dist/boxes/iso-base-media/mdat/mdat.js +13 -8
- package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -1
- package/dist/boxes/iso-base-media/moov/moov.js +2 -2
- package/dist/boxes/iso-base-media/mvhd.js +11 -9
- package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
- package/dist/boxes/iso-base-media/process-box.d.ts +5 -4
- package/dist/boxes/iso-base-media/process-box.js +17 -14
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +14 -4
- package/dist/boxes/iso-base-media/stsd/colr.js +13 -1
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +2 -2
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -2
- package/dist/boxes/iso-base-media/stsd/samples.js +7 -6
- package/dist/boxes/iso-base-media/stsd/stsd.js +1 -0
- package/dist/boxes/iso-base-media/to-date.d.ts +1 -0
- package/dist/boxes/iso-base-media/to-date.js +9 -1
- package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -1
- package/dist/boxes/iso-base-media/trak/trak.js +2 -2
- package/dist/boxes/webm/av1-codec-private.js +1 -1
- package/dist/boxes/webm/ebml.d.ts +1 -1
- package/dist/boxes/webm/get-sample-from-block.d.ts +4 -4
- package/dist/boxes/webm/get-sample-from-block.js +5 -2
- package/dist/boxes/webm/make-track.js +1 -0
- package/dist/buffer-iterator.d.ts +1 -1
- package/dist/buffer-iterator.js +1 -8
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.js +90 -0
- package/dist/create/iso-base-media/create-colr.d.ts +6 -0
- package/dist/create/iso-base-media/create-colr.js +26 -0
- package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
- package/dist/create/iso-base-media/create-ftyp.js +22 -0
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
- package/dist/create/iso-base-media/create-ilst.js +14 -0
- package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +168 -0
- package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
- package/dist/create/iso-base-media/create-mdia.js +18 -0
- package/dist/create/iso-base-media/create-moov.d.ts +5 -0
- package/dist/create/iso-base-media/create-moov.js +18 -0
- package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
- package/dist/create/iso-base-media/create-mvhd.js +48 -0
- package/dist/create/iso-base-media/create-trak.d.ts +4 -0
- package/dist/create/iso-base-media/create-trak.js +17 -0
- package/dist/create/iso-base-media/create-udta.d.ts +1 -0
- package/dist/create/iso-base-media/create-udta.js +14 -0
- package/dist/create/iso-base-media/create-url.d.ts +1 -0
- package/dist/create/iso-base-media/create-url.js +16 -0
- package/dist/create/iso-base-media/example-stts.d.ts +3 -0
- package/dist/create/iso-base-media/example-stts.js +2797 -0
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-too.js +27 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
- package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
- package/dist/create/iso-base-media/mp4-header.js +47 -0
- package/dist/create/iso-base-media/primitives.d.ts +15 -0
- package/dist/create/iso-base-media/primitives.js +133 -0
- package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
- package/dist/create/iso-base-media/serialize-track.js +63 -0
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
- package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +35 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +48 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
- package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
- package/dist/create/iso-base-media/udta/create-meta.js +20 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
- package/dist/create/make-track-info.d.ts +20 -0
- package/dist/create/make-track-info.js +2 -0
- package/dist/create/{cluster-segment.d.ts → matroska/cluster-segment.d.ts} +1 -1
- package/dist/create/{cluster-segment.js → matroska/cluster-segment.js} +2 -2
- package/dist/create/matroska/cluster.d.ts +19 -0
- package/dist/create/matroska/cluster.js +74 -0
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/{create-media.js → matroska/create-matroska-media.js} +26 -19
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/{make-duration-with-padding.js → matroska/make-duration-with-padding.js} +1 -1
- package/dist/create/{matroska-cues.d.ts → matroska/matroska-cues.d.ts} +1 -1
- package/dist/create/{matroska-cues.js → matroska/matroska-cues.js} +1 -1
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/{matroska-header.js → matroska/matroska-header.js} +1 -1
- package/dist/create/{matroska-info.d.ts → matroska/matroska-info.d.ts} +1 -1
- package/dist/create/{matroska-info.js → matroska/matroska-info.js} +1 -1
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/{matroska-seek.js → matroska/matroska-seek.js} +1 -1
- package/dist/create/{matroska-segment.d.ts → matroska/matroska-segment.d.ts} +1 -1
- package/dist/create/{matroska-segment.js → matroska/matroska-segment.js} +1 -1
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/{matroska-trackentry.js → matroska/matroska-trackentry.js} +9 -3
- package/dist/create/media-fn.d.ts +31 -0
- package/dist/create/media-fn.js +2 -0
- package/dist/create/timescale.d.ts +1 -1
- package/dist/create/timescale.js +2 -2
- package/dist/esm/buffer.mjs +6 -7
- package/dist/esm/index.mjs +1476 -215
- package/dist/get-audio-codec.d.ts +1 -0
- package/dist/get-audio-codec.js +27 -3
- package/dist/get-fps.d.ts +1 -0
- package/dist/get-fps.js +17 -13
- package/dist/get-sample-positions.d.ts +1 -0
- package/dist/get-sample-positions.js +1 -0
- package/dist/get-tracks.d.ts +1 -0
- package/dist/get-video-codec.js +4 -0
- package/dist/index.d.ts +4 -7
- package/dist/index.js +4 -2
- package/dist/options.d.ts +2 -0
- package/dist/parse-media.js +2 -1
- package/dist/parse-video.d.ts +3 -1
- package/dist/parse-video.js +3 -14
- package/dist/parser-state.d.ts +3 -3
- package/dist/samples-from-moof.js +1 -0
- package/dist/webcodec-sample-types.d.ts +7 -13
- package/dist/writers/buffer-implementation/writer.d.ts +2 -0
- package/dist/writers/buffer-implementation/writer.js +54 -0
- package/dist/writers/buffer.js +2 -53
- package/dist/writers/web-fs.js +1 -0
- package/dist/writers/writer.d.ts +1 -1
- package/package.json +4 -4
- package/dist/create/cluster.d.ts +0 -19
- package/dist/create/cluster.js +0 -55
- package/dist/create/create-media.d.ts +0 -19
- package/dist/create/make-duration-with-padding.d.ts +0 -1
- package/dist/create/matroska-header.d.ts +0 -1
- package/dist/create/matroska-seek.d.ts +0 -6
- package/dist/create/matroska-trackentry.d.ts +0 -27
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseColorParameterBox = void 0;
|
|
4
|
-
const
|
|
4
|
+
const parse_icc_profile_1 = require("../parse-icc-profile");
|
|
5
|
+
const parseColorParameterBox = ({ iterator, size, }) => {
|
|
5
6
|
const byteString = iterator.getByteString(4);
|
|
6
7
|
if (byteString === 'nclx') {
|
|
7
8
|
const primaries = iterator.getUint16();
|
|
@@ -12,6 +13,7 @@ const parseColorParameterBox = ({ iterator, }) => {
|
|
|
12
13
|
iterator.stopReadingBits();
|
|
13
14
|
return {
|
|
14
15
|
type: 'colr-box',
|
|
16
|
+
colorType: 'transfer-characteristics',
|
|
15
17
|
fullRangeFlag,
|
|
16
18
|
matrixIndex,
|
|
17
19
|
primaries,
|
|
@@ -24,12 +26,22 @@ const parseColorParameterBox = ({ iterator, }) => {
|
|
|
24
26
|
const matrixIndex = iterator.getUint16();
|
|
25
27
|
return {
|
|
26
28
|
type: 'colr-box',
|
|
29
|
+
colorType: 'transfer-characteristics',
|
|
27
30
|
fullRangeFlag: false,
|
|
28
31
|
matrixIndex,
|
|
29
32
|
primaries,
|
|
30
33
|
transfer,
|
|
31
34
|
};
|
|
32
35
|
}
|
|
36
|
+
if (byteString === 'prof') {
|
|
37
|
+
const profile = iterator.getSlice(size - 12);
|
|
38
|
+
return {
|
|
39
|
+
type: 'colr-box',
|
|
40
|
+
colorType: 'icc-profile',
|
|
41
|
+
profile,
|
|
42
|
+
parsed: (0, parse_icc_profile_1.parseIccProfile)(profile),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
33
45
|
throw new Error('Unexpected box type ' + byteString);
|
|
34
46
|
};
|
|
35
47
|
exports.parseColorParameterBox = parseColorParameterBox;
|
|
@@ -8,11 +8,10 @@ export interface MebxBox extends BaseBox {
|
|
|
8
8
|
format: string;
|
|
9
9
|
children: AnySegment[];
|
|
10
10
|
}
|
|
11
|
-
export declare const parseMebx: ({ iterator, offset, size, options,
|
|
11
|
+
export declare const parseMebx: ({ iterator, offset, size, options, signal, }: {
|
|
12
12
|
iterator: BufferIterator;
|
|
13
13
|
offset: number;
|
|
14
14
|
size: number;
|
|
15
15
|
options: ParserContext;
|
|
16
|
-
littleEndian: boolean;
|
|
17
16
|
signal: AbortSignal | null;
|
|
18
17
|
}) => Promise<MebxBox>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseMebx = void 0;
|
|
4
4
|
const process_box_1 = require("../process-box");
|
|
5
|
-
const parseMebx = async ({ iterator, offset, size, options,
|
|
5
|
+
const parseMebx = async ({ iterator, offset, size, options, signal, }) => {
|
|
6
6
|
// reserved, 6 bit
|
|
7
7
|
iterator.discard(6);
|
|
8
8
|
const dataReferenceIndex = iterator.getUint16();
|
|
@@ -13,8 +13,8 @@ const parseMebx = async ({ iterator, offset, size, options, littleEndian, signal
|
|
|
13
13
|
initialBoxes: [],
|
|
14
14
|
options,
|
|
15
15
|
continueMdat: false,
|
|
16
|
-
littleEndian,
|
|
17
16
|
signal,
|
|
17
|
+
logLevel: 'info',
|
|
18
18
|
});
|
|
19
19
|
if (children.status === 'incomplete') {
|
|
20
20
|
throw new Error('Incomplete boxes are not allowed');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { LogLevel } from '../../../log';
|
|
2
3
|
import type { AnySegment } from '../../../parse-result';
|
|
3
4
|
import type { ParserContext } from '../../../parser-context';
|
|
4
5
|
type SampleBase = {
|
|
@@ -48,15 +49,17 @@ export type Sample = AudioSample | VideoSample | UnknownSample;
|
|
|
48
49
|
type SampleAndNext = {
|
|
49
50
|
sample: Sample | null;
|
|
50
51
|
};
|
|
51
|
-
export declare const processSample: ({ iterator, options, signal, }: {
|
|
52
|
+
export declare const processSample: ({ iterator, options, signal, logLevel, }: {
|
|
52
53
|
iterator: BufferIterator;
|
|
53
54
|
options: ParserContext;
|
|
54
55
|
signal: AbortSignal | null;
|
|
56
|
+
logLevel: LogLevel;
|
|
55
57
|
}) => Promise<SampleAndNext>;
|
|
56
|
-
export declare const parseSamples: ({ iterator, maxBytes, options, signal, }: {
|
|
58
|
+
export declare const parseSamples: ({ iterator, maxBytes, options, signal, logLevel, }: {
|
|
57
59
|
iterator: BufferIterator;
|
|
58
60
|
maxBytes: number;
|
|
59
61
|
options: ParserContext;
|
|
60
62
|
signal: AbortSignal | null;
|
|
63
|
+
logLevel: LogLevel;
|
|
61
64
|
}) => Promise<Sample[]>;
|
|
62
65
|
export {};
|
|
@@ -61,7 +61,7 @@ const audioTags = [
|
|
|
61
61
|
'mp4a',
|
|
62
62
|
'ac-3',
|
|
63
63
|
];
|
|
64
|
-
const processSample = async ({ iterator, options, signal, }) => {
|
|
64
|
+
const processSample = async ({ iterator, options, signal, logLevel, }) => {
|
|
65
65
|
const fileOffset = iterator.counter.getOffset();
|
|
66
66
|
const bytesRemaining = iterator.bytesRemaining();
|
|
67
67
|
const boxSize = iterator.getUint32();
|
|
@@ -105,8 +105,8 @@ const processSample = async ({ iterator, options, signal, }) => {
|
|
|
105
105
|
initialBoxes: [],
|
|
106
106
|
options,
|
|
107
107
|
continueMdat: false,
|
|
108
|
-
littleEndian: false,
|
|
109
108
|
signal,
|
|
109
|
+
logLevel,
|
|
110
110
|
});
|
|
111
111
|
if (children.status === 'incomplete') {
|
|
112
112
|
throw new Error('Incomplete boxes are not allowed');
|
|
@@ -152,8 +152,8 @@ const processSample = async ({ iterator, options, signal, }) => {
|
|
|
152
152
|
initialBoxes: [],
|
|
153
153
|
options,
|
|
154
154
|
continueMdat: false,
|
|
155
|
-
littleEndian: false,
|
|
156
155
|
signal,
|
|
156
|
+
logLevel,
|
|
157
157
|
});
|
|
158
158
|
if (children.status === 'incomplete') {
|
|
159
159
|
throw new Error('Incomplete boxes are not allowed');
|
|
@@ -203,8 +203,8 @@ const processSample = async ({ iterator, options, signal, }) => {
|
|
|
203
203
|
initialBoxes: [],
|
|
204
204
|
options,
|
|
205
205
|
continueMdat: false,
|
|
206
|
-
littleEndian: false,
|
|
207
206
|
signal,
|
|
207
|
+
logLevel,
|
|
208
208
|
});
|
|
209
209
|
if (children.status === 'incomplete') {
|
|
210
210
|
throw new Error('Incomplete boxes are not allowed');
|
|
@@ -258,8 +258,8 @@ const processSample = async ({ iterator, options, signal, }) => {
|
|
|
258
258
|
initialBoxes: [],
|
|
259
259
|
options,
|
|
260
260
|
continueMdat: false,
|
|
261
|
-
littleEndian: false,
|
|
262
261
|
signal,
|
|
262
|
+
logLevel,
|
|
263
263
|
})
|
|
264
264
|
: (iterator.discard(bytesRemainingInBox),
|
|
265
265
|
{ status: 'done', segments: [] });
|
|
@@ -294,7 +294,7 @@ const processSample = async ({ iterator, options, signal, }) => {
|
|
|
294
294
|
throw new Error(`Unknown sample format ${boxFormat}`);
|
|
295
295
|
};
|
|
296
296
|
exports.processSample = processSample;
|
|
297
|
-
const parseSamples = async ({ iterator, maxBytes, options, signal, }) => {
|
|
297
|
+
const parseSamples = async ({ iterator, maxBytes, options, signal, logLevel, }) => {
|
|
298
298
|
const samples = [];
|
|
299
299
|
const initialOffset = iterator.counter.getOffset();
|
|
300
300
|
while (iterator.bytesRemaining() > 0 &&
|
|
@@ -303,6 +303,7 @@ const parseSamples = async ({ iterator, maxBytes, options, signal, }) => {
|
|
|
303
303
|
iterator,
|
|
304
304
|
options,
|
|
305
305
|
signal,
|
|
306
|
+
logLevel,
|
|
306
307
|
});
|
|
307
308
|
if (sample) {
|
|
308
309
|
samples.push(sample);
|
|
@@ -16,6 +16,7 @@ const parseStsd = async ({ iterator, offset, size, options, signal, }) => {
|
|
|
16
16
|
maxBytes: bytesRemainingInBox,
|
|
17
17
|
options,
|
|
18
18
|
signal,
|
|
19
|
+
logLevel: 'info',
|
|
19
20
|
});
|
|
20
21
|
if (boxes.length !== numberOfEntries) {
|
|
21
22
|
throw new Error(`Expected ${numberOfEntries} sample descriptions, got ${boxes.length}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toUnixTimestamp = void 0;
|
|
3
|
+
exports.fromUnixTimestamp = exports.toUnixTimestamp = void 0;
|
|
4
4
|
const toUnixTimestamp = (value) => {
|
|
5
5
|
if (value === 0) {
|
|
6
6
|
return null;
|
|
@@ -9,3 +9,11 @@ const toUnixTimestamp = (value) => {
|
|
|
9
9
|
return Math.floor(value + baseDate.getTime() / 1000) * 1000;
|
|
10
10
|
};
|
|
11
11
|
exports.toUnixTimestamp = toUnixTimestamp;
|
|
12
|
+
const fromUnixTimestamp = (value) => {
|
|
13
|
+
if (value === null) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
const baseDate = new Date('1904-01-01T00:00:00Z');
|
|
17
|
+
return Math.floor(value / 1000 - baseDate.getTime() / 1000);
|
|
18
|
+
};
|
|
19
|
+
exports.fromUnixTimestamp = fromUnixTimestamp;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { LogLevel } from '../../../log';
|
|
2
3
|
import type { AnySegment } from '../../../parse-result';
|
|
3
4
|
import type { ParserContext } from '../../../parser-context';
|
|
4
5
|
import type { BaseBox } from '../base-type';
|
|
@@ -6,10 +7,11 @@ export interface TrakBox extends BaseBox {
|
|
|
6
7
|
type: 'trak-box';
|
|
7
8
|
children: AnySegment[];
|
|
8
9
|
}
|
|
9
|
-
export declare const parseTrak: ({ data, size, offsetAtStart, options, signal, }: {
|
|
10
|
+
export declare const parseTrak: ({ data, size, offsetAtStart, options, signal, logLevel, }: {
|
|
10
11
|
data: BufferIterator;
|
|
11
12
|
size: number;
|
|
12
13
|
offsetAtStart: number;
|
|
13
14
|
options: ParserContext;
|
|
14
15
|
signal: AbortSignal | null;
|
|
16
|
+
logLevel: LogLevel;
|
|
15
17
|
}) => Promise<TrakBox>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseTrak = void 0;
|
|
4
4
|
const process_box_1 = require("../process-box");
|
|
5
|
-
const parseTrak = async ({ data, size, offsetAtStart, options, signal, }) => {
|
|
5
|
+
const parseTrak = async ({ data, size, offsetAtStart, options, signal, logLevel, }) => {
|
|
6
6
|
const children = await (0, process_box_1.parseBoxes)({
|
|
7
7
|
iterator: data,
|
|
8
8
|
maxBytes: size - (data.counter.getOffset() - offsetAtStart),
|
|
@@ -10,8 +10,8 @@ const parseTrak = async ({ data, size, offsetAtStart, options, signal, }) => {
|
|
|
10
10
|
initialBoxes: [],
|
|
11
11
|
options,
|
|
12
12
|
continueMdat: false,
|
|
13
|
-
littleEndian: false,
|
|
14
13
|
signal,
|
|
14
|
+
logLevel,
|
|
15
15
|
});
|
|
16
16
|
if (children.status === 'incomplete') {
|
|
17
17
|
throw new Error('Incomplete boxes are not allowed');
|
|
@@ -61,7 +61,7 @@ const parseAv1PrivateData = (data, colrAtom) => {
|
|
|
61
61
|
: '0'
|
|
62
62
|
: '0';
|
|
63
63
|
str += '.';
|
|
64
|
-
if (colrAtom) {
|
|
64
|
+
if (colrAtom && colrAtom.colorType === 'transfer-characteristics') {
|
|
65
65
|
str += colrAtom.primaries.toString().padStart(2, '0');
|
|
66
66
|
str += '.';
|
|
67
67
|
str += colrAtom.transfer.toString().padStart(2, '0');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const measureEBMLVarInt: (value: number) => 1 | 2 |
|
|
1
|
+
export declare const measureEBMLVarInt: (value: number) => 1 | 2 | 3 | 4 | 5 | 6;
|
|
2
2
|
export declare const getVariableInt: (value: number, minWidth: number | null) => Uint8Array;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { ParserContext } from '../../parser-context';
|
|
2
|
-
import type {
|
|
2
|
+
import type { AudioOrVideoSample } from '../../webcodec-sample-types';
|
|
3
3
|
import type { BlockSegment, SimpleBlockSegment } from './segments/all-segments';
|
|
4
4
|
type SampleResult = {
|
|
5
5
|
type: 'video-sample';
|
|
6
|
-
videoSample:
|
|
6
|
+
videoSample: AudioOrVideoSample;
|
|
7
7
|
} | {
|
|
8
8
|
type: 'audio-sample';
|
|
9
|
-
audioSample:
|
|
9
|
+
audioSample: AudioOrVideoSample;
|
|
10
10
|
} | {
|
|
11
11
|
type: 'partial-video-sample';
|
|
12
|
-
partialVideoSample: Omit<
|
|
12
|
+
partialVideoSample: Omit<AudioOrVideoSample, 'type'>;
|
|
13
13
|
} | {
|
|
14
14
|
type: 'no-sample';
|
|
15
15
|
};
|
|
@@ -34,8 +34,8 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
|
|
|
34
34
|
if (codec.startsWith('V_')) {
|
|
35
35
|
const partialVideoSample = {
|
|
36
36
|
data: iterator.getSlice(remainingNow),
|
|
37
|
-
cts:
|
|
38
|
-
dts:
|
|
37
|
+
cts: timecodeInMicroseconds,
|
|
38
|
+
dts: timecodeInMicroseconds,
|
|
39
39
|
duration: undefined,
|
|
40
40
|
trackId: trackNumber,
|
|
41
41
|
timestamp: timecodeInMicroseconds,
|
|
@@ -63,6 +63,9 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
|
|
|
63
63
|
trackId: trackNumber,
|
|
64
64
|
timestamp: timecodeInMicroseconds,
|
|
65
65
|
type: 'key',
|
|
66
|
+
duration: undefined,
|
|
67
|
+
cts: timecodeInMicroseconds,
|
|
68
|
+
dts: timecodeInMicroseconds,
|
|
66
69
|
};
|
|
67
70
|
iterator.destroy();
|
|
68
71
|
return {
|
|
@@ -231,6 +231,7 @@ const getTrack = ({ timescale, track, }) => {
|
|
|
231
231
|
codecWithoutConfig: getMatroskaVideoCodecWithoutConfigString({
|
|
232
232
|
codecSegment: codec,
|
|
233
233
|
}),
|
|
234
|
+
fps: null,
|
|
234
235
|
};
|
|
235
236
|
}
|
|
236
237
|
if ((0, track_entry_1.trackTypeToString)(trackType.value.value) === 'audio') {
|
|
@@ -26,7 +26,7 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes:
|
|
|
26
26
|
isWebm: () => boolean;
|
|
27
27
|
discard: (length: number) => void;
|
|
28
28
|
getEightByteNumber: (littleEndian?: boolean) => number;
|
|
29
|
-
getFourByteNumber: (
|
|
29
|
+
getFourByteNumber: () => number;
|
|
30
30
|
getSlice: (amount: number) => Uint8Array;
|
|
31
31
|
getAtom: () => string;
|
|
32
32
|
isRiff: () => boolean;
|
package/dist/buffer-iterator.js
CHANGED
|
@@ -132,14 +132,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
132
132
|
]);
|
|
133
133
|
return Number(bigInt);
|
|
134
134
|
};
|
|
135
|
-
const getFourByteNumber = (
|
|
136
|
-
if (littleEndian) {
|
|
137
|
-
const one = getUint8();
|
|
138
|
-
const two = getUint8();
|
|
139
|
-
const three = getUint8();
|
|
140
|
-
const four = getUint8();
|
|
141
|
-
return (four << 24) | (three << 16) | (two << 8) | one;
|
|
142
|
-
}
|
|
135
|
+
const getFourByteNumber = () => {
|
|
143
136
|
return ((getUint8() << 24) | (getUint8() << 16) | (getUint8() << 8) | getUint8());
|
|
144
137
|
};
|
|
145
138
|
const getPaddedFourByteNumber = () => {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAvc1Data = void 0;
|
|
4
|
+
const make_header_1 = require("../../../boxes/webm/make-header");
|
|
5
|
+
const primitives_1 = require("../primitives");
|
|
6
|
+
const createAvc1Data = ({ avccBox, pasp, width, height, horizontalResolution, verticalResolution, compressorName, depth, }) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('avc1'),
|
|
10
|
+
// reserved
|
|
11
|
+
new Uint8Array([0, 0, 0, 0, 0, 0]),
|
|
12
|
+
// data_reference_index
|
|
13
|
+
new Uint8Array([0, 1]),
|
|
14
|
+
// version
|
|
15
|
+
new Uint8Array([0, 0]),
|
|
16
|
+
// revisionLevel
|
|
17
|
+
new Uint8Array([0, 0]),
|
|
18
|
+
// vendor
|
|
19
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
20
|
+
// temporalQuality
|
|
21
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
22
|
+
// spatialQuality
|
|
23
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
24
|
+
// width
|
|
25
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(width),
|
|
26
|
+
// height
|
|
27
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(height),
|
|
28
|
+
// horizontalResolution
|
|
29
|
+
(0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(horizontalResolution),
|
|
30
|
+
// verticalResolution
|
|
31
|
+
(0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(verticalResolution),
|
|
32
|
+
// dataSize
|
|
33
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
34
|
+
// frame count per sample
|
|
35
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(1),
|
|
36
|
+
// compressor name
|
|
37
|
+
(0, primitives_1.stringToPascalString)(compressorName),
|
|
38
|
+
// depth
|
|
39
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(depth),
|
|
40
|
+
// colorTableId
|
|
41
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(-1),
|
|
42
|
+
// avcc box
|
|
43
|
+
avccBox,
|
|
44
|
+
// pasp
|
|
45
|
+
pasp,
|
|
46
|
+
]));
|
|
47
|
+
};
|
|
48
|
+
exports.createAvc1Data = createAvc1Data;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MakeTrackAudio, MakeTrackVideo } from '../../make-track-info';
|
|
2
|
+
export type Avc1Data = {
|
|
3
|
+
pasp: Uint8Array;
|
|
4
|
+
avccBox: Uint8Array;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
horizontalResolution: number;
|
|
8
|
+
verticalResolution: number;
|
|
9
|
+
compressorName: string;
|
|
10
|
+
depth: number;
|
|
11
|
+
type: 'avc1-data';
|
|
12
|
+
};
|
|
13
|
+
export type Mp4aData = {
|
|
14
|
+
type: 'mp4a-data';
|
|
15
|
+
sampleRate: number;
|
|
16
|
+
channelCount: number;
|
|
17
|
+
maxBitrate: number;
|
|
18
|
+
avgBitrate: number;
|
|
19
|
+
codecPrivate: Uint8Array | null;
|
|
20
|
+
};
|
|
21
|
+
export type CodecSpecificData = Avc1Data | Mp4aData;
|
|
22
|
+
export declare const createCodecSpecificData: (track: MakeTrackAudio | MakeTrackVideo) => Uint8Array;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCodecSpecificData = void 0;
|
|
4
|
+
const create_avcc_1 = require("../trak/mdia/minf/stbl/stsd/create-avcc");
|
|
5
|
+
const create_pasp_1 = require("../trak/mdia/minf/stbl/stsd/create-pasp");
|
|
6
|
+
const avc1_1 = require("./avc1");
|
|
7
|
+
const mp4a_1 = require("./mp4a");
|
|
8
|
+
const createCodecSpecificData = (track) => {
|
|
9
|
+
if (track.type === 'video') {
|
|
10
|
+
return (0, avc1_1.createAvc1Data)({
|
|
11
|
+
avccBox: (0, create_avcc_1.createAvccBox)(track.codecPrivate),
|
|
12
|
+
compressorName: 'WebCodecs',
|
|
13
|
+
depth: 24,
|
|
14
|
+
horizontalResolution: 72,
|
|
15
|
+
verticalResolution: 72,
|
|
16
|
+
height: track.height,
|
|
17
|
+
width: track.width,
|
|
18
|
+
pasp: (0, create_pasp_1.createPasp)(1, 1),
|
|
19
|
+
type: 'avc1-data',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (track.type === 'audio') {
|
|
23
|
+
return (0, mp4a_1.createMp4a)({
|
|
24
|
+
type: 'mp4a-data',
|
|
25
|
+
// TODO: Put in values based on real data,
|
|
26
|
+
// this seems to work though
|
|
27
|
+
avgBitrate: 128 * 1024,
|
|
28
|
+
maxBitrate: 128 * 1024,
|
|
29
|
+
channelCount: track.numberOfChannels,
|
|
30
|
+
sampleRate: track.sampleRate,
|
|
31
|
+
codecPrivate: track.codecPrivate,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Unsupported codec specific data ' + track);
|
|
35
|
+
};
|
|
36
|
+
exports.createCodecSpecificData = createCodecSpecificData;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMp4a = void 0;
|
|
4
|
+
const make_header_1 = require("../../../boxes/webm/make-header");
|
|
5
|
+
const primitives_1 = require("../primitives");
|
|
6
|
+
const createMp4a = ({ sampleRate, channelCount, avgBitrate, maxBitrate, codecPrivate, }) => {
|
|
7
|
+
if (!codecPrivate) {
|
|
8
|
+
throw new Error('Need codecPrivate for mp4a');
|
|
9
|
+
}
|
|
10
|
+
const esdsAtom = (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
11
|
+
// type
|
|
12
|
+
(0, primitives_1.stringsToUint8Array)('esds'),
|
|
13
|
+
// version
|
|
14
|
+
new Uint8Array([0]),
|
|
15
|
+
// flags
|
|
16
|
+
new Uint8Array([0, 0, 0]),
|
|
17
|
+
// tag = 'ES_DescrTag'
|
|
18
|
+
new Uint8Array([3]),
|
|
19
|
+
(0, primitives_1.addLeading128Size)((0, make_header_1.combineUint8Arrays)([
|
|
20
|
+
// ES_ID
|
|
21
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(2),
|
|
22
|
+
// streamDependenceFlag, URL_Flag, OCRstreamFlag
|
|
23
|
+
new Uint8Array([0]),
|
|
24
|
+
// DecoderConfigDescrTag
|
|
25
|
+
new Uint8Array([4]),
|
|
26
|
+
(0, primitives_1.addLeading128Size)((0, make_header_1.combineUint8Arrays)([
|
|
27
|
+
// objectTypeIndication
|
|
28
|
+
new Uint8Array([0x40]),
|
|
29
|
+
// streamType, upStream
|
|
30
|
+
new Uint8Array([21]),
|
|
31
|
+
// reserved
|
|
32
|
+
new Uint8Array([0, 0, 0]),
|
|
33
|
+
// maxBitrate
|
|
34
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(maxBitrate),
|
|
35
|
+
// avgBitrate
|
|
36
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(avgBitrate),
|
|
37
|
+
// DecoderSpecificInfoTag
|
|
38
|
+
new Uint8Array([5]),
|
|
39
|
+
// codec private, for example [17, 144]
|
|
40
|
+
// audioObjectType = 2 = 'AAC LC'
|
|
41
|
+
// samplingFrequencyIndex = 3 = '48000 Hz'
|
|
42
|
+
// channelConfiguration = 2 = '2 channels'
|
|
43
|
+
/**
|
|
44
|
+
* Byte 1 (17): 0001 0001
|
|
45
|
+
^^^^^ ^^^^
|
|
46
|
+
| |
|
|
47
|
+
| +-- Start of samplingFrequencyIndex (3)
|
|
48
|
+
+-- audioConfigType (2)
|
|
49
|
+
|
|
50
|
+
Byte 2 (144): 1001 0000
|
|
51
|
+
^^^^ ^^^^
|
|
52
|
+
| |
|
|
53
|
+
| +-- Remaining bits/padding
|
|
54
|
+
+-- channelConfiguration (2)
|
|
55
|
+
*/
|
|
56
|
+
(0, primitives_1.addLeading128Size)(codecPrivate),
|
|
57
|
+
])),
|
|
58
|
+
// SLConfigDescrTag
|
|
59
|
+
new Uint8Array([6]),
|
|
60
|
+
(0, primitives_1.addLeading128Size)(new Uint8Array([2])),
|
|
61
|
+
])),
|
|
62
|
+
]));
|
|
63
|
+
return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
64
|
+
// type
|
|
65
|
+
(0, primitives_1.stringsToUint8Array)('mp4a'),
|
|
66
|
+
// reserved
|
|
67
|
+
new Uint8Array([0, 0, 0, 0, 0, 0]),
|
|
68
|
+
// data_reference_index
|
|
69
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(1),
|
|
70
|
+
// version
|
|
71
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(0),
|
|
72
|
+
// revision level
|
|
73
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(0),
|
|
74
|
+
// vendor
|
|
75
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
76
|
+
// channelCount
|
|
77
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(channelCount),
|
|
78
|
+
// sampleSize
|
|
79
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(16),
|
|
80
|
+
// compressionId
|
|
81
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(0),
|
|
82
|
+
// packet size
|
|
83
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(0),
|
|
84
|
+
// sample rate
|
|
85
|
+
(0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(sampleRate),
|
|
86
|
+
// esds atom
|
|
87
|
+
esdsAtom,
|
|
88
|
+
]));
|
|
89
|
+
};
|
|
90
|
+
exports.createMp4a = createMp4a;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createColr = void 0;
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
// TODO: Not used in creation of MP4 yet
|
|
7
|
+
const createColr = ({ fullRange, matrixIndex, primaries, transferFunction, }) => {
|
|
8
|
+
return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
9
|
+
// type
|
|
10
|
+
(0, primitives_1.stringsToUint8Array)('colr'),
|
|
11
|
+
// colour_type
|
|
12
|
+
(0, primitives_1.stringsToUint8Array)('nclx'),
|
|
13
|
+
// primaries
|
|
14
|
+
// 1 = 'ITU-R BT.7090
|
|
15
|
+
new Uint8Array([0, primaries]),
|
|
16
|
+
// transfer_function
|
|
17
|
+
// 1 = 'ITU-R BT.7090
|
|
18
|
+
new Uint8Array([0, transferFunction]),
|
|
19
|
+
// matrix_index
|
|
20
|
+
// 1 = 'ITU-R BT.7090
|
|
21
|
+
new Uint8Array([0, matrixIndex]),
|
|
22
|
+
// full_range_flag
|
|
23
|
+
new Uint8Array([fullRange ? 1 : 0]),
|
|
24
|
+
]));
|
|
25
|
+
};
|
|
26
|
+
exports.createColr = createColr;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const createFtyp: ({ majorBrand, minorBrand, compatibleBrands, }: {
|
|
2
|
+
majorBrand: string;
|
|
3
|
+
minorBrand: number;
|
|
4
|
+
compatibleBrands: string[];
|
|
5
|
+
}) => Uint8Array;
|
|
6
|
+
export declare const createIsoBaseMediaFtyp: ({ majorBrand, minorBrand, compatibleBrands, }: {
|
|
7
|
+
majorBrand: string;
|
|
8
|
+
minorBrand: number;
|
|
9
|
+
compatibleBrands: string[];
|
|
10
|
+
}) => Uint8Array;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIsoBaseMediaFtyp = exports.createFtyp = void 0;
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createFtyp = ({ majorBrand, minorBrand, compatibleBrands, }) => {
|
|
7
|
+
const type = (0, primitives_1.stringsToUint8Array)('ftyp');
|
|
8
|
+
const majorBrandArr = (0, primitives_1.stringsToUint8Array)(majorBrand);
|
|
9
|
+
const minorBrandArr = (0, primitives_1.numberTo32BitUIntOrInt)(minorBrand);
|
|
10
|
+
const compatibleBrandsArr = (0, make_header_1.combineUint8Arrays)(compatibleBrands.map((b) => (0, primitives_1.stringsToUint8Array)(b)));
|
|
11
|
+
return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
12
|
+
type,
|
|
13
|
+
majorBrandArr,
|
|
14
|
+
minorBrandArr,
|
|
15
|
+
compatibleBrandsArr,
|
|
16
|
+
]));
|
|
17
|
+
};
|
|
18
|
+
exports.createFtyp = createFtyp;
|
|
19
|
+
const createIsoBaseMediaFtyp = ({ majorBrand, minorBrand, compatibleBrands, }) => {
|
|
20
|
+
return (0, exports.createFtyp)({ compatibleBrands, majorBrand, minorBrand });
|
|
21
|
+
};
|
|
22
|
+
exports.createIsoBaseMediaFtyp = createIsoBaseMediaFtyp;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createIlst: (items: Uint8Array[]) => Uint8Array;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIlst = void 0;
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createIlst = (items) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
|
|
8
|
+
// name
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('ilst'),
|
|
10
|
+
// items
|
|
11
|
+
...items,
|
|
12
|
+
]));
|
|
13
|
+
};
|
|
14
|
+
exports.createIlst = createIlst;
|