@remotion/media-parser 4.0.315 → 4.0.317
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/mp3/parse-xing.js +3 -2
- package/dist/containers/wav/parse-fmt.d.ts +1 -0
- package/dist/containers/wav/parse-fmt.js +59 -1
- package/dist/containers/wav/parse-junk.d.ts +5 -0
- package/dist/containers/wav/parse-junk.js +12 -0
- package/dist/containers/wav/parse-wav.js +4 -0
- package/dist/errors.js +3 -1
- package/dist/esm/index.mjs +72 -5
- package/dist/esm/worker-server-entry.mjs +70 -3
- package/dist/esm/worker-web-entry.mjs +70 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/dist/containers/iso-base-media/mvhd.d.ts +0 -30
- package/dist/containers/iso-base-media/mvhd.js +0 -65
- package/dist/index.cjs +0 -54
|
@@ -69,8 +69,9 @@ const parseXing = (data) => {
|
|
|
69
69
|
vbrScale = extractI4(data, offset);
|
|
70
70
|
offset += 4;
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
// Allow extra data after the standard Xing fields, as some encoders add additional information
|
|
73
|
+
if (offset > data.length) {
|
|
74
|
+
throw new Error('xing header was parsed wrong: read beyond available data');
|
|
74
75
|
}
|
|
75
76
|
return {
|
|
76
77
|
sampleRate,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ParseResult } from '../../parse-result';
|
|
2
2
|
import type { ParserState } from '../../state/parser-state';
|
|
3
|
+
export declare function getChannelsFromMask(channelMask: number): string[];
|
|
3
4
|
export declare const parseFmt: ({ state, }: {
|
|
4
5
|
state: ParserState;
|
|
5
6
|
}) => Promise<ParseResult>;
|
|
@@ -1,14 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseFmt = void 0;
|
|
4
|
+
exports.getChannelsFromMask = getChannelsFromMask;
|
|
4
5
|
const register_track_1 = require("../../register-track");
|
|
5
6
|
const webcodecs_timescale_1 = require("../../webcodecs-timescale");
|
|
7
|
+
const CHANNELS = {
|
|
8
|
+
0: 'Front Left',
|
|
9
|
+
1: 'Front Right',
|
|
10
|
+
2: 'Front Center',
|
|
11
|
+
3: 'Low Frequency',
|
|
12
|
+
4: 'Back Left',
|
|
13
|
+
5: 'Back Right',
|
|
14
|
+
6: 'Front Left of Center',
|
|
15
|
+
7: 'Front Right of Center',
|
|
16
|
+
8: 'Back Center',
|
|
17
|
+
9: 'Side Left',
|
|
18
|
+
10: 'Side Right',
|
|
19
|
+
11: 'Top Center',
|
|
20
|
+
12: 'Top Front Left',
|
|
21
|
+
13: 'Top Front Center',
|
|
22
|
+
14: 'Top Front Right',
|
|
23
|
+
15: 'Top Back Left',
|
|
24
|
+
16: 'Top Back Center',
|
|
25
|
+
17: 'Top Back Right',
|
|
26
|
+
// Add more if needed as per the spec
|
|
27
|
+
};
|
|
28
|
+
function getChannelsFromMask(channelMask) {
|
|
29
|
+
const channels = [];
|
|
30
|
+
for (let bit = 0; bit < 18; bit++) {
|
|
31
|
+
if ((channelMask & (1 << bit)) !== 0) {
|
|
32
|
+
const channelName = CHANNELS[bit];
|
|
33
|
+
if (channelName) {
|
|
34
|
+
channels.push(channelName);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
channels.push(`Unknown Channel (bit ${bit})`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return channels;
|
|
42
|
+
}
|
|
6
43
|
const parseFmt = async ({ state, }) => {
|
|
7
44
|
const { iterator } = state;
|
|
8
45
|
const ckSize = iterator.getUint32Le(); // chunkSize
|
|
9
46
|
const box = iterator.startBox(ckSize);
|
|
10
47
|
const audioFormat = iterator.getUint16Le();
|
|
11
|
-
if (audioFormat !== 1) {
|
|
48
|
+
if (audioFormat !== 1 && audioFormat !== 65534) {
|
|
12
49
|
throw new Error(`Only supporting WAVE with PCM audio format, but got ${audioFormat}`);
|
|
13
50
|
}
|
|
14
51
|
const numberOfChannels = iterator.getUint16Le();
|
|
@@ -35,6 +72,27 @@ const parseFmt = async ({ state, }) => {
|
|
|
35
72
|
type: 'wav-fmt',
|
|
36
73
|
};
|
|
37
74
|
state.structure.getWavStructure().boxes.push(wavHeader);
|
|
75
|
+
if (audioFormat === 65534) {
|
|
76
|
+
const extraSize = iterator.getUint16Le();
|
|
77
|
+
if (extraSize !== 22) {
|
|
78
|
+
throw new Error(`Only supporting WAVE with 22 extra bytes, but got ${extraSize} bytes extra size`);
|
|
79
|
+
}
|
|
80
|
+
iterator.getUint16Le(); // valid bits per sample
|
|
81
|
+
const channelMask = iterator.getUint32Le();
|
|
82
|
+
const subFormat = iterator.getSlice(16);
|
|
83
|
+
// check if same as [ 1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113 ]
|
|
84
|
+
if (subFormat.length !== 16) {
|
|
85
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
|
|
86
|
+
}
|
|
87
|
+
for (let i = 0; i < 16; i++) {
|
|
88
|
+
if (subFormat[i] !==
|
|
89
|
+
[1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
|
|
90
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const channels = getChannelsFromMask(channelMask);
|
|
94
|
+
wavHeader.numberOfChannels = channels.length;
|
|
95
|
+
}
|
|
38
96
|
await (0, register_track_1.registerAudioTrack)({
|
|
39
97
|
track: {
|
|
40
98
|
type: 'audio',
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseJunk = void 0;
|
|
4
|
+
const log_1 = require("../../log");
|
|
5
|
+
const parseJunk = ({ state, }) => {
|
|
6
|
+
const { iterator } = state;
|
|
7
|
+
const ckSize = iterator.getUint32Le(); // chunkSize
|
|
8
|
+
log_1.Log.trace(state.logLevel, `Skipping JUNK chunk of size ${ckSize}`);
|
|
9
|
+
iterator.discard(ckSize);
|
|
10
|
+
return Promise.resolve(null);
|
|
11
|
+
};
|
|
12
|
+
exports.parseJunk = parseJunk;
|
|
@@ -6,6 +6,7 @@ const parse_data_1 = require("./parse-data");
|
|
|
6
6
|
const parse_fmt_1 = require("./parse-fmt");
|
|
7
7
|
const parse_header_1 = require("./parse-header");
|
|
8
8
|
const parse_id3_1 = require("./parse-id3");
|
|
9
|
+
const parse_junk_1 = require("./parse-junk");
|
|
9
10
|
const parse_list_1 = require("./parse-list");
|
|
10
11
|
const parse_media_section_1 = require("./parse-media-section");
|
|
11
12
|
const parseWav = (state) => {
|
|
@@ -31,6 +32,9 @@ const parseWav = (state) => {
|
|
|
31
32
|
if (type === 'id3' || type === 'ID3') {
|
|
32
33
|
return (0, parse_id3_1.parseId3)({ state });
|
|
33
34
|
}
|
|
35
|
+
if (type === 'JUNK' || type === 'FLLR') {
|
|
36
|
+
return (0, parse_junk_1.parseJunk)({ state });
|
|
37
|
+
}
|
|
34
38
|
if (type === '\u0000') {
|
|
35
39
|
return Promise.resolve(null);
|
|
36
40
|
}
|
package/dist/errors.js
CHANGED
|
@@ -53,6 +53,8 @@ exports.MediaParserAbortError = MediaParserAbortError;
|
|
|
53
53
|
const hasBeenAborted = (error) => {
|
|
54
54
|
return (error instanceof MediaParserAbortError ||
|
|
55
55
|
// On worker it is not the same instance, but same name
|
|
56
|
-
error.name === 'MediaParserAbortError'
|
|
56
|
+
error.name === 'MediaParserAbortError' ||
|
|
57
|
+
// fetch gives BodyStreamBuffer was aborted
|
|
58
|
+
error.name === 'AbortError');
|
|
57
59
|
};
|
|
58
60
|
exports.hasBeenAborted = hasBeenAborted;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -6770,7 +6770,7 @@ class MediaParserAbortError extends Error {
|
|
|
6770
6770
|
}
|
|
6771
6771
|
}
|
|
6772
6772
|
var hasBeenAborted = (error) => {
|
|
6773
|
-
return error instanceof MediaParserAbortError || error.name === "MediaParserAbortError";
|
|
6773
|
+
return error instanceof MediaParserAbortError || error.name === "MediaParserAbortError" || error.name === "AbortError";
|
|
6774
6774
|
};
|
|
6775
6775
|
|
|
6776
6776
|
// src/with-resolvers.ts
|
|
@@ -8764,8 +8764,8 @@ var parseXing = (data) => {
|
|
|
8764
8764
|
vbrScale = extractI4(data, offset);
|
|
8765
8765
|
offset += 4;
|
|
8766
8766
|
}
|
|
8767
|
-
if (offset
|
|
8768
|
-
throw new Error("xing header was parsed wrong:
|
|
8767
|
+
if (offset > data.length) {
|
|
8768
|
+
throw new Error("xing header was parsed wrong: read beyond available data");
|
|
8769
8769
|
}
|
|
8770
8770
|
return {
|
|
8771
8771
|
sampleRate,
|
|
@@ -15075,6 +15075,40 @@ var parseData = ({
|
|
|
15075
15075
|
};
|
|
15076
15076
|
|
|
15077
15077
|
// src/containers/wav/parse-fmt.ts
|
|
15078
|
+
var CHANNELS = {
|
|
15079
|
+
0: "Front Left",
|
|
15080
|
+
1: "Front Right",
|
|
15081
|
+
2: "Front Center",
|
|
15082
|
+
3: "Low Frequency",
|
|
15083
|
+
4: "Back Left",
|
|
15084
|
+
5: "Back Right",
|
|
15085
|
+
6: "Front Left of Center",
|
|
15086
|
+
7: "Front Right of Center",
|
|
15087
|
+
8: "Back Center",
|
|
15088
|
+
9: "Side Left",
|
|
15089
|
+
10: "Side Right",
|
|
15090
|
+
11: "Top Center",
|
|
15091
|
+
12: "Top Front Left",
|
|
15092
|
+
13: "Top Front Center",
|
|
15093
|
+
14: "Top Front Right",
|
|
15094
|
+
15: "Top Back Left",
|
|
15095
|
+
16: "Top Back Center",
|
|
15096
|
+
17: "Top Back Right"
|
|
15097
|
+
};
|
|
15098
|
+
function getChannelsFromMask(channelMask) {
|
|
15099
|
+
const channels2 = [];
|
|
15100
|
+
for (let bit = 0;bit < 18; bit++) {
|
|
15101
|
+
if ((channelMask & 1 << bit) !== 0) {
|
|
15102
|
+
const channelName = CHANNELS[bit];
|
|
15103
|
+
if (channelName) {
|
|
15104
|
+
channels2.push(channelName);
|
|
15105
|
+
} else {
|
|
15106
|
+
channels2.push(`Unknown Channel (bit ${bit})`);
|
|
15107
|
+
}
|
|
15108
|
+
}
|
|
15109
|
+
}
|
|
15110
|
+
return channels2;
|
|
15111
|
+
}
|
|
15078
15112
|
var parseFmt = async ({
|
|
15079
15113
|
state
|
|
15080
15114
|
}) => {
|
|
@@ -15082,7 +15116,7 @@ var parseFmt = async ({
|
|
|
15082
15116
|
const ckSize = iterator.getUint32Le();
|
|
15083
15117
|
const box = iterator.startBox(ckSize);
|
|
15084
15118
|
const audioFormat = iterator.getUint16Le();
|
|
15085
|
-
if (audioFormat !== 1) {
|
|
15119
|
+
if (audioFormat !== 1 && audioFormat !== 65534) {
|
|
15086
15120
|
throw new Error(`Only supporting WAVE with PCM audio format, but got ${audioFormat}`);
|
|
15087
15121
|
}
|
|
15088
15122
|
const numberOfChannels = iterator.getUint16Le();
|
|
@@ -15103,6 +15137,25 @@ var parseFmt = async ({
|
|
|
15103
15137
|
type: "wav-fmt"
|
|
15104
15138
|
};
|
|
15105
15139
|
state.structure.getWavStructure().boxes.push(wavHeader);
|
|
15140
|
+
if (audioFormat === 65534) {
|
|
15141
|
+
const extraSize = iterator.getUint16Le();
|
|
15142
|
+
if (extraSize !== 22) {
|
|
15143
|
+
throw new Error(`Only supporting WAVE with 22 extra bytes, but got ${extraSize} bytes extra size`);
|
|
15144
|
+
}
|
|
15145
|
+
iterator.getUint16Le();
|
|
15146
|
+
const channelMask = iterator.getUint32Le();
|
|
15147
|
+
const subFormat = iterator.getSlice(16);
|
|
15148
|
+
if (subFormat.length !== 16) {
|
|
15149
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
|
|
15150
|
+
}
|
|
15151
|
+
for (let i = 0;i < 16; i++) {
|
|
15152
|
+
if (subFormat[i] !== [1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
|
|
15153
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
|
|
15154
|
+
}
|
|
15155
|
+
}
|
|
15156
|
+
const channels2 = getChannelsFromMask(channelMask);
|
|
15157
|
+
wavHeader.numberOfChannels = channels2.length;
|
|
15158
|
+
}
|
|
15106
15159
|
await registerAudioTrack({
|
|
15107
15160
|
track: {
|
|
15108
15161
|
type: "audio",
|
|
@@ -15158,6 +15211,17 @@ var parseId32 = ({
|
|
|
15158
15211
|
return Promise.resolve(null);
|
|
15159
15212
|
};
|
|
15160
15213
|
|
|
15214
|
+
// src/containers/wav/parse-junk.ts
|
|
15215
|
+
var parseJunk = ({
|
|
15216
|
+
state
|
|
15217
|
+
}) => {
|
|
15218
|
+
const { iterator } = state;
|
|
15219
|
+
const ckSize = iterator.getUint32Le();
|
|
15220
|
+
Log.trace(state.logLevel, `Skipping JUNK chunk of size ${ckSize}`);
|
|
15221
|
+
iterator.discard(ckSize);
|
|
15222
|
+
return Promise.resolve(null);
|
|
15223
|
+
};
|
|
15224
|
+
|
|
15161
15225
|
// src/containers/wav/parse-list.ts
|
|
15162
15226
|
var parseList = ({
|
|
15163
15227
|
state
|
|
@@ -15256,6 +15320,9 @@ var parseWav = (state) => {
|
|
|
15256
15320
|
if (type === "id3" || type === "ID3") {
|
|
15257
15321
|
return parseId32({ state });
|
|
15258
15322
|
}
|
|
15323
|
+
if (type === "JUNK" || type === "FLLR") {
|
|
15324
|
+
return parseJunk({ state });
|
|
15325
|
+
}
|
|
15259
15326
|
if (type === "\x00") {
|
|
15260
15327
|
return Promise.resolve(null);
|
|
15261
15328
|
}
|
|
@@ -17879,7 +17946,7 @@ var downloadAndParseMedia = async (options) => {
|
|
|
17879
17946
|
return returnValue;
|
|
17880
17947
|
};
|
|
17881
17948
|
// src/version.ts
|
|
17882
|
-
var VERSION = "4.0.
|
|
17949
|
+
var VERSION = "4.0.317";
|
|
17883
17950
|
|
|
17884
17951
|
// src/index.ts
|
|
17885
17952
|
var MediaParserInternals = {
|
|
@@ -6467,8 +6467,8 @@ var parseXing = (data) => {
|
|
|
6467
6467
|
vbrScale = extractI4(data, offset);
|
|
6468
6468
|
offset += 4;
|
|
6469
6469
|
}
|
|
6470
|
-
if (offset
|
|
6471
|
-
throw new Error("xing header was parsed wrong:
|
|
6470
|
+
if (offset > data.length) {
|
|
6471
|
+
throw new Error("xing header was parsed wrong: read beyond available data");
|
|
6472
6472
|
}
|
|
6473
6473
|
return {
|
|
6474
6474
|
sampleRate,
|
|
@@ -14810,6 +14810,40 @@ var parseData = ({
|
|
|
14810
14810
|
};
|
|
14811
14811
|
|
|
14812
14812
|
// src/containers/wav/parse-fmt.ts
|
|
14813
|
+
var CHANNELS = {
|
|
14814
|
+
0: "Front Left",
|
|
14815
|
+
1: "Front Right",
|
|
14816
|
+
2: "Front Center",
|
|
14817
|
+
3: "Low Frequency",
|
|
14818
|
+
4: "Back Left",
|
|
14819
|
+
5: "Back Right",
|
|
14820
|
+
6: "Front Left of Center",
|
|
14821
|
+
7: "Front Right of Center",
|
|
14822
|
+
8: "Back Center",
|
|
14823
|
+
9: "Side Left",
|
|
14824
|
+
10: "Side Right",
|
|
14825
|
+
11: "Top Center",
|
|
14826
|
+
12: "Top Front Left",
|
|
14827
|
+
13: "Top Front Center",
|
|
14828
|
+
14: "Top Front Right",
|
|
14829
|
+
15: "Top Back Left",
|
|
14830
|
+
16: "Top Back Center",
|
|
14831
|
+
17: "Top Back Right"
|
|
14832
|
+
};
|
|
14833
|
+
function getChannelsFromMask(channelMask) {
|
|
14834
|
+
const channels2 = [];
|
|
14835
|
+
for (let bit = 0;bit < 18; bit++) {
|
|
14836
|
+
if ((channelMask & 1 << bit) !== 0) {
|
|
14837
|
+
const channelName = CHANNELS[bit];
|
|
14838
|
+
if (channelName) {
|
|
14839
|
+
channels2.push(channelName);
|
|
14840
|
+
} else {
|
|
14841
|
+
channels2.push(`Unknown Channel (bit ${bit})`);
|
|
14842
|
+
}
|
|
14843
|
+
}
|
|
14844
|
+
}
|
|
14845
|
+
return channels2;
|
|
14846
|
+
}
|
|
14813
14847
|
var parseFmt = async ({
|
|
14814
14848
|
state
|
|
14815
14849
|
}) => {
|
|
@@ -14817,7 +14851,7 @@ var parseFmt = async ({
|
|
|
14817
14851
|
const ckSize = iterator.getUint32Le();
|
|
14818
14852
|
const box = iterator.startBox(ckSize);
|
|
14819
14853
|
const audioFormat = iterator.getUint16Le();
|
|
14820
|
-
if (audioFormat !== 1) {
|
|
14854
|
+
if (audioFormat !== 1 && audioFormat !== 65534) {
|
|
14821
14855
|
throw new Error(`Only supporting WAVE with PCM audio format, but got ${audioFormat}`);
|
|
14822
14856
|
}
|
|
14823
14857
|
const numberOfChannels = iterator.getUint16Le();
|
|
@@ -14838,6 +14872,25 @@ var parseFmt = async ({
|
|
|
14838
14872
|
type: "wav-fmt"
|
|
14839
14873
|
};
|
|
14840
14874
|
state.structure.getWavStructure().boxes.push(wavHeader);
|
|
14875
|
+
if (audioFormat === 65534) {
|
|
14876
|
+
const extraSize = iterator.getUint16Le();
|
|
14877
|
+
if (extraSize !== 22) {
|
|
14878
|
+
throw new Error(`Only supporting WAVE with 22 extra bytes, but got ${extraSize} bytes extra size`);
|
|
14879
|
+
}
|
|
14880
|
+
iterator.getUint16Le();
|
|
14881
|
+
const channelMask = iterator.getUint32Le();
|
|
14882
|
+
const subFormat = iterator.getSlice(16);
|
|
14883
|
+
if (subFormat.length !== 16) {
|
|
14884
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
|
|
14885
|
+
}
|
|
14886
|
+
for (let i = 0;i < 16; i++) {
|
|
14887
|
+
if (subFormat[i] !== [1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
|
|
14888
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
|
|
14889
|
+
}
|
|
14890
|
+
}
|
|
14891
|
+
const channels2 = getChannelsFromMask(channelMask);
|
|
14892
|
+
wavHeader.numberOfChannels = channels2.length;
|
|
14893
|
+
}
|
|
14841
14894
|
await registerAudioTrack({
|
|
14842
14895
|
track: {
|
|
14843
14896
|
type: "audio",
|
|
@@ -14893,6 +14946,17 @@ var parseId32 = ({
|
|
|
14893
14946
|
return Promise.resolve(null);
|
|
14894
14947
|
};
|
|
14895
14948
|
|
|
14949
|
+
// src/containers/wav/parse-junk.ts
|
|
14950
|
+
var parseJunk = ({
|
|
14951
|
+
state
|
|
14952
|
+
}) => {
|
|
14953
|
+
const { iterator } = state;
|
|
14954
|
+
const ckSize = iterator.getUint32Le();
|
|
14955
|
+
Log.trace(state.logLevel, `Skipping JUNK chunk of size ${ckSize}`);
|
|
14956
|
+
iterator.discard(ckSize);
|
|
14957
|
+
return Promise.resolve(null);
|
|
14958
|
+
};
|
|
14959
|
+
|
|
14896
14960
|
// src/containers/wav/parse-list.ts
|
|
14897
14961
|
var parseList = ({
|
|
14898
14962
|
state
|
|
@@ -14991,6 +15055,9 @@ var parseWav = (state) => {
|
|
|
14991
15055
|
if (type === "id3" || type === "ID3") {
|
|
14992
15056
|
return parseId32({ state });
|
|
14993
15057
|
}
|
|
15058
|
+
if (type === "JUNK" || type === "FLLR") {
|
|
15059
|
+
return parseJunk({ state });
|
|
15060
|
+
}
|
|
14994
15061
|
if (type === "\x00") {
|
|
14995
15062
|
return Promise.resolve(null);
|
|
14996
15063
|
}
|
|
@@ -6364,8 +6364,8 @@ var parseXing = (data) => {
|
|
|
6364
6364
|
vbrScale = extractI4(data, offset);
|
|
6365
6365
|
offset += 4;
|
|
6366
6366
|
}
|
|
6367
|
-
if (offset
|
|
6368
|
-
throw new Error("xing header was parsed wrong:
|
|
6367
|
+
if (offset > data.length) {
|
|
6368
|
+
throw new Error("xing header was parsed wrong: read beyond available data");
|
|
6369
6369
|
}
|
|
6370
6370
|
return {
|
|
6371
6371
|
sampleRate,
|
|
@@ -14679,6 +14679,40 @@ var parseData = ({
|
|
|
14679
14679
|
};
|
|
14680
14680
|
|
|
14681
14681
|
// src/containers/wav/parse-fmt.ts
|
|
14682
|
+
var CHANNELS = {
|
|
14683
|
+
0: "Front Left",
|
|
14684
|
+
1: "Front Right",
|
|
14685
|
+
2: "Front Center",
|
|
14686
|
+
3: "Low Frequency",
|
|
14687
|
+
4: "Back Left",
|
|
14688
|
+
5: "Back Right",
|
|
14689
|
+
6: "Front Left of Center",
|
|
14690
|
+
7: "Front Right of Center",
|
|
14691
|
+
8: "Back Center",
|
|
14692
|
+
9: "Side Left",
|
|
14693
|
+
10: "Side Right",
|
|
14694
|
+
11: "Top Center",
|
|
14695
|
+
12: "Top Front Left",
|
|
14696
|
+
13: "Top Front Center",
|
|
14697
|
+
14: "Top Front Right",
|
|
14698
|
+
15: "Top Back Left",
|
|
14699
|
+
16: "Top Back Center",
|
|
14700
|
+
17: "Top Back Right"
|
|
14701
|
+
};
|
|
14702
|
+
function getChannelsFromMask(channelMask) {
|
|
14703
|
+
const channels2 = [];
|
|
14704
|
+
for (let bit = 0;bit < 18; bit++) {
|
|
14705
|
+
if ((channelMask & 1 << bit) !== 0) {
|
|
14706
|
+
const channelName = CHANNELS[bit];
|
|
14707
|
+
if (channelName) {
|
|
14708
|
+
channels2.push(channelName);
|
|
14709
|
+
} else {
|
|
14710
|
+
channels2.push(`Unknown Channel (bit ${bit})`);
|
|
14711
|
+
}
|
|
14712
|
+
}
|
|
14713
|
+
}
|
|
14714
|
+
return channels2;
|
|
14715
|
+
}
|
|
14682
14716
|
var parseFmt = async ({
|
|
14683
14717
|
state
|
|
14684
14718
|
}) => {
|
|
@@ -14686,7 +14720,7 @@ var parseFmt = async ({
|
|
|
14686
14720
|
const ckSize = iterator.getUint32Le();
|
|
14687
14721
|
const box = iterator.startBox(ckSize);
|
|
14688
14722
|
const audioFormat = iterator.getUint16Le();
|
|
14689
|
-
if (audioFormat !== 1) {
|
|
14723
|
+
if (audioFormat !== 1 && audioFormat !== 65534) {
|
|
14690
14724
|
throw new Error(`Only supporting WAVE with PCM audio format, but got ${audioFormat}`);
|
|
14691
14725
|
}
|
|
14692
14726
|
const numberOfChannels = iterator.getUint16Le();
|
|
@@ -14707,6 +14741,25 @@ var parseFmt = async ({
|
|
|
14707
14741
|
type: "wav-fmt"
|
|
14708
14742
|
};
|
|
14709
14743
|
state.structure.getWavStructure().boxes.push(wavHeader);
|
|
14744
|
+
if (audioFormat === 65534) {
|
|
14745
|
+
const extraSize = iterator.getUint16Le();
|
|
14746
|
+
if (extraSize !== 22) {
|
|
14747
|
+
throw new Error(`Only supporting WAVE with 22 extra bytes, but got ${extraSize} bytes extra size`);
|
|
14748
|
+
}
|
|
14749
|
+
iterator.getUint16Le();
|
|
14750
|
+
const channelMask = iterator.getUint32Le();
|
|
14751
|
+
const subFormat = iterator.getSlice(16);
|
|
14752
|
+
if (subFormat.length !== 16) {
|
|
14753
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
|
|
14754
|
+
}
|
|
14755
|
+
for (let i = 0;i < 16; i++) {
|
|
14756
|
+
if (subFormat[i] !== [1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
|
|
14757
|
+
throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
|
|
14758
|
+
}
|
|
14759
|
+
}
|
|
14760
|
+
const channels2 = getChannelsFromMask(channelMask);
|
|
14761
|
+
wavHeader.numberOfChannels = channels2.length;
|
|
14762
|
+
}
|
|
14710
14763
|
await registerAudioTrack({
|
|
14711
14764
|
track: {
|
|
14712
14765
|
type: "audio",
|
|
@@ -14762,6 +14815,17 @@ var parseId32 = ({
|
|
|
14762
14815
|
return Promise.resolve(null);
|
|
14763
14816
|
};
|
|
14764
14817
|
|
|
14818
|
+
// src/containers/wav/parse-junk.ts
|
|
14819
|
+
var parseJunk = ({
|
|
14820
|
+
state
|
|
14821
|
+
}) => {
|
|
14822
|
+
const { iterator } = state;
|
|
14823
|
+
const ckSize = iterator.getUint32Le();
|
|
14824
|
+
Log.trace(state.logLevel, `Skipping JUNK chunk of size ${ckSize}`);
|
|
14825
|
+
iterator.discard(ckSize);
|
|
14826
|
+
return Promise.resolve(null);
|
|
14827
|
+
};
|
|
14828
|
+
|
|
14765
14829
|
// src/containers/wav/parse-list.ts
|
|
14766
14830
|
var parseList = ({
|
|
14767
14831
|
state
|
|
@@ -14860,6 +14924,9 @@ var parseWav = (state) => {
|
|
|
14860
14924
|
if (type === "id3" || type === "ID3") {
|
|
14861
14925
|
return parseId32({ state });
|
|
14862
14926
|
}
|
|
14927
|
+
if (type === "JUNK" || type === "FLLR") {
|
|
14928
|
+
return parseJunk({ state });
|
|
14929
|
+
}
|
|
14863
14930
|
if (type === "\x00") {
|
|
14864
14931
|
return Promise.resolve(null);
|
|
14865
14932
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.317";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/media-parser",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.317",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/wicg-file-system-access": "2023.10.5",
|
|
11
11
|
"eslint": "9.19.0",
|
|
12
12
|
"@types/bun": "1.2.8",
|
|
13
|
-
"@remotion/example-videos": "4.0.
|
|
14
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
13
|
+
"@remotion/example-videos": "4.0.317",
|
|
14
|
+
"@remotion/eslint-config-internal": "4.0.317"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { BufferIterator } from '../../iterator/buffer-iterator';
|
|
2
|
-
import type { BaseBox } from './base-type';
|
|
3
|
-
export type ThreeDMatrix = [
|
|
4
|
-
number,
|
|
5
|
-
number,
|
|
6
|
-
number,
|
|
7
|
-
number,
|
|
8
|
-
number,
|
|
9
|
-
number,
|
|
10
|
-
number,
|
|
11
|
-
number,
|
|
12
|
-
number
|
|
13
|
-
];
|
|
14
|
-
export interface MvhdBox extends BaseBox {
|
|
15
|
-
durationInUnits: number;
|
|
16
|
-
durationInSeconds: number;
|
|
17
|
-
creationTime: number | null;
|
|
18
|
-
modificationTime: number | null;
|
|
19
|
-
timeScale: number;
|
|
20
|
-
rate: number;
|
|
21
|
-
volume: number;
|
|
22
|
-
matrix: ThreeDMatrix;
|
|
23
|
-
nextTrackId: number;
|
|
24
|
-
type: 'mvhd-box';
|
|
25
|
-
}
|
|
26
|
-
export declare const parseMvhd: ({ iterator, offset, size, }: {
|
|
27
|
-
iterator: BufferIterator;
|
|
28
|
-
offset: number;
|
|
29
|
-
size: number;
|
|
30
|
-
}) => MvhdBox;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseMvhd = void 0;
|
|
4
|
-
const buffer_iterator_1 = require("../../iterator/buffer-iterator");
|
|
5
|
-
const to_date_1 = require("./to-date");
|
|
6
|
-
const parseMvhd = ({ iterator, offset, size, }) => {
|
|
7
|
-
const version = iterator.getUint8();
|
|
8
|
-
// Flags, we discard them
|
|
9
|
-
iterator.discard(3);
|
|
10
|
-
const creationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
11
|
-
const modificationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
12
|
-
const timeScale = iterator.getUint32();
|
|
13
|
-
const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
14
|
-
const durationInSeconds = Number(durationInUnits) / timeScale;
|
|
15
|
-
const rateArray = iterator.getSlice(4);
|
|
16
|
-
const rateView = (0, buffer_iterator_1.getArrayBufferIterator)(rateArray, rateArray.length);
|
|
17
|
-
const rate = rateView.getInt8() * 10 +
|
|
18
|
-
rateView.getInt8() +
|
|
19
|
-
rateView.getInt8() * 0.1 +
|
|
20
|
-
rateView.getInt8() * 0.01;
|
|
21
|
-
const volumeArray = iterator.getSlice(2);
|
|
22
|
-
const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)(volumeArray, volumeArray.length);
|
|
23
|
-
const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
|
|
24
|
-
// reserved 16bit
|
|
25
|
-
iterator.discard(2);
|
|
26
|
-
// reserved 32bit x2
|
|
27
|
-
iterator.discard(4);
|
|
28
|
-
iterator.discard(4);
|
|
29
|
-
// matrix
|
|
30
|
-
const matrix = [
|
|
31
|
-
iterator.getFixedPointSigned1616Number(),
|
|
32
|
-
iterator.getFixedPointSigned1616Number(),
|
|
33
|
-
iterator.getFixedPointSigned230Number(),
|
|
34
|
-
iterator.getFixedPointSigned1616Number(),
|
|
35
|
-
iterator.getFixedPointSigned1616Number(),
|
|
36
|
-
iterator.getFixedPointSigned230Number(),
|
|
37
|
-
iterator.getFixedPointSigned1616Number(),
|
|
38
|
-
iterator.getFixedPointSigned1616Number(),
|
|
39
|
-
iterator.getFixedPointSigned230Number(),
|
|
40
|
-
];
|
|
41
|
-
// pre-defined
|
|
42
|
-
iterator.discard(4 * 6);
|
|
43
|
-
// next track id
|
|
44
|
-
const nextTrackId = iterator.getUint32();
|
|
45
|
-
volumeView.destroy();
|
|
46
|
-
const bytesRemaining = size - (iterator.counter.getOffset() - offset);
|
|
47
|
-
if (bytesRemaining !== 0) {
|
|
48
|
-
throw new Error('expected 0 bytes ' + bytesRemaining);
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
creationTime: (0, to_date_1.toUnixTimestamp)(Number(creationTime)),
|
|
52
|
-
modificationTime: (0, to_date_1.toUnixTimestamp)(Number(modificationTime)),
|
|
53
|
-
timeScale,
|
|
54
|
-
durationInUnits: Number(durationInUnits),
|
|
55
|
-
durationInSeconds,
|
|
56
|
-
rate,
|
|
57
|
-
volume,
|
|
58
|
-
matrix: matrix,
|
|
59
|
-
nextTrackId,
|
|
60
|
-
type: 'mvhd-box',
|
|
61
|
-
boxSize: size,
|
|
62
|
-
offset,
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
exports.parseMvhd = parseMvhd;
|
package/dist/index.cjs
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WEBCODECS_TIMESCALE = exports.VERSION = exports.mediaParserController = exports.defaultSelectM3uStreamFn = exports.defaultSelectM3uAssociatedPlaylists = exports.MediaParserInternals = exports.downloadAndParseMedia = exports.MediaParserAbortError = exports.IsAPdfError = exports.IsAnUnsupportedFileTypeError = exports.IsAnImageError = exports.hasBeenAborted = exports.parseMedia = void 0;
|
|
4
|
-
const aac_codecprivate_1 = require("./aac-codecprivate");
|
|
5
|
-
const ftyp_1 = require("./containers/iso-base-media/ftyp");
|
|
6
|
-
const mvhd_1 = require("./containers/iso-base-media/mvhd");
|
|
7
|
-
const samples_1 = require("./containers/iso-base-media/stsd/samples");
|
|
8
|
-
const stsd_1 = require("./containers/iso-base-media/stsd/stsd");
|
|
9
|
-
const tkhd_1 = require("./containers/iso-base-media/tkhd");
|
|
10
|
-
const parse_ebml_1 = require("./containers/webm/parse-ebml");
|
|
11
|
-
const all_segments_1 = require("./containers/webm/segments/all-segments");
|
|
12
|
-
const internal_parse_media_1 = require("./internal-parse-media");
|
|
13
|
-
const buffer_iterator_1 = require("./iterator/buffer-iterator");
|
|
14
|
-
const log_1 = require("./log");
|
|
15
|
-
const need_samples_for_fields_1 = require("./state/need-samples-for-fields");
|
|
16
|
-
const parser_state_1 = require("./state/parser-state");
|
|
17
|
-
var parse_media_1 = require("./parse-media");
|
|
18
|
-
Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
|
|
19
|
-
var errors_1 = require("./errors");
|
|
20
|
-
Object.defineProperty(exports, "hasBeenAborted", { enumerable: true, get: function () { return errors_1.hasBeenAborted; } });
|
|
21
|
-
Object.defineProperty(exports, "IsAnImageError", { enumerable: true, get: function () { return errors_1.IsAnImageError; } });
|
|
22
|
-
Object.defineProperty(exports, "IsAnUnsupportedFileTypeError", { enumerable: true, get: function () { return errors_1.IsAnUnsupportedFileTypeError; } });
|
|
23
|
-
Object.defineProperty(exports, "IsAPdfError", { enumerable: true, get: function () { return errors_1.IsAPdfError; } });
|
|
24
|
-
Object.defineProperty(exports, "MediaParserAbortError", { enumerable: true, get: function () { return errors_1.MediaParserAbortError; } });
|
|
25
|
-
var download_and_parse_media_1 = require("./download-and-parse-media");
|
|
26
|
-
Object.defineProperty(exports, "downloadAndParseMedia", { enumerable: true, get: function () { return download_and_parse_media_1.downloadAndParseMedia; } });
|
|
27
|
-
/**
|
|
28
|
-
* @deprecated Dont use these yet.
|
|
29
|
-
*/
|
|
30
|
-
exports.MediaParserInternals = {
|
|
31
|
-
Log: log_1.Log,
|
|
32
|
-
createAacCodecPrivate: aac_codecprivate_1.createAacCodecPrivate,
|
|
33
|
-
matroskaElements: all_segments_1.matroskaElements,
|
|
34
|
-
ebmlMap: all_segments_1.ebmlMap,
|
|
35
|
-
parseTkhd: tkhd_1.parseTkhd,
|
|
36
|
-
getArrayBufferIterator: buffer_iterator_1.getArrayBufferIterator,
|
|
37
|
-
parseStsd: stsd_1.parseStsd,
|
|
38
|
-
makeParserState: parser_state_1.makeParserState,
|
|
39
|
-
processSample: samples_1.processIsoFormatBox,
|
|
40
|
-
parseFtyp: ftyp_1.parseFtyp,
|
|
41
|
-
parseEbml: parse_ebml_1.parseEbml,
|
|
42
|
-
parseMvhd: mvhd_1.parseMvhd,
|
|
43
|
-
internalParseMedia: internal_parse_media_1.internalParseMedia,
|
|
44
|
-
fieldsNeedSamplesMap: need_samples_for_fields_1.fieldsNeedSamplesMap,
|
|
45
|
-
};
|
|
46
|
-
var select_stream_1 = require("./containers/m3u/select-stream");
|
|
47
|
-
Object.defineProperty(exports, "defaultSelectM3uAssociatedPlaylists", { enumerable: true, get: function () { return select_stream_1.defaultSelectM3uAssociatedPlaylists; } });
|
|
48
|
-
Object.defineProperty(exports, "defaultSelectM3uStreamFn", { enumerable: true, get: function () { return select_stream_1.defaultSelectM3uStreamFn; } });
|
|
49
|
-
var media_parser_controller_1 = require("./controller/media-parser-controller");
|
|
50
|
-
Object.defineProperty(exports, "mediaParserController", { enumerable: true, get: function () { return media_parser_controller_1.mediaParserController; } });
|
|
51
|
-
var version_1 = require("./version");
|
|
52
|
-
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
|
|
53
|
-
var webcodecs_timescale_1 = require("./webcodecs-timescale");
|
|
54
|
-
Object.defineProperty(exports, "WEBCODECS_TIMESCALE", { enumerable: true, get: function () { return webcodecs_timescale_1.WEBCODECS_TIMESCALE; } });
|