@remotion/media-parser 4.0.229 → 4.0.231
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 -7
- 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 +4 -2
- package/dist/boxes/webm/make-track.js +1 -0
- package/dist/boxes/webm/parse-webm-header.js +23 -4
- package/dist/boxes/webm/segments/parse-children.d.ts +12 -7
- package/dist/boxes/webm/segments/parse-children.js +67 -57
- package/dist/boxes/webm/segments.d.ts +8 -3
- package/dist/boxes/webm/segments.js +70 -39
- 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 +167 -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/{cluster.d.ts → matroska/cluster.d.ts} +12 -5
- package/dist/create/{cluster.js → matroska/cluster.js} +23 -20
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/{create-media.js → matroska/create-matroska-media.js} +49 -25
- 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/{create-media.d.ts → media-fn.d.ts} +17 -4
- 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/emit-available-info.d.ts +1 -1
- package/dist/emit-available-info.js +23 -10
- package/dist/esm/buffer.mjs +3 -3
- package/dist/esm/index.mjs +2104 -735
- package/dist/esm/web-fs.mjs +2 -2
- package/dist/get-audio-codec.d.ts +2 -1
- package/dist/get-audio-codec.js +29 -10
- package/dist/get-duration.d.ts +5 -0
- package/dist/get-duration.js +7 -3
- package/dist/get-fps.d.ts +1 -0
- package/dist/get-fps.js +24 -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.d.ts +2 -2
- package/dist/get-video-codec.js +6 -6
- package/dist/has-all-info.d.ts +1 -1
- package/dist/has-all-info.js +8 -8
- package/dist/index.d.ts +6 -8
- package/dist/index.js +7 -3
- package/dist/options.d.ts +10 -1
- package/dist/parse-media.js +42 -14
- package/dist/parse-result.d.ts +15 -0
- package/dist/parse-video.d.ts +3 -1
- package/dist/parse-video.js +6 -14
- package/dist/parser-state.d.ts +3 -3
- package/dist/readers/reader.d.ts +2 -2
- package/dist/samples-from-moof.js +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +5 -0
- package/dist/webcodec-sample-types.d.ts +7 -20
- package/dist/writers/buffer-implementation/writer.d.ts +2 -2
- package/dist/writers/buffer-implementation/writer.js +3 -3
- package/dist/writers/web-fs.js +2 -3
- package/dist/writers/writer.d.ts +5 -3
- package/package.json +3 -3
- 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
- package/dist/create/polyfill-audio-sample.d.ts +0 -3
- package/dist/create/polyfill-audio-sample.js +0 -15
- package/dist/writers/buffer-implementation/multi-buffer.d.ts +0 -0
- package/dist/writers/buffer-implementation/multi-buffer.js +0 -1
|
@@ -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 |
|
|
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,
|
|
@@ -64,6 +64,8 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
|
|
|
64
64
|
timestamp: timecodeInMicroseconds,
|
|
65
65
|
type: 'key',
|
|
66
66
|
duration: undefined,
|
|
67
|
+
cts: timecodeInMicroseconds,
|
|
68
|
+
dts: timecodeInMicroseconds,
|
|
67
69
|
};
|
|
68
70
|
iterator.destroy();
|
|
69
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') {
|
|
@@ -2,14 +2,33 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseWebm = void 0;
|
|
4
4
|
const parse_children_1 = require("./segments/parse-children");
|
|
5
|
+
const continueAfterMatroskaResult = (result, children) => {
|
|
6
|
+
if (result.status === 'done') {
|
|
7
|
+
return {
|
|
8
|
+
status: 'done',
|
|
9
|
+
segments: children,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
status: 'incomplete',
|
|
14
|
+
segments: children,
|
|
15
|
+
continueParsing: async () => {
|
|
16
|
+
const newResult = await result.continueParsing();
|
|
17
|
+
return continueAfterMatroskaResult(newResult, children);
|
|
18
|
+
},
|
|
19
|
+
skipTo: null,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
5
22
|
// Parsing according to https://darkcoding.net/software/reading-mediarecorders-webm-opus-output/
|
|
6
|
-
const parseWebm = (counter, parserContext) => {
|
|
7
|
-
|
|
23
|
+
const parseWebm = async (counter, parserContext) => {
|
|
24
|
+
const children = [];
|
|
25
|
+
const results = await (0, parse_children_1.expectChildren)({
|
|
8
26
|
iterator: counter,
|
|
9
27
|
length: Infinity,
|
|
10
|
-
|
|
11
|
-
wrap: null,
|
|
28
|
+
children,
|
|
12
29
|
parserContext,
|
|
30
|
+
startOffset: counter.counter.getOffset(),
|
|
13
31
|
});
|
|
32
|
+
return continueAfterMatroskaResult(results, children);
|
|
14
33
|
};
|
|
15
34
|
exports.parseWebm = parseWebm;
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ExpectSegmentParseResult, MatroskaParseResult } from '../../../parse-result';
|
|
3
3
|
import type { ParserContext } from '../../../parser-context';
|
|
4
4
|
import type { MatroskaSegment } from '../segments';
|
|
5
|
-
type
|
|
6
|
-
export declare const
|
|
5
|
+
import type { PossibleEbml } from './all-segments';
|
|
6
|
+
export declare const expectAndProcessSegment: ({ iterator, parserContext, offset, children, }: {
|
|
7
|
+
iterator: BufferIterator;
|
|
8
|
+
parserContext: ParserContext;
|
|
9
|
+
offset: number;
|
|
10
|
+
children: PossibleEbml[];
|
|
11
|
+
}) => Promise<ExpectSegmentParseResult>;
|
|
12
|
+
export declare const expectChildren: ({ iterator, length, children, parserContext, startOffset, }: {
|
|
7
13
|
iterator: BufferIterator;
|
|
8
14
|
length: number;
|
|
9
|
-
|
|
10
|
-
wrap: WrapChildren | null;
|
|
15
|
+
children: MatroskaSegment[];
|
|
11
16
|
parserContext: ParserContext;
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
startOffset: number;
|
|
18
|
+
}) => Promise<MatroskaParseResult>;
|
|
@@ -1,100 +1,110 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.expectChildren = void 0;
|
|
3
|
+
exports.expectChildren = exports.expectAndProcessSegment = void 0;
|
|
4
4
|
const segments_1 = require("../segments");
|
|
5
|
-
const processParseResult = ({ parseResult, children,
|
|
5
|
+
const processParseResult = ({ parseResult, children, }) => {
|
|
6
|
+
if (parseResult.segment && !children.includes(parseResult.segment)) {
|
|
7
|
+
children.push(parseResult.segment);
|
|
8
|
+
}
|
|
6
9
|
if (parseResult.status === 'incomplete') {
|
|
7
10
|
// No need to decrement because expectSegment already does it
|
|
8
11
|
return {
|
|
9
12
|
status: 'incomplete',
|
|
10
|
-
|
|
13
|
+
segment: parseResult.segment,
|
|
11
14
|
continueParsing: async () => {
|
|
12
15
|
const newParseResult = await parseResult.continueParsing();
|
|
13
16
|
return processParseResult({
|
|
14
17
|
children,
|
|
15
18
|
parseResult: newParseResult,
|
|
16
|
-
wrap,
|
|
17
19
|
});
|
|
18
20
|
},
|
|
19
|
-
skipTo: null,
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
|
-
for (const segment of parseResult.segments) {
|
|
23
|
-
children.push(segment);
|
|
24
|
-
}
|
|
25
23
|
return {
|
|
26
24
|
status: 'done',
|
|
27
|
-
|
|
25
|
+
segment: parseResult.segment,
|
|
28
26
|
};
|
|
29
27
|
};
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const expectAndProcessSegment = async ({ iterator, parserContext, offset, children, }) => {
|
|
29
|
+
const segment = await (0, segments_1.expectSegment)({
|
|
30
|
+
iterator,
|
|
31
|
+
parserContext,
|
|
32
|
+
offset,
|
|
33
|
+
children,
|
|
34
|
+
});
|
|
35
|
+
return processParseResult({
|
|
36
|
+
children,
|
|
37
|
+
parseResult: segment,
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
exports.expectAndProcessSegment = expectAndProcessSegment;
|
|
41
|
+
const continueAfterSegmentResult = async ({ result, length, children, parserContext, iterator, startOffset, }) => {
|
|
42
|
+
if (result.status === 'done') {
|
|
43
|
+
throw new Error('Should not continue after done');
|
|
33
44
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
if (continued.status === 'incomplete') {
|
|
37
|
-
if (!parserContext.supportsContentRange) {
|
|
38
|
-
throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
|
|
39
|
-
}
|
|
45
|
+
const segmentResult = await result.continueParsing();
|
|
46
|
+
if (segmentResult.status === 'done') {
|
|
40
47
|
return {
|
|
41
48
|
status: 'incomplete',
|
|
42
|
-
continueParsing:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
continueParsing: () => {
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
51
|
+
return (0, exports.expectChildren)({
|
|
52
|
+
children,
|
|
53
|
+
iterator,
|
|
54
|
+
length,
|
|
55
|
+
parserContext,
|
|
56
|
+
startOffset,
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
skipTo: null,
|
|
52
60
|
};
|
|
53
61
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
return {
|
|
63
|
+
status: 'incomplete',
|
|
64
|
+
continueParsing: () => {
|
|
65
|
+
return continueAfterSegmentResult({
|
|
66
|
+
result: segmentResult,
|
|
67
|
+
children,
|
|
68
|
+
iterator,
|
|
69
|
+
length,
|
|
70
|
+
parserContext,
|
|
71
|
+
startOffset,
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
skipTo: null,
|
|
75
|
+
};
|
|
62
76
|
};
|
|
63
|
-
const expectChildren = async ({ iterator, length,
|
|
64
|
-
const children = [...initialChildren];
|
|
65
|
-
const startOffset = iterator.counter.getOffset();
|
|
77
|
+
const expectChildren = async ({ iterator, length, children, parserContext, startOffset, }) => {
|
|
66
78
|
while (iterator.counter.getOffset() < startOffset + length) {
|
|
67
79
|
if (iterator.bytesRemaining() === 0) {
|
|
68
80
|
break;
|
|
69
81
|
}
|
|
70
|
-
const
|
|
71
|
-
const child =
|
|
82
|
+
const currentOffset = iterator.counter.getOffset();
|
|
83
|
+
const child = await (0, exports.expectAndProcessSegment)({
|
|
84
|
+
iterator,
|
|
85
|
+
parserContext,
|
|
86
|
+
offset: currentOffset,
|
|
72
87
|
children,
|
|
73
|
-
parseResult,
|
|
74
|
-
wrap,
|
|
75
88
|
});
|
|
76
89
|
if (child.status === 'incomplete') {
|
|
77
|
-
if (!parserContext.supportsContentRange) {
|
|
78
|
-
throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
|
|
79
|
-
}
|
|
80
90
|
return {
|
|
81
91
|
status: 'incomplete',
|
|
82
|
-
continueParsing:
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
continueParsing: () => {
|
|
93
|
+
return continueAfterSegmentResult({
|
|
94
|
+
result: child,
|
|
95
|
+
children,
|
|
96
|
+
iterator,
|
|
97
|
+
length: length - (currentOffset - startOffset),
|
|
98
|
+
parserContext,
|
|
99
|
+
startOffset: currentOffset,
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
skipTo: null,
|
|
92
103
|
};
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
106
|
return {
|
|
96
107
|
status: 'done',
|
|
97
|
-
segments: wrap ? [wrap(children)] : children,
|
|
98
108
|
};
|
|
99
109
|
};
|
|
100
110
|
exports.expectChildren = expectChildren;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ExpectSegmentParseResult } from '../../parse-result';
|
|
3
3
|
import type { ParserContext } from '../../parser-context';
|
|
4
|
-
import type
|
|
4
|
+
import { type PossibleEbml, type TrackEntry } from './segments/all-segments';
|
|
5
5
|
export type MatroskaSegment = PossibleEbml;
|
|
6
6
|
export type OnTrackEntrySegment = (trackEntry: TrackEntry) => void;
|
|
7
|
-
export declare const expectSegment: (iterator
|
|
7
|
+
export declare const expectSegment: ({ iterator, parserContext, offset, children, }: {
|
|
8
|
+
iterator: BufferIterator;
|
|
9
|
+
parserContext: ParserContext;
|
|
10
|
+
offset: number;
|
|
11
|
+
children: PossibleEbml[];
|
|
12
|
+
}) => Promise<ExpectSegmentParseResult>;
|