@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
package/dist/esm/web-fs.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/writers/web-fs.ts
|
|
2
|
-
var createContent = async () => {
|
|
2
|
+
var createContent = async ({ filename }) => {
|
|
3
3
|
const directoryHandle = await navigator.storage.getDirectory();
|
|
4
|
-
|
|
4
|
+
directoryHandle.removeEntry(filename);
|
|
5
5
|
const fileHandle = await directoryHandle.getFileHandle(filename, {
|
|
6
6
|
create: true
|
|
7
7
|
});
|
|
@@ -4,13 +4,14 @@ import { type MediaParserAudioCodec } from './get-tracks';
|
|
|
4
4
|
import type { AnySegment } from './parse-result';
|
|
5
5
|
import type { ParserState } from './parser-state';
|
|
6
6
|
export declare const getAudioCodec: (boxes: AnySegment[], parserState: ParserState) => MediaParserAudioCodec | null;
|
|
7
|
-
export declare const hasAudioCodec: (boxes: AnySegment[]
|
|
7
|
+
export declare const hasAudioCodec: (boxes: AnySegment[]) => boolean;
|
|
8
8
|
type AudioCodecInfo = {
|
|
9
9
|
format: string;
|
|
10
10
|
primarySpecificator: number | null;
|
|
11
11
|
secondarySpecificator: number | null;
|
|
12
12
|
description: Uint8Array | undefined;
|
|
13
13
|
};
|
|
14
|
+
export declare const getCodecPrivateFromTrak: (trakBox: TrakBox) => Uint8Array | null;
|
|
14
15
|
export declare const getNumberOfChannelsFromTrak: (trak: TrakBox) => number | null;
|
|
15
16
|
export declare const getSampleRate: (trak: TrakBox) => number | null;
|
|
16
17
|
export declare const getAudioCodecFromTrak: (trak: TrakBox) => AudioCodecInfo | null;
|
package/dist/get-audio-codec.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
|
|
3
|
+
exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
|
|
4
4
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
5
|
const get_fps_1 = require("./get-fps");
|
|
6
6
|
const get_tracks_1 = require("./get-tracks");
|
|
@@ -22,13 +22,8 @@ const getAudioCodec = (boxes, parserState) => {
|
|
|
22
22
|
return null;
|
|
23
23
|
};
|
|
24
24
|
exports.getAudioCodec = getAudioCodec;
|
|
25
|
-
const hasAudioCodec = (boxes
|
|
26
|
-
|
|
27
|
-
return (0, exports.getAudioCodec)(boxes, state) !== null;
|
|
28
|
-
}
|
|
29
|
-
catch (_a) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
25
|
+
const hasAudioCodec = (boxes) => {
|
|
26
|
+
return (0, get_tracks_1.hasTracks)(boxes);
|
|
32
27
|
};
|
|
33
28
|
exports.hasAudioCodec = hasAudioCodec;
|
|
34
29
|
const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
|
@@ -47,10 +42,10 @@ const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
|
|
47
42
|
};
|
|
48
43
|
}
|
|
49
44
|
const audioSpecificConfig = descriptor.decoderSpecificConfigs.find((d) => {
|
|
50
|
-
return d.type === '
|
|
45
|
+
return d.type === 'mp4a-specific-config' ? d : null;
|
|
51
46
|
});
|
|
52
47
|
if (!audioSpecificConfig ||
|
|
53
|
-
audioSpecificConfig.type !== '
|
|
48
|
+
audioSpecificConfig.type !== 'mp4a-specific-config') {
|
|
54
49
|
throw new Error('No audio-specific-config');
|
|
55
50
|
}
|
|
56
51
|
return {
|
|
@@ -59,6 +54,30 @@ const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
|
|
59
54
|
description: audioSpecificConfig.asBytes,
|
|
60
55
|
};
|
|
61
56
|
};
|
|
57
|
+
const getCodecPrivateFromTrak = (trakBox) => {
|
|
58
|
+
const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
|
|
59
|
+
if (!stsdBox) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const audioSample = stsdBox.samples.find((s) => s.type === 'audio');
|
|
63
|
+
if (!audioSample || audioSample.type !== 'audio') {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const esds = audioSample.children.find((b) => b.type === 'esds-box');
|
|
67
|
+
if (!esds || esds.type !== 'esds-box') {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const decoderConfigDescriptor = esds.descriptors.find((d) => d.type === 'decoder-config-descriptor');
|
|
71
|
+
if (!decoderConfigDescriptor) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const mp4a = decoderConfigDescriptor.decoderSpecificConfigs.find((d) => d.type === 'mp4a-specific-config');
|
|
75
|
+
if (!mp4a) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return mp4a.asBytes;
|
|
79
|
+
};
|
|
80
|
+
exports.getCodecPrivateFromTrak = getCodecPrivateFromTrak;
|
|
62
81
|
const onSample = (sample, children) => {
|
|
63
82
|
const child = children.find((c) => c.type === 'esds-box');
|
|
64
83
|
if (child && child.type === 'esds-box') {
|
package/dist/get-duration.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { AnySegment } from './parse-result';
|
|
2
2
|
import type { ParserState } from './parser-state';
|
|
3
|
+
export declare const isMatroska: (boxes: AnySegment[]) => {
|
|
4
|
+
type: "Segment";
|
|
5
|
+
value: import("./boxes/webm/segments/all-segments").PossibleEbml[];
|
|
6
|
+
minVintWidth: number | null;
|
|
7
|
+
} | undefined;
|
|
3
8
|
export declare const getDuration: (boxes: AnySegment[], parserState: ParserState) => number | null;
|
|
4
9
|
export declare const hasDuration: (boxes: AnySegment[], parserState: ParserState) => boolean;
|
package/dist/get-duration.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasDuration = exports.getDuration = void 0;
|
|
3
|
+
exports.hasDuration = exports.getDuration = exports.isMatroska = void 0;
|
|
4
4
|
const get_sample_positions_from_track_1 = require("./boxes/iso-base-media/get-sample-positions-from-track");
|
|
5
5
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
6
6
|
const get_tracks_1 = require("./get-tracks");
|
|
@@ -28,9 +28,13 @@ const getDurationFromMatroska = (segments) => {
|
|
|
28
28
|
}
|
|
29
29
|
return (duration.value.value / timestampScale.value.value) * 1000;
|
|
30
30
|
};
|
|
31
|
-
const
|
|
31
|
+
const isMatroska = (boxes) => {
|
|
32
32
|
const matroskaBox = boxes.find((b) => b.type === 'Segment');
|
|
33
|
-
|
|
33
|
+
return matroskaBox;
|
|
34
|
+
};
|
|
35
|
+
exports.isMatroska = isMatroska;
|
|
36
|
+
const getDuration = (boxes, parserState) => {
|
|
37
|
+
if ((0, exports.isMatroska)(boxes)) {
|
|
34
38
|
return getDurationFromMatroska(boxes);
|
|
35
39
|
}
|
|
36
40
|
const moovBox = (0, traversal_1.getMoovBox)(boxes);
|
package/dist/get-fps.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ type TimescaleAndDuration = {
|
|
|
7
7
|
export declare const trakBoxContainsAudio: (trakBox: TrakBox) => boolean;
|
|
8
8
|
export declare const trakBoxContainsVideo: (trakBox: TrakBox) => boolean;
|
|
9
9
|
export declare const getTimescaleAndDuration: (trakBox: TrakBox) => TimescaleAndDuration | null;
|
|
10
|
+
export declare const getFpsFromMp4TrakBox: (trakBox: TrakBox) => number | null;
|
|
10
11
|
export declare const getFps: (segments: AnySegment[]) => number | null;
|
|
11
12
|
export declare const hasFps: (boxes: AnySegment[]) => boolean;
|
|
12
13
|
export {};
|
package/dist/get-fps.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasFps = exports.getFps = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
|
|
3
|
+
exports.hasFps = exports.getFps = exports.getFpsFromMp4TrakBox = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
|
|
4
4
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
|
+
const get_duration_1 = require("./get-duration");
|
|
5
6
|
const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
6
7
|
let totalSamples = 0;
|
|
7
8
|
for (const sample of sttsBox.sampleDistribution) {
|
|
@@ -43,21 +44,12 @@ const getTimescaleAndDuration = (trakBox) => {
|
|
|
43
44
|
return null;
|
|
44
45
|
};
|
|
45
46
|
exports.getTimescaleAndDuration = getTimescaleAndDuration;
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
if (!moovBox) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
const trackBoxes = (0, traversal_1.getTraks)(moovBox);
|
|
52
|
-
const trackBox = trackBoxes.find(exports.trakBoxContainsVideo);
|
|
53
|
-
if (!trackBox) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
const timescaleAndDuration = (0, exports.getTimescaleAndDuration)(trackBox);
|
|
47
|
+
const getFpsFromMp4TrakBox = (trakBox) => {
|
|
48
|
+
const timescaleAndDuration = (0, exports.getTimescaleAndDuration)(trakBox);
|
|
57
49
|
if (!timescaleAndDuration) {
|
|
58
50
|
return null;
|
|
59
51
|
}
|
|
60
|
-
const sttsBox = (0, traversal_1.getSttsBox)(
|
|
52
|
+
const sttsBox = (0, traversal_1.getSttsBox)(trakBox);
|
|
61
53
|
if (!sttsBox) {
|
|
62
54
|
return null;
|
|
63
55
|
}
|
|
@@ -67,9 +59,28 @@ const getFps = (segments) => {
|
|
|
67
59
|
durationInSamples: timescaleAndDuration.duration,
|
|
68
60
|
});
|
|
69
61
|
};
|
|
62
|
+
exports.getFpsFromMp4TrakBox = getFpsFromMp4TrakBox;
|
|
63
|
+
const getFps = (segments) => {
|
|
64
|
+
const moovBox = (0, traversal_1.getMoovBox)(segments);
|
|
65
|
+
if (!moovBox) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const trackBoxes = (0, traversal_1.getTraks)(moovBox);
|
|
69
|
+
const trackBox = trackBoxes.find(exports.trakBoxContainsVideo);
|
|
70
|
+
if (!trackBox) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return (0, exports.getFpsFromMp4TrakBox)(trackBox);
|
|
74
|
+
};
|
|
70
75
|
exports.getFps = getFps;
|
|
71
76
|
const hasFps = (boxes) => {
|
|
72
77
|
try {
|
|
78
|
+
// Matroska has no FPS metadata
|
|
79
|
+
// Not bothering to parse
|
|
80
|
+
// Idea: `guaranteedFps` field
|
|
81
|
+
if ((0, get_duration_1.isMatroska)(boxes)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
73
84
|
return (0, exports.getFps)(boxes) !== null;
|
|
74
85
|
}
|
|
75
86
|
catch (_a) {
|
package/dist/get-tracks.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
2
|
-
import type
|
|
2
|
+
import { type MediaParserVideoCodec, type VideoTrackColorParams } from './get-tracks';
|
|
3
3
|
import type { AnySegment } from './parse-result';
|
|
4
|
-
export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "
|
|
4
|
+
export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "h265" | "h264" | "av1" | "prores";
|
|
5
5
|
export declare const getVideoCodec: (boxes: AnySegment[]) => MediaParserVideoCodec | null;
|
|
6
6
|
export declare const hasVideoCodec: (boxes: AnySegment[]) => boolean;
|
|
7
7
|
export declare const getVideoPrivateData: (trakBox: TrakBox) => Uint8Array | null;
|
package/dist/get-video-codec.js
CHANGED
|
@@ -5,6 +5,7 @@ const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
|
5
5
|
const av1_codec_private_1 = require("./boxes/webm/av1-codec-private");
|
|
6
6
|
const get_fps_1 = require("./get-fps");
|
|
7
7
|
const get_sample_aspect_ratio_1 = require("./get-sample-aspect-ratio");
|
|
8
|
+
const get_tracks_1 = require("./get-tracks");
|
|
8
9
|
const getVideoCodecFromIsoTrak = (trakBox) => {
|
|
9
10
|
const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
|
|
10
11
|
if (stsdBox && stsdBox.type === 'stsd-box') {
|
|
@@ -98,12 +99,7 @@ const getVideoCodec = (boxes) => {
|
|
|
98
99
|
};
|
|
99
100
|
exports.getVideoCodec = getVideoCodec;
|
|
100
101
|
const hasVideoCodec = (boxes) => {
|
|
101
|
-
|
|
102
|
-
return (0, exports.getVideoCodec)(boxes) !== null;
|
|
103
|
-
}
|
|
104
|
-
catch (_a) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
102
|
+
return (0, get_tracks_1.hasTracks)(boxes);
|
|
107
103
|
};
|
|
108
104
|
exports.hasVideoCodec = hasVideoCodec;
|
|
109
105
|
const getVideoPrivateData = (trakBox) => {
|
|
@@ -135,6 +131,10 @@ const getIsoBmColrConfig = (trakBox) => {
|
|
|
135
131
|
if (!colrAtom) {
|
|
136
132
|
return null;
|
|
137
133
|
}
|
|
134
|
+
// TODO: Not doing anything with a in ICC color profile yet
|
|
135
|
+
if (colrAtom.colorType !== 'transfer-characteristics') {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
138
|
// https://github.com/bbc/qtff-parameter-editor
|
|
139
139
|
return {
|
|
140
140
|
fullRange: colrAtom.fullRangeFlag,
|
package/dist/has-all-info.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Options, ParseMediaFields } from './options';
|
|
2
2
|
import type { ParseResult } from './parse-result';
|
|
3
3
|
import type { ParserState } from './parser-state';
|
|
4
|
-
export declare const getAvailableInfo: (options: Options<ParseMediaFields>, parseResult: ParseResult, state: ParserState) => Record<keyof Options<ParseMediaFields>, boolean>;
|
|
4
|
+
export declare const getAvailableInfo: (options: Options<ParseMediaFields>, parseResult: ParseResult | null, state: ParserState) => Record<keyof Options<ParseMediaFields>, boolean>;
|
package/dist/has-all-info.js
CHANGED
|
@@ -12,27 +12,27 @@ const getAvailableInfo = (options, parseResult, state) => {
|
|
|
12
12
|
const keys = Object.entries(options).filter(([, value]) => value);
|
|
13
13
|
const infos = keys.map(([key]) => {
|
|
14
14
|
if (key === 'boxes') {
|
|
15
|
-
return parseResult.status === 'done';
|
|
15
|
+
return Boolean(parseResult && parseResult.status === 'done');
|
|
16
16
|
}
|
|
17
17
|
if (key === 'durationInSeconds') {
|
|
18
|
-
return (0, get_duration_1.hasDuration)(parseResult.segments, state);
|
|
18
|
+
return Boolean(parseResult && (0, get_duration_1.hasDuration)(parseResult.segments, state));
|
|
19
19
|
}
|
|
20
20
|
if (key === 'dimensions' ||
|
|
21
21
|
key === 'rotation' ||
|
|
22
22
|
key === 'unrotatedDimensions') {
|
|
23
|
-
return (0, get_dimensions_1.hasDimensions)(parseResult.segments, state);
|
|
23
|
+
return Boolean(parseResult && (0, get_dimensions_1.hasDimensions)(parseResult.segments, state));
|
|
24
24
|
}
|
|
25
25
|
if (key === 'fps') {
|
|
26
|
-
return (0, get_fps_1.hasFps)(parseResult.segments);
|
|
26
|
+
return Boolean(parseResult && (0, get_fps_1.hasFps)(parseResult.segments));
|
|
27
27
|
}
|
|
28
28
|
if (key === 'videoCodec') {
|
|
29
|
-
return (0, get_video_codec_1.hasVideoCodec)(parseResult.segments);
|
|
29
|
+
return Boolean(parseResult && (0, get_video_codec_1.hasVideoCodec)(parseResult.segments));
|
|
30
30
|
}
|
|
31
31
|
if (key === 'audioCodec') {
|
|
32
|
-
return (0, get_audio_codec_1.hasAudioCodec)(parseResult.segments
|
|
32
|
+
return Boolean(parseResult && (0, get_audio_codec_1.hasAudioCodec)(parseResult.segments));
|
|
33
33
|
}
|
|
34
34
|
if (key === 'tracks') {
|
|
35
|
-
return (0, get_tracks_1.hasTracks)(parseResult.segments);
|
|
35
|
+
return Boolean(parseResult && (0, get_tracks_1.hasTracks)(parseResult.segments));
|
|
36
36
|
}
|
|
37
37
|
if (key === 'internalStats') {
|
|
38
38
|
return false;
|
|
@@ -44,7 +44,7 @@ const getAvailableInfo = (options, parseResult, state) => {
|
|
|
44
44
|
return true;
|
|
45
45
|
}
|
|
46
46
|
if (key === 'container') {
|
|
47
|
-
return (0, get_container_1.hasContainer)(parseResult.segments);
|
|
47
|
+
return Boolean(parseResult && (0, get_container_1.hasContainer)(parseResult.segments));
|
|
48
48
|
}
|
|
49
49
|
throw new Error(`Unknown key: ${key}`);
|
|
50
50
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import type { LogLevel } from './log';
|
|
2
2
|
export { WriterInterface } from './writers/writer';
|
|
3
3
|
export { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
|
|
4
|
-
export type { Options, ParseMediaContainer, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOptions, ParseMediaResult, TracksField, } from './options';
|
|
4
|
+
export type { Options, ParseMediaContainer, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, TracksField, } from './options';
|
|
5
5
|
export { parseMedia } from './parse-media';
|
|
6
|
-
export { AudioOrVideoSample,
|
|
7
|
-
export type { MediaFn } from './create/
|
|
6
|
+
export { AudioOrVideoSample, OnAudioSample, OnAudioTrack, OnVideoSample, OnVideoTrack, } from './webcodec-sample-types';
|
|
7
|
+
export type { MediaFn } from './create/media-fn';
|
|
8
8
|
export { Dimensions } from './get-dimensions';
|
|
9
9
|
export type { ReaderInterface } from './readers/reader';
|
|
10
10
|
export type { LogLevel };
|
|
11
11
|
export declare const MediaParserInternals: {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
onBytesProgress: (totalBytes: number) => void;
|
|
15
|
-
onMillisecondsProgress: (totalMilliseconds: number) => void;
|
|
16
|
-
}) => Promise<import("./create/create-media").MediaFn>;
|
|
12
|
+
createMatroskaMedia: ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, }: import("./create/media-fn").MediaFnGeneratorInput) => Promise<import("./create/media-fn").MediaFn>;
|
|
13
|
+
createIsoBaseMedia: ({ writer, onBytesProgress, onMillisecondsProgress, logLevel, filename, }: import("./create/media-fn").MediaFnGeneratorInput) => Promise<import("./create/media-fn").MediaFn>;
|
|
17
14
|
Log: {
|
|
18
15
|
trace: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
|
|
19
16
|
verbose: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => void;
|
|
@@ -22,3 +19,4 @@ export declare const MediaParserInternals: {
|
|
|
22
19
|
error: (...args: Parameters<typeof console.log>) => void;
|
|
23
20
|
};
|
|
24
21
|
};
|
|
22
|
+
export { VERSION } from './version';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MediaParserInternals = exports.parseMedia = void 0;
|
|
4
|
-
const
|
|
3
|
+
exports.VERSION = exports.MediaParserInternals = exports.parseMedia = void 0;
|
|
4
|
+
const create_iso_base_media_1 = require("./create/iso-base-media/create-iso-base-media");
|
|
5
|
+
const create_matroska_media_1 = require("./create/matroska/create-matroska-media");
|
|
5
6
|
const log_1 = require("./log");
|
|
6
7
|
var parse_media_1 = require("./parse-media");
|
|
7
8
|
Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
|
|
8
9
|
exports.MediaParserInternals = {
|
|
9
|
-
|
|
10
|
+
createMatroskaMedia: create_matroska_media_1.createMatroskaMedia,
|
|
11
|
+
createIsoBaseMedia: create_iso_base_media_1.createIsoBaseMedia,
|
|
10
12
|
Log: log_1.Log,
|
|
11
13
|
};
|
|
14
|
+
var version_1 = require("./version");
|
|
15
|
+
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
|
package/dist/options.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Dimensions } from './get-dimensions';
|
|
2
2
|
import type { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, VideoTrack } from './get-tracks';
|
|
3
|
+
import type { LogLevel } from './log';
|
|
3
4
|
import type { AnySegment } from './parse-result';
|
|
4
5
|
import type { InternalStats } from './parser-state';
|
|
5
6
|
import type { ReaderInterface } from './readers/reader';
|
|
@@ -110,11 +111,19 @@ export type ParseMediaResult<Fields extends Options<ParseMediaFields>> = (Fields
|
|
|
110
111
|
export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
|
|
111
112
|
fields?: F;
|
|
112
113
|
} & ParseMediaCallbacks<F>;
|
|
114
|
+
export type ParseMediaProgress = {
|
|
115
|
+
bytes: number;
|
|
116
|
+
percentage: number | null;
|
|
117
|
+
totalBytes: number | null;
|
|
118
|
+
};
|
|
119
|
+
export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
|
|
113
120
|
export type ParseMediaOptions<F extends Options<ParseMediaFields>> = {
|
|
114
|
-
src: string |
|
|
121
|
+
src: string | Blob;
|
|
115
122
|
reader?: ReaderInterface;
|
|
116
123
|
onAudioTrack?: OnAudioTrack;
|
|
117
124
|
onVideoTrack?: OnVideoTrack;
|
|
118
125
|
signal?: AbortSignal;
|
|
126
|
+
logLevel?: LogLevel;
|
|
127
|
+
onParseProgress?: ParseMediaOnProgress;
|
|
119
128
|
} & ParseMediaDynamicOptions<F>;
|
|
120
129
|
export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
package/dist/parse-media.js
CHANGED
|
@@ -4,10 +4,11 @@ exports.parseMedia = void 0;
|
|
|
4
4
|
const buffer_iterator_1 = require("./buffer-iterator");
|
|
5
5
|
const emit_available_info_1 = require("./emit-available-info");
|
|
6
6
|
const has_all_info_1 = require("./has-all-info");
|
|
7
|
+
const log_1 = require("./log");
|
|
7
8
|
const parse_video_1 = require("./parse-video");
|
|
8
9
|
const parser_state_1 = require("./parser-state");
|
|
9
10
|
const from_fetch_1 = require("./readers/from-fetch");
|
|
10
|
-
const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.fetchReader, onAudioTrack, onVideoTrack, signal, ...more }) => {
|
|
11
|
+
const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.fetchReader, onAudioTrack, onVideoTrack, signal, logLevel = 'info', onParseProgress, ...more }) => {
|
|
11
12
|
const state = (0, parser_state_1.makeParserState)({
|
|
12
13
|
hasAudioCallbacks: onAudioTrack !== null,
|
|
13
14
|
hasVideoCallbacks: onVideoTrack !== null,
|
|
@@ -23,8 +24,15 @@ const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.
|
|
|
23
24
|
const moreFields = more;
|
|
24
25
|
let iterator = null;
|
|
25
26
|
let parseResult = null;
|
|
27
|
+
const canSkipVideoData = !onVideoTrack && !onAudioTrack;
|
|
28
|
+
if (canSkipVideoData) {
|
|
29
|
+
log_1.Log.verbose(logLevel, 'Only parsing metadata, because no onVideoTrack and onAudioTrack callbacks were passed.');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
log_1.Log.verbose(logLevel, 'Parsing video data, because onVideoTrack/onAudioTrack callbacks were passed.');
|
|
33
|
+
}
|
|
26
34
|
const options = {
|
|
27
|
-
canSkipVideoData
|
|
35
|
+
canSkipVideoData,
|
|
28
36
|
onAudioTrack: onAudioTrack !== null && onAudioTrack !== void 0 ? onAudioTrack : null,
|
|
29
37
|
onVideoTrack: onVideoTrack !== null && onVideoTrack !== void 0 ? onVideoTrack : null,
|
|
30
38
|
parserState: state,
|
|
@@ -33,6 +41,26 @@ const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.
|
|
|
33
41
|
process.env.KEEP_SAMPLES === 'true'),
|
|
34
42
|
supportsContentRange,
|
|
35
43
|
};
|
|
44
|
+
const hasAllInfo = () => {
|
|
45
|
+
if (parseResult === null) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const availableInfo = (0, has_all_info_1.getAvailableInfo)(fields !== null && fields !== void 0 ? fields : {}, parseResult, state);
|
|
49
|
+
return Object.values(availableInfo).every(Boolean);
|
|
50
|
+
};
|
|
51
|
+
const triggerInfoEmit = () => {
|
|
52
|
+
const availableInfo = (0, has_all_info_1.getAvailableInfo)(fields !== null && fields !== void 0 ? fields : {}, parseResult, state);
|
|
53
|
+
(0, emit_available_info_1.emitAvailableInfo)({
|
|
54
|
+
hasInfo: availableInfo,
|
|
55
|
+
moreFields,
|
|
56
|
+
parseResult,
|
|
57
|
+
state,
|
|
58
|
+
returnValue,
|
|
59
|
+
contentLength,
|
|
60
|
+
name,
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
triggerInfoEmit();
|
|
36
64
|
while (parseResult === null || parseResult.status === 'incomplete') {
|
|
37
65
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
38
66
|
throw new Error('Aborted');
|
|
@@ -60,7 +88,16 @@ const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.
|
|
|
60
88
|
if (!iterator) {
|
|
61
89
|
throw new Error('Unexpected null');
|
|
62
90
|
}
|
|
91
|
+
await (onParseProgress === null || onParseProgress === void 0 ? void 0 : onParseProgress({
|
|
92
|
+
bytes: iterator.counter.getOffset(),
|
|
93
|
+
percentage: contentLength
|
|
94
|
+
? iterator.counter.getOffset() / contentLength
|
|
95
|
+
: null,
|
|
96
|
+
totalBytes: contentLength,
|
|
97
|
+
}));
|
|
98
|
+
triggerInfoEmit();
|
|
63
99
|
if (parseResult && parseResult.status === 'incomplete') {
|
|
100
|
+
log_1.Log.verbose(logLevel, 'Continuing parsing of file, currently at position', iterator.counter.getOffset(), (0, has_all_info_1.getAvailableInfo)(fields !== null && fields !== void 0 ? fields : {}, parseResult, state));
|
|
64
101
|
parseResult = await parseResult.continueParsing();
|
|
65
102
|
}
|
|
66
103
|
else {
|
|
@@ -68,22 +105,12 @@ const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.
|
|
|
68
105
|
iterator,
|
|
69
106
|
options,
|
|
70
107
|
signal: signal !== null && signal !== void 0 ? signal : null,
|
|
108
|
+
logLevel,
|
|
71
109
|
});
|
|
72
110
|
}
|
|
73
|
-
const availableInfo = (0, has_all_info_1.getAvailableInfo)(fields !== null && fields !== void 0 ? fields : {}, parseResult, state);
|
|
74
|
-
const hasAllInfo = Object.values(availableInfo).every(Boolean);
|
|
75
|
-
(0, emit_available_info_1.emitAvailableInfo)({
|
|
76
|
-
hasInfo: availableInfo,
|
|
77
|
-
moreFields,
|
|
78
|
-
parseResult,
|
|
79
|
-
state,
|
|
80
|
-
returnValue,
|
|
81
|
-
contentLength,
|
|
82
|
-
name,
|
|
83
|
-
});
|
|
84
111
|
// TODO Better: Check if no active listeners are registered
|
|
85
112
|
// Also maybe check for canSkipVideoData
|
|
86
|
-
if (hasAllInfo && !onVideoTrack && !onAudioTrack) {
|
|
113
|
+
if (hasAllInfo() && !onVideoTrack && !onAudioTrack) {
|
|
87
114
|
break;
|
|
88
115
|
}
|
|
89
116
|
if (parseResult &&
|
|
@@ -98,6 +125,7 @@ const parseMedia = async ({ src, fields, reader: readerInterface = from_fetch_1.
|
|
|
98
125
|
iterator.skipTo(parseResult.skipTo, true);
|
|
99
126
|
}
|
|
100
127
|
}
|
|
128
|
+
log_1.Log.verbose(logLevel, 'Finished parsing file');
|
|
101
129
|
// Force assign
|
|
102
130
|
(0, emit_available_info_1.emitAvailableInfo)({
|
|
103
131
|
hasInfo: Object.keys(fields !== null && fields !== void 0 ? fields : {}).reduce((acc, key) => {
|
package/dist/parse-result.d.ts
CHANGED
|
@@ -44,3 +44,18 @@ export type ParseResult = {
|
|
|
44
44
|
skipTo: number | null;
|
|
45
45
|
continueParsing: () => Promise<ParseResult>;
|
|
46
46
|
};
|
|
47
|
+
export type MatroskaParseResult = {
|
|
48
|
+
status: 'done';
|
|
49
|
+
} | {
|
|
50
|
+
status: 'incomplete';
|
|
51
|
+
skipTo: number | null;
|
|
52
|
+
continueParsing: () => Promise<MatroskaParseResult>;
|
|
53
|
+
};
|
|
54
|
+
export type ExpectSegmentParseResult = {
|
|
55
|
+
status: 'done';
|
|
56
|
+
segment: MatroskaSegment;
|
|
57
|
+
} | {
|
|
58
|
+
status: 'incomplete';
|
|
59
|
+
segment: MatroskaSegment | null;
|
|
60
|
+
continueParsing: () => Promise<ExpectSegmentParseResult>;
|
|
61
|
+
};
|
package/dist/parse-video.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BufferIterator } from './buffer-iterator';
|
|
2
|
+
import { type LogLevel } from './log';
|
|
2
3
|
import type { IsoBaseMediaBox, ParseResult } from './parse-result';
|
|
3
4
|
import type { ParserContext } from './parser-context';
|
|
4
5
|
export type PartialMdatBox = {
|
|
@@ -14,8 +15,9 @@ export type BoxAndNext = {
|
|
|
14
15
|
} | {
|
|
15
16
|
type: 'incomplete';
|
|
16
17
|
} | PartialMdatBox;
|
|
17
|
-
export declare const parseVideo: ({ iterator, options, signal, }: {
|
|
18
|
+
export declare const parseVideo: ({ iterator, options, signal, logLevel, }: {
|
|
18
19
|
iterator: BufferIterator;
|
|
19
20
|
options: ParserContext;
|
|
20
21
|
signal: AbortSignal | null;
|
|
22
|
+
logLevel: LogLevel;
|
|
21
23
|
}) => Promise<ParseResult>;
|
package/dist/parse-video.js
CHANGED
|
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseVideo = void 0;
|
|
4
4
|
const process_box_1 = require("./boxes/iso-base-media/process-box");
|
|
5
5
|
const parse_webm_header_1 = require("./boxes/webm/parse-webm-header");
|
|
6
|
-
const
|
|
6
|
+
const log_1 = require("./log");
|
|
7
|
+
const parseVideo = ({ iterator, options, signal, logLevel, }) => {
|
|
7
8
|
if (iterator.bytesRemaining() === 0) {
|
|
8
9
|
return Promise.resolve({
|
|
9
10
|
status: 'incomplete',
|
|
@@ -13,6 +14,7 @@ const parseVideo = ({ iterator, options, signal, }) => {
|
|
|
13
14
|
iterator,
|
|
14
15
|
options,
|
|
15
16
|
signal,
|
|
17
|
+
logLevel,
|
|
16
18
|
});
|
|
17
19
|
},
|
|
18
20
|
skipTo: null,
|
|
@@ -20,20 +22,9 @@ const parseVideo = ({ iterator, options, signal, }) => {
|
|
|
20
22
|
}
|
|
21
23
|
if (iterator.isRiff()) {
|
|
22
24
|
throw new Error('AVI files are not yet supported');
|
|
23
|
-
/*
|
|
24
|
-
iterator.discard(4);
|
|
25
|
-
return parseBoxes({
|
|
26
|
-
iterator,
|
|
27
|
-
maxBytes: Infinity,
|
|
28
|
-
allowIncompleteBoxes: true,
|
|
29
|
-
initialBoxes: [],
|
|
30
|
-
options,
|
|
31
|
-
continueMdat: false,
|
|
32
|
-
littleEndian: true,
|
|
33
|
-
});
|
|
34
|
-
*/
|
|
35
25
|
}
|
|
36
26
|
if (iterator.isIsoBaseMedia()) {
|
|
27
|
+
log_1.Log.verbose(logLevel, 'Detected ISO Base Media container');
|
|
37
28
|
return (0, process_box_1.parseBoxes)({
|
|
38
29
|
iterator,
|
|
39
30
|
maxBytes: Infinity,
|
|
@@ -41,11 +32,12 @@ const parseVideo = ({ iterator, options, signal, }) => {
|
|
|
41
32
|
initialBoxes: [],
|
|
42
33
|
options,
|
|
43
34
|
continueMdat: false,
|
|
44
|
-
littleEndian: false,
|
|
45
35
|
signal,
|
|
36
|
+
logLevel,
|
|
46
37
|
});
|
|
47
38
|
}
|
|
48
39
|
if (iterator.isWebm()) {
|
|
40
|
+
log_1.Log.verbose(logLevel, 'Detected Matroska container');
|
|
49
41
|
return Promise.resolve((0, parse_webm_header_1.parseWebm)(iterator, options));
|
|
50
42
|
}
|
|
51
43
|
if (iterator.isMp3()) {
|
package/dist/parser-state.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OnTrackEntrySegment } from './boxes/webm/segments';
|
|
2
2
|
import type { TrackInfo } from './boxes/webm/segments/track-entry';
|
|
3
|
-
import type {
|
|
3
|
+
import type { AudioOrVideoSample, OnAudioSample, OnVideoSample } from './webcodec-sample-types';
|
|
4
4
|
export type InternalStats = {};
|
|
5
5
|
export declare const makeParserState: ({ hasAudioCallbacks, hasVideoCallbacks, signal, }: {
|
|
6
6
|
hasAudioCallbacks: boolean;
|
|
@@ -13,8 +13,8 @@ export declare const makeParserState: ({ hasAudioCallbacks, hasVideoCallbacks, s
|
|
|
13
13
|
setTimestampOffset: (byteOffset: number, timestamp: number) => void;
|
|
14
14
|
getTimestampOffsetForByteOffset: (byteOffset: number) => number | undefined;
|
|
15
15
|
registerAudioSampleCallback: (id: number, callback: OnAudioSample | null) => Promise<void>;
|
|
16
|
-
onAudioSample: (trackId: number, audioSample:
|
|
17
|
-
onVideoSample: (trackId: number, videoSample:
|
|
16
|
+
onAudioSample: (trackId: number, audioSample: AudioOrVideoSample) => Promise<void>;
|
|
17
|
+
onVideoSample: (trackId: number, videoSample: AudioOrVideoSample) => Promise<void>;
|
|
18
18
|
getInternalStats: () => {};
|
|
19
19
|
getTimescale: () => number;
|
|
20
20
|
setTimescale: (newTimescale: number) => void;
|
package/dist/readers/reader.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ type ReadResult = {
|
|
|
8
8
|
name: string;
|
|
9
9
|
supportsContentRange: boolean;
|
|
10
10
|
};
|
|
11
|
-
type ReadContent = (src: string |
|
|
12
|
-
type GetLength = (src: string |
|
|
11
|
+
type ReadContent = (src: string | Blob, range: [number, number] | number | null, signal: AbortSignal | undefined) => Promise<ReadResult>;
|
|
12
|
+
type GetLength = (src: string | Blob) => Promise<number>;
|
|
13
13
|
export type ReaderInterface = {
|
|
14
14
|
read: ReadContent;
|
|
15
15
|
getLength: GetLength;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION = "4.0.231";
|