@remotion/media-parser 4.0.317 → 4.0.318
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/containers/avc/parse-avc.js +5 -1
- package/dist/containers/flac/parse-flac-frame.js +5 -1
- package/dist/containers/iso-base-media/get-moov-atom.js +5 -1
- package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +5 -1
- package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +5 -1
- package/dist/containers/iso-base-media/moov/mvhd.js +10 -2
- package/dist/containers/iso-base-media/parse-icc-profile.js +10 -2
- package/dist/containers/riff/seek/fetch-idx1.js +5 -1
- package/dist/containers/transport-stream/adts-header.js +5 -1
- package/dist/containers/wav/parse-fact.d.ts +5 -0
- package/dist/containers/wav/parse-fact.js +18 -0
- package/dist/containers/wav/parse-fmt.js +9 -5
- package/dist/containers/wav/parse-wav.js +4 -0
- package/dist/containers/wav/subformats.d.ts +4 -0
- package/dist/containers/wav/subformats.js +17 -0
- package/dist/containers/wav/types.d.ts +5 -1
- package/dist/containers/webm/av1-codec-private.js +5 -1
- package/dist/containers/webm/description.js +5 -1
- package/dist/containers/webm/get-sample-from-block.js +5 -1
- package/dist/containers/webm/make-track.js +10 -2
- package/dist/containers/webm/seek/fetch-web-cues.js +5 -1
- package/dist/esm/index.mjs +234 -75
- package/dist/esm/worker-server-entry.mjs +233 -74
- package/dist/esm/worker-web-entry.mjs +233 -74
- package/dist/index.d.ts +5 -1
- package/dist/iterator/buffer-iterator.d.ts +6 -1
- package/dist/iterator/buffer-iterator.js +25 -25
- package/dist/iterator/buffer-manager.d.ts +5 -3
- package/dist/iterator/buffer-manager.js +24 -23
- package/dist/iterator/polyfilled-arraybuffer.d.ts +6 -0
- package/dist/iterator/polyfilled-arraybuffer.js +21 -0
- package/dist/remotion-license-acknowledge.js +1 -2
- package/dist/state/parser-state.js +5 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -218,7 +218,11 @@ const findEnd = (buffer) => {
|
|
|
218
218
|
return null;
|
|
219
219
|
};
|
|
220
220
|
const inspect = (buffer, avcState) => {
|
|
221
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
221
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
222
|
+
initialData: buffer,
|
|
223
|
+
maxBytes: buffer.byteLength,
|
|
224
|
+
logLevel: 'error',
|
|
225
|
+
});
|
|
222
226
|
iterator.startReadingBits();
|
|
223
227
|
iterator.getBits(1); // forbidden_zero_bit
|
|
224
228
|
const nal_ref_idc = iterator.getBits(2); // nal_ref_idc
|
|
@@ -64,7 +64,11 @@ const parseFrameHeader = ({ iterator, state, }) => {
|
|
|
64
64
|
};
|
|
65
65
|
exports.parseFrameHeader = parseFrameHeader;
|
|
66
66
|
const emitSample = async ({ state, data, offset, }) => {
|
|
67
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
67
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
68
|
+
initialData: data,
|
|
69
|
+
maxBytes: data.length,
|
|
70
|
+
logLevel: 'error',
|
|
71
|
+
});
|
|
68
72
|
const parsed = (0, exports.parseFrameHeader)({ iterator, state });
|
|
69
73
|
if (!parsed) {
|
|
70
74
|
throw new Error('Invalid CRC');
|
|
@@ -54,7 +54,11 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
: null;
|
|
57
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
57
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
58
|
+
initialData: new Uint8Array([]),
|
|
59
|
+
maxBytes: state.contentLength - endOfMdat,
|
|
60
|
+
logLevel: 'error',
|
|
61
|
+
});
|
|
58
62
|
while (true) {
|
|
59
63
|
const result = await reader.reader.read();
|
|
60
64
|
if (result.value) {
|
|
@@ -10,7 +10,11 @@ const getMfraAtom = async ({ src, contentLength, readerInterface, controller, pa
|
|
|
10
10
|
logLevel,
|
|
11
11
|
prefetchCache,
|
|
12
12
|
});
|
|
13
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
13
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
14
|
+
initialData: new Uint8Array(),
|
|
15
|
+
maxBytes: parentSize,
|
|
16
|
+
logLevel: 'error',
|
|
17
|
+
});
|
|
14
18
|
while (true) {
|
|
15
19
|
const res = await result.reader.reader.read();
|
|
16
20
|
if (res.value) {
|
|
@@ -15,7 +15,11 @@ const getMfroAtom = async ({ src, contentLength, readerInterface, controller, lo
|
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
17
17
|
result.reader.abort();
|
|
18
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
18
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
19
|
+
initialData: value,
|
|
20
|
+
maxBytes: value.length,
|
|
21
|
+
logLevel: 'error',
|
|
22
|
+
});
|
|
19
23
|
const size = iterator.getUint32();
|
|
20
24
|
if (size !== 16) {
|
|
21
25
|
iterator.destroy();
|
|
@@ -13,13 +13,21 @@ const parseMvhd = ({ iterator, offset, size, }) => {
|
|
|
13
13
|
const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
14
14
|
const durationInSeconds = Number(durationInUnits) / timeScale;
|
|
15
15
|
const rateArray = iterator.getSlice(4);
|
|
16
|
-
const rateView = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
16
|
+
const rateView = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
17
|
+
initialData: rateArray,
|
|
18
|
+
maxBytes: rateArray.length,
|
|
19
|
+
logLevel: 'error',
|
|
20
|
+
});
|
|
17
21
|
const rate = rateView.getInt8() * 10 +
|
|
18
22
|
rateView.getInt8() +
|
|
19
23
|
rateView.getInt8() * 0.1 +
|
|
20
24
|
rateView.getInt8() * 0.01;
|
|
21
25
|
const volumeArray = iterator.getSlice(2);
|
|
22
|
-
const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
26
|
+
const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
27
|
+
initialData: volumeArray,
|
|
28
|
+
maxBytes: volumeArray.length,
|
|
29
|
+
logLevel: 'error',
|
|
30
|
+
});
|
|
23
31
|
const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
|
|
24
32
|
// reserved 16bit
|
|
25
33
|
iterator.discard(2);
|
|
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseIccProfile = void 0;
|
|
4
4
|
const buffer_iterator_1 = require("../../iterator/buffer-iterator");
|
|
5
5
|
const parseIccProfile = (data) => {
|
|
6
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
6
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
7
|
+
initialData: data,
|
|
8
|
+
maxBytes: data.length,
|
|
9
|
+
logLevel: 'error',
|
|
10
|
+
});
|
|
7
11
|
const size = iterator.getUint32();
|
|
8
12
|
if (size !== data.length) {
|
|
9
13
|
throw new Error('Invalid ICC profile size');
|
|
@@ -52,7 +56,11 @@ const parseIccProfile = (data) => {
|
|
|
52
56
|
entry.tag === 'gXYZ' ||
|
|
53
57
|
entry.tag === 'bXYZ' ||
|
|
54
58
|
entry.tag === 'wtpt') {
|
|
55
|
-
const it = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
59
|
+
const it = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
60
|
+
initialData: found,
|
|
61
|
+
maxBytes: found.length,
|
|
62
|
+
logLevel: 'error',
|
|
63
|
+
});
|
|
56
64
|
it.discard(4);
|
|
57
65
|
const x = it.getInt32() / 65536;
|
|
58
66
|
const y = it.getInt32() / 65536;
|
|
@@ -16,7 +16,11 @@ const fetchIdx1 = async ({ src, readerInterface, controller, position, logLevel,
|
|
|
16
16
|
if (result.contentLength === null) {
|
|
17
17
|
throw new Error('Content length is null');
|
|
18
18
|
}
|
|
19
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
19
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
20
|
+
initialData: new Uint8Array(),
|
|
21
|
+
maxBytes: contentLength - position + 1,
|
|
22
|
+
logLevel: 'error',
|
|
23
|
+
});
|
|
20
24
|
while (true) {
|
|
21
25
|
const res = await result.reader.reader.read();
|
|
22
26
|
if (res.value) {
|
|
@@ -7,7 +7,11 @@ const readAdtsHeader = (buffer) => {
|
|
|
7
7
|
if (buffer.byteLength < 9) {
|
|
8
8
|
return null;
|
|
9
9
|
}
|
|
10
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
10
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
11
|
+
initialData: buffer,
|
|
12
|
+
maxBytes: buffer.byteLength,
|
|
13
|
+
logLevel: 'error',
|
|
14
|
+
});
|
|
11
15
|
iterator.startReadingBits();
|
|
12
16
|
const bits = iterator.getBits(12);
|
|
13
17
|
if (bits !== 0xfff) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFact = void 0;
|
|
4
|
+
const parseFact = ({ state, }) => {
|
|
5
|
+
const { iterator } = state;
|
|
6
|
+
const size = iterator.getUint32Le();
|
|
7
|
+
if (size !== 4) {
|
|
8
|
+
throw new Error(`Expected size 4 for fact box, got ${size}`);
|
|
9
|
+
}
|
|
10
|
+
const numberOfSamplesPerChannel = iterator.getUint32Le();
|
|
11
|
+
const factBox = {
|
|
12
|
+
type: 'wav-fact',
|
|
13
|
+
numberOfSamplesPerChannel,
|
|
14
|
+
};
|
|
15
|
+
state.structure.getWavStructure().boxes.push(factBox);
|
|
16
|
+
return Promise.resolve(null);
|
|
17
|
+
};
|
|
18
|
+
exports.parseFact = parseFact;
|
|
@@ -4,6 +4,7 @@ exports.parseFmt = void 0;
|
|
|
4
4
|
exports.getChannelsFromMask = getChannelsFromMask;
|
|
5
5
|
const register_track_1 = require("../../register-track");
|
|
6
6
|
const webcodecs_timescale_1 = require("../../webcodecs-timescale");
|
|
7
|
+
const subformats_1 = require("./subformats");
|
|
7
8
|
const CHANNELS = {
|
|
8
9
|
0: 'Front Left',
|
|
9
10
|
1: 'Front Right',
|
|
@@ -84,11 +85,14 @@ const parseFmt = async ({ state, }) => {
|
|
|
84
85
|
if (subFormat.length !== 16) {
|
|
85
86
|
throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
if ((0, subformats_1.subformatIsPcm)(subFormat)) {
|
|
89
|
+
// is pcm
|
|
90
|
+
}
|
|
91
|
+
else if ((0, subformats_1.subformatIsIeeeFloat)(subFormat)) {
|
|
92
|
+
// is ieee float
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error(`Unsupported subformat: ${subFormat}`);
|
|
92
96
|
}
|
|
93
97
|
const channels = getChannelsFromMask(channelMask);
|
|
94
98
|
wavHeader.numberOfChannels = channels.length;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseWav = void 0;
|
|
4
4
|
const log_1 = require("../../log");
|
|
5
5
|
const parse_data_1 = require("./parse-data");
|
|
6
|
+
const parse_fact_1 = require("./parse-fact");
|
|
6
7
|
const parse_fmt_1 = require("./parse-fmt");
|
|
7
8
|
const parse_header_1 = require("./parse-header");
|
|
8
9
|
const parse_id3_1 = require("./parse-id3");
|
|
@@ -35,6 +36,9 @@ const parseWav = (state) => {
|
|
|
35
36
|
if (type === 'JUNK' || type === 'FLLR') {
|
|
36
37
|
return (0, parse_junk_1.parseJunk)({ state });
|
|
37
38
|
}
|
|
39
|
+
if (type === 'fact') {
|
|
40
|
+
return (0, parse_fact_1.parseFact)({ state });
|
|
41
|
+
}
|
|
38
42
|
if (type === '\u0000') {
|
|
39
43
|
return Promise.resolve(null);
|
|
40
44
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subformatIsIeeeFloat = exports.subformatIsPcm = exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = exports.WMMEDIASUBTYPE_PCM = void 0;
|
|
4
|
+
exports.WMMEDIASUBTYPE_PCM = [
|
|
5
|
+
1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113,
|
|
6
|
+
];
|
|
7
|
+
exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = [
|
|
8
|
+
3, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113,
|
|
9
|
+
];
|
|
10
|
+
const subformatIsPcm = (subformat) => {
|
|
11
|
+
return subformat.every((value, index) => value === exports.WMMEDIASUBTYPE_PCM[index]);
|
|
12
|
+
};
|
|
13
|
+
exports.subformatIsPcm = subformatIsPcm;
|
|
14
|
+
const subformatIsIeeeFloat = (subformat) => {
|
|
15
|
+
return subformat.every((value, index) => value === exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT[index]);
|
|
16
|
+
};
|
|
17
|
+
exports.subformatIsIeeeFloat = subformatIsIeeeFloat;
|
|
@@ -18,11 +18,15 @@ export type WavList = {
|
|
|
18
18
|
export type WavId3 = {
|
|
19
19
|
type: 'wav-id3';
|
|
20
20
|
};
|
|
21
|
+
export type WavFact = {
|
|
22
|
+
type: 'wav-fact';
|
|
23
|
+
numberOfSamplesPerChannel: number;
|
|
24
|
+
};
|
|
21
25
|
export type WavData = {
|
|
22
26
|
type: 'wav-data';
|
|
23
27
|
dataSize: number;
|
|
24
28
|
};
|
|
25
|
-
type WavBox = WavHeader | WavFmt | WavList | WavId3 | WavData;
|
|
29
|
+
type WavBox = WavHeader | WavFmt | WavList | WavId3 | WavData | WavFact;
|
|
26
30
|
export type WavStructure = {
|
|
27
31
|
type: 'wav';
|
|
28
32
|
boxes: WavBox[];
|
|
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseAv1PrivateData = void 0;
|
|
4
4
|
const buffer_iterator_1 = require("../../iterator/buffer-iterator");
|
|
5
5
|
const parseAv1PrivateData = (data, colrAtom) => {
|
|
6
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
6
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
7
|
+
initialData: data,
|
|
8
|
+
maxBytes: data.byteLength,
|
|
9
|
+
logLevel: 'error',
|
|
10
|
+
});
|
|
7
11
|
iterator.startReadingBits();
|
|
8
12
|
if (iterator.getBits(1) !== 1) {
|
|
9
13
|
iterator.destroy();
|
|
@@ -44,7 +44,11 @@ const getAudioDescription = (track) => {
|
|
|
44
44
|
throw new Error('Error parsing vorbis codec private');
|
|
45
45
|
}
|
|
46
46
|
const vorbisBooks = privateData.slice(offset);
|
|
47
|
-
const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
47
|
+
const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
48
|
+
initialData: vorbisInfo.slice(0),
|
|
49
|
+
maxBytes: vorbisInfo.length,
|
|
50
|
+
logLevel: 'error',
|
|
51
|
+
});
|
|
48
52
|
// type
|
|
49
53
|
bufferIterator.getUint8();
|
|
50
54
|
// vorbis
|
|
@@ -47,7 +47,11 @@ const addAvcToTrackAndActivateTrackIfNecessary = async ({ partialVideoSample, co
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
const getSampleFromBlock = async ({ ebml, webmState, offset, structureState, callbacks, logLevel, onVideoTrack, avcState, }) => {
|
|
50
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
50
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
51
|
+
initialData: ebml.value,
|
|
52
|
+
maxBytes: ebml.value.length,
|
|
53
|
+
logLevel: 'error',
|
|
54
|
+
});
|
|
51
55
|
const trackNumber = iterator.getVint();
|
|
52
56
|
if (trackNumber === null) {
|
|
53
57
|
throw new Error('Not enough data to get track number, should not happen');
|
|
@@ -62,7 +62,11 @@ const getMatroskaVideoCodecString = ({ track, codecSegment: codec, }) => {
|
|
|
62
62
|
}
|
|
63
63
|
if (codec.value === 'V_MPEGH/ISO/HEVC') {
|
|
64
64
|
const priv = (0, traversal_1.getPrivateData)(track);
|
|
65
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
65
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
66
|
+
initialData: priv,
|
|
67
|
+
maxBytes: priv.length,
|
|
68
|
+
logLevel: 'error',
|
|
69
|
+
});
|
|
66
70
|
return 'hvc1.' + (0, make_hvc1_codec_strings_1.getHvc1CodecString)(iterator);
|
|
67
71
|
}
|
|
68
72
|
if (codec.value === 'V_AV1') {
|
|
@@ -137,7 +141,11 @@ const getMatroskaAudioCodecString = (track) => {
|
|
|
137
141
|
}
|
|
138
142
|
if (codec.value === 'A_AAC') {
|
|
139
143
|
const priv = (0, traversal_1.getPrivateData)(track);
|
|
140
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
144
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
145
|
+
initialData: priv,
|
|
146
|
+
maxBytes: priv.length,
|
|
147
|
+
logLevel: 'error',
|
|
148
|
+
});
|
|
141
149
|
iterator.startReadingBits();
|
|
142
150
|
/**
|
|
143
151
|
* ChatGPT
|
|
@@ -17,7 +17,11 @@ const fetchWebmCues = async ({ src, readerInterface, controller, position, logLe
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
result.reader.abort();
|
|
20
|
-
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(
|
|
20
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
|
|
21
|
+
initialData: value,
|
|
22
|
+
maxBytes: value.length,
|
|
23
|
+
logLevel: 'error',
|
|
24
|
+
});
|
|
21
25
|
const segment = await (0, segments_1.expectSegment)({
|
|
22
26
|
iterator,
|
|
23
27
|
logLevel,
|