@remotion/media-parser 4.0.240 → 4.0.241
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/avc/codec-private.d.ts +1 -1
- package/dist/boxes/transport-stream/adts-header.d.ts +1 -1
- package/dist/boxes/transport-stream/discard-rest-of-packet.d.ts +1 -1
- package/dist/boxes/webm/ebml.d.ts +1 -1
- package/dist/boxes/webm/make-header.d.ts +3 -3
- package/dist/buffer-iterator.d.ts +2 -6
- package/dist/buffer-iterator.js +4 -29
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +1 -1
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +1 -1
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +1 -1
- package/dist/create/iso-base-media/create-colr.d.ts +1 -1
- package/dist/create/iso-base-media/create-ftyp.d.ts +2 -2
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -1
- package/dist/create/iso-base-media/create-mdia.d.ts +1 -1
- package/dist/create/iso-base-media/create-moov.d.ts +1 -1
- package/dist/create/iso-base-media/create-mvhd.d.ts +1 -1
- package/dist/create/iso-base-media/create-trak.d.ts +1 -1
- package/dist/create/iso-base-media/create-udta.d.ts +1 -1
- package/dist/create/iso-base-media/create-url.d.ts +1 -1
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -1
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -1
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +1 -1
- package/dist/create/iso-base-media/mp4-header.d.ts +1 -1
- package/dist/create/iso-base-media/primitives.d.ts +13 -13
- package/dist/create/iso-base-media/serialize-track.d.ts +1 -1
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -1
- package/dist/create/iso-base-media/udta/create-meta.d.ts +1 -1
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -1
- package/dist/create/matroska/cluster-segment.d.ts +1 -1
- package/dist/emit-available-info.d.ts +6 -3
- package/dist/emit-available-info.js +107 -69
- package/dist/errors/detect-file-type.d.ts +1 -0
- package/dist/errors/detect-file-type.js +88 -0
- package/dist/errors/file-types.d.ts +1 -0
- package/dist/errors/file-types.js +88 -0
- package/dist/errors.d.ts +68 -0
- package/dist/errors.js +71 -0
- package/dist/esm/from-fetch.mjs +1 -0
- package/dist/esm/from-node.mjs +1 -0
- package/dist/esm/from-web-file.mjs +2 -1
- package/dist/esm/index.mjs +633 -109
- package/dist/file-types/bmp.d.ts +6 -0
- package/dist/file-types/bmp.js +23 -0
- package/dist/file-types/detect-file-type.d.ts +42 -0
- package/dist/file-types/detect-file-type.js +59 -0
- package/dist/file-types/get-jpeg-dimensions.d.ts +4 -0
- package/dist/file-types/get-jpeg-dimensions.js +32 -0
- package/dist/file-types/index.d.ts +2 -0
- package/dist/file-types/index.js +57 -0
- package/dist/file-types/jpeg.d.ts +12 -0
- package/dist/file-types/jpeg.js +44 -0
- package/dist/file-types/pdf.d.ts +4 -0
- package/dist/file-types/pdf.js +12 -0
- package/dist/file-types/png.d.ts +10 -0
- package/dist/file-types/png.js +32 -0
- package/dist/file-types/webp.d.ts +6 -0
- package/dist/file-types/webp.js +69 -0
- package/dist/file-types.d.ts +1 -0
- package/dist/file-types.js +88 -0
- package/dist/get-audio-codec.d.ts +1 -1
- package/dist/get-fields-from-callbacks.d.ts +5 -0
- package/dist/get-fields-from-callbacks.js +27 -0
- package/dist/has-all-info.d.ts +5 -1
- package/dist/has-all-info.js +10 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -1
- package/dist/options.d.ts +36 -53
- package/dist/parse-media.js +53 -14
- package/dist/parse-video.d.ts +4 -1
- package/dist/parse-video.js +71 -8
- package/dist/probing/detect-file-type.d.ts +1 -0
- package/dist/probing/detect-file-type.js +88 -0
- package/dist/probing/get-jpeg-dimensions.d.ts +4 -0
- package/dist/probing/get-jpeg-dimensions.js +32 -0
- package/dist/readers/from-fetch.js +1 -0
- package/dist/readers/from-node.js +1 -0
- package/dist/readers/from-web-file.js +1 -0
- package/dist/readers/reader.d.ts +1 -0
- package/dist/state/can-skip-tracks.js +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
package/dist/esm/index.mjs
CHANGED
|
@@ -83,6 +83,7 @@ var fetchReader = {
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
contentLength,
|
|
86
|
+
contentType: res.headers.get("content-type"),
|
|
86
87
|
name: name ?? fallbackName,
|
|
87
88
|
supportsContentRange
|
|
88
89
|
};
|
|
@@ -1366,7 +1367,7 @@ var createIsoBaseMediaFtyp = ({
|
|
|
1366
1367
|
};
|
|
1367
1368
|
|
|
1368
1369
|
// src/version.ts
|
|
1369
|
-
var VERSION = "4.0.
|
|
1370
|
+
var VERSION = "4.0.241";
|
|
1370
1371
|
|
|
1371
1372
|
// src/create/iso-base-media/create-ilst.ts
|
|
1372
1373
|
var createIlst = (items) => {
|
|
@@ -3529,6 +3530,120 @@ var createWav = async ({
|
|
|
3529
3530
|
};
|
|
3530
3531
|
};
|
|
3531
3532
|
|
|
3533
|
+
// src/errors.ts
|
|
3534
|
+
class IsAGifError extends Error {
|
|
3535
|
+
mimeType;
|
|
3536
|
+
sizeInBytes;
|
|
3537
|
+
fileName;
|
|
3538
|
+
constructor({
|
|
3539
|
+
message,
|
|
3540
|
+
mimeType,
|
|
3541
|
+
sizeInBytes,
|
|
3542
|
+
fileName
|
|
3543
|
+
}) {
|
|
3544
|
+
super(message);
|
|
3545
|
+
this.fileName = "IsAGifError";
|
|
3546
|
+
this.mimeType = mimeType;
|
|
3547
|
+
this.sizeInBytes = sizeInBytes;
|
|
3548
|
+
this.fileName = fileName;
|
|
3549
|
+
if (Error.captureStackTrace) {
|
|
3550
|
+
Error.captureStackTrace(this, IsAGifError);
|
|
3551
|
+
}
|
|
3552
|
+
}
|
|
3553
|
+
}
|
|
3554
|
+
|
|
3555
|
+
class IsAnImageError extends Error {
|
|
3556
|
+
imageType;
|
|
3557
|
+
dimensions;
|
|
3558
|
+
mimeType;
|
|
3559
|
+
sizeInBytes;
|
|
3560
|
+
fileName;
|
|
3561
|
+
constructor({
|
|
3562
|
+
dimensions,
|
|
3563
|
+
imageType,
|
|
3564
|
+
message,
|
|
3565
|
+
mimeType,
|
|
3566
|
+
sizeInBytes,
|
|
3567
|
+
fileName
|
|
3568
|
+
}) {
|
|
3569
|
+
super(message);
|
|
3570
|
+
this.name = "IsAnImageError";
|
|
3571
|
+
this.imageType = imageType;
|
|
3572
|
+
this.dimensions = dimensions;
|
|
3573
|
+
this.mimeType = mimeType;
|
|
3574
|
+
this.sizeInBytes = sizeInBytes;
|
|
3575
|
+
this.fileName = fileName;
|
|
3576
|
+
if (Error.captureStackTrace) {
|
|
3577
|
+
Error.captureStackTrace(this, IsAnImageError);
|
|
3578
|
+
}
|
|
3579
|
+
}
|
|
3580
|
+
}
|
|
3581
|
+
|
|
3582
|
+
class IsAPdfError extends Error {
|
|
3583
|
+
mimeType;
|
|
3584
|
+
sizeInBytes;
|
|
3585
|
+
fileName;
|
|
3586
|
+
constructor({
|
|
3587
|
+
message,
|
|
3588
|
+
mimeType,
|
|
3589
|
+
sizeInBytes,
|
|
3590
|
+
fileName
|
|
3591
|
+
}) {
|
|
3592
|
+
super(message);
|
|
3593
|
+
this.name = "IsAPdfError";
|
|
3594
|
+
this.mimeType = mimeType;
|
|
3595
|
+
this.sizeInBytes = sizeInBytes;
|
|
3596
|
+
this.fileName = fileName;
|
|
3597
|
+
if (Error.captureStackTrace) {
|
|
3598
|
+
Error.captureStackTrace(this, IsAPdfError);
|
|
3599
|
+
}
|
|
3600
|
+
}
|
|
3601
|
+
}
|
|
3602
|
+
|
|
3603
|
+
class IsAnUnsupportedFileTypeError extends Error {
|
|
3604
|
+
mimeType;
|
|
3605
|
+
sizeInBytes;
|
|
3606
|
+
fileName;
|
|
3607
|
+
constructor({
|
|
3608
|
+
message,
|
|
3609
|
+
mimeType,
|
|
3610
|
+
sizeInBytes,
|
|
3611
|
+
fileName
|
|
3612
|
+
}) {
|
|
3613
|
+
super(message);
|
|
3614
|
+
this.name = "IsAnUnsupportedFileTypeError";
|
|
3615
|
+
this.mimeType = mimeType;
|
|
3616
|
+
this.sizeInBytes = sizeInBytes;
|
|
3617
|
+
this.fileName = fileName;
|
|
3618
|
+
if (Error.captureStackTrace) {
|
|
3619
|
+
Error.captureStackTrace(this, IsAnUnsupportedFileTypeError);
|
|
3620
|
+
}
|
|
3621
|
+
}
|
|
3622
|
+
}
|
|
3623
|
+
|
|
3624
|
+
class IsAnUnsupportedAudioTypeError extends Error {
|
|
3625
|
+
mimeType;
|
|
3626
|
+
sizeInBytes;
|
|
3627
|
+
fileName;
|
|
3628
|
+
audioType;
|
|
3629
|
+
constructor({
|
|
3630
|
+
message,
|
|
3631
|
+
mimeType,
|
|
3632
|
+
sizeInBytes,
|
|
3633
|
+
fileName,
|
|
3634
|
+
audioType
|
|
3635
|
+
}) {
|
|
3636
|
+
super(message);
|
|
3637
|
+
this.name = "IsAnUnsupportedAudioTypeError";
|
|
3638
|
+
this.mimeType = mimeType;
|
|
3639
|
+
this.sizeInBytes = sizeInBytes;
|
|
3640
|
+
this.fileName = fileName;
|
|
3641
|
+
this.audioType = audioType;
|
|
3642
|
+
if (Error.captureStackTrace) {
|
|
3643
|
+
Error.captureStackTrace(this, IsAnUnsupportedAudioTypeError);
|
|
3644
|
+
}
|
|
3645
|
+
}
|
|
3646
|
+
}
|
|
3532
3647
|
// src/boxes/iso-base-media/traversal.ts
|
|
3533
3648
|
var getMoovBox = (segments) => {
|
|
3534
3649
|
const moovBox = segments.find((s) => s.type === "moov-box");
|
|
@@ -4358,6 +4473,234 @@ var getPrimariesFromIndex = (index) => {
|
|
|
4358
4473
|
return index === 1 ? "bt709" : index === 5 ? "bt470bg" : index === 6 ? "smpte170m" : index === 9 ? "bt2020" : null;
|
|
4359
4474
|
};
|
|
4360
4475
|
|
|
4476
|
+
// src/file-types/detect-file-type.ts
|
|
4477
|
+
var matchesPattern = (pattern) => {
|
|
4478
|
+
return (data) => {
|
|
4479
|
+
return pattern.every((value, index) => data[index] === value);
|
|
4480
|
+
};
|
|
4481
|
+
};
|
|
4482
|
+
var isRiffAvi2 = (data) => {
|
|
4483
|
+
const riffPattern = new Uint8Array([82, 73, 70, 70]);
|
|
4484
|
+
if (!matchesPattern(riffPattern)(data.subarray(0, 4))) {
|
|
4485
|
+
return false;
|
|
4486
|
+
}
|
|
4487
|
+
const fileType = data.subarray(8, 12);
|
|
4488
|
+
return new TextDecoder().decode(fileType) === "AVI ";
|
|
4489
|
+
};
|
|
4490
|
+
var isRiffWave = (data) => {
|
|
4491
|
+
const riffPattern = new Uint8Array([82, 73, 70, 70]);
|
|
4492
|
+
if (!matchesPattern(riffPattern)(data.subarray(0, 4))) {
|
|
4493
|
+
return false;
|
|
4494
|
+
}
|
|
4495
|
+
const fileType = data.subarray(8, 12);
|
|
4496
|
+
return new TextDecoder().decode(fileType) === "WAVE";
|
|
4497
|
+
};
|
|
4498
|
+
var isWebm = (data) => {
|
|
4499
|
+
return matchesPattern(webmPattern)(data.subarray(0, 4));
|
|
4500
|
+
};
|
|
4501
|
+
var isIsoBaseMedia = (data) => {
|
|
4502
|
+
const isoBaseMediaMp4Pattern = new TextEncoder().encode("ftyp");
|
|
4503
|
+
return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
|
|
4504
|
+
};
|
|
4505
|
+
var isTransportStream = (data) => {
|
|
4506
|
+
return data[0] === 71 && data[188] === 71;
|
|
4507
|
+
};
|
|
4508
|
+
var isMp3 = (data) => {
|
|
4509
|
+
const mpegPattern = new Uint8Array([255, 243, 228, 100]);
|
|
4510
|
+
const id3Pattern = new Uint8Array([73, 68, 51, 3]);
|
|
4511
|
+
const subarray = data.subarray(0, 4);
|
|
4512
|
+
return matchesPattern(mpegPattern)(subarray) || matchesPattern(id3Pattern)(subarray);
|
|
4513
|
+
};
|
|
4514
|
+
var isGif = (data) => {
|
|
4515
|
+
const gifPattern = new Uint8Array([71, 73, 70, 56]);
|
|
4516
|
+
return matchesPattern(gifPattern)(data.subarray(0, 4));
|
|
4517
|
+
};
|
|
4518
|
+
var isAac = (data) => {
|
|
4519
|
+
const aacPattern = new Uint8Array([255, 241]);
|
|
4520
|
+
return matchesPattern(aacPattern)(data.subarray(0, 2));
|
|
4521
|
+
};
|
|
4522
|
+
|
|
4523
|
+
// src/file-types/bmp.ts
|
|
4524
|
+
function getBmpDimensions(bmpData) {
|
|
4525
|
+
if (bmpData.length < 26) {
|
|
4526
|
+
return null;
|
|
4527
|
+
}
|
|
4528
|
+
const view = new DataView(bmpData.buffer, bmpData.byteOffset);
|
|
4529
|
+
return {
|
|
4530
|
+
width: view.getUint32(18, true),
|
|
4531
|
+
height: Math.abs(view.getInt32(22, true))
|
|
4532
|
+
};
|
|
4533
|
+
}
|
|
4534
|
+
var isBmp = (data) => {
|
|
4535
|
+
const bmpPattern = new Uint8Array([66, 77]);
|
|
4536
|
+
if (matchesPattern(bmpPattern)(data.subarray(0, 2))) {
|
|
4537
|
+
const bmp = getBmpDimensions(data);
|
|
4538
|
+
return { dimensions: bmp, type: "bmp" };
|
|
4539
|
+
}
|
|
4540
|
+
return null;
|
|
4541
|
+
};
|
|
4542
|
+
|
|
4543
|
+
// src/file-types/jpeg.ts
|
|
4544
|
+
function getJpegDimensions(data) {
|
|
4545
|
+
let offset = 0;
|
|
4546
|
+
function readUint16BE(o) {
|
|
4547
|
+
return data[o] << 8 | data[o + 1];
|
|
4548
|
+
}
|
|
4549
|
+
if (readUint16BE(offset) !== 65496) {
|
|
4550
|
+
return null;
|
|
4551
|
+
}
|
|
4552
|
+
offset += 2;
|
|
4553
|
+
while (offset < data.length) {
|
|
4554
|
+
if (data[offset] === 255) {
|
|
4555
|
+
const marker = data[offset + 1];
|
|
4556
|
+
if (marker === 192 || marker === 194) {
|
|
4557
|
+
const height = readUint16BE(offset + 5);
|
|
4558
|
+
const width = readUint16BE(offset + 7);
|
|
4559
|
+
return { width, height };
|
|
4560
|
+
}
|
|
4561
|
+
const length = readUint16BE(offset + 2);
|
|
4562
|
+
offset += length + 2;
|
|
4563
|
+
} else {
|
|
4564
|
+
offset++;
|
|
4565
|
+
}
|
|
4566
|
+
}
|
|
4567
|
+
return null;
|
|
4568
|
+
}
|
|
4569
|
+
var isJpeg = (data) => {
|
|
4570
|
+
const jpegPattern = new Uint8Array([255, 216]);
|
|
4571
|
+
const jpeg = matchesPattern(jpegPattern)(data.subarray(0, 2));
|
|
4572
|
+
if (!jpeg) {
|
|
4573
|
+
return null;
|
|
4574
|
+
}
|
|
4575
|
+
const dim = getJpegDimensions(data);
|
|
4576
|
+
return { dimensions: dim, type: "jpeg" };
|
|
4577
|
+
};
|
|
4578
|
+
|
|
4579
|
+
// src/file-types/pdf.ts
|
|
4580
|
+
var isPdf = (data) => {
|
|
4581
|
+
if (data.length < 4) {
|
|
4582
|
+
return null;
|
|
4583
|
+
}
|
|
4584
|
+
const pdfPattern = new Uint8Array([37, 80, 68, 70]);
|
|
4585
|
+
return matchesPattern(pdfPattern)(data.subarray(0, 4)) ? { type: "pdf" } : null;
|
|
4586
|
+
};
|
|
4587
|
+
|
|
4588
|
+
// src/file-types/png.ts
|
|
4589
|
+
function getPngDimensions(pngData) {
|
|
4590
|
+
if (pngData.length < 24) {
|
|
4591
|
+
return null;
|
|
4592
|
+
}
|
|
4593
|
+
const view = new DataView(pngData.buffer, pngData.byteOffset);
|
|
4594
|
+
const pngSignature = [137, 80, 78, 71, 13, 10, 26, 10];
|
|
4595
|
+
for (let i = 0;i < 8; i++) {
|
|
4596
|
+
if (pngData[i] !== pngSignature[i]) {
|
|
4597
|
+
return null;
|
|
4598
|
+
}
|
|
4599
|
+
}
|
|
4600
|
+
return {
|
|
4601
|
+
width: view.getUint32(16, false),
|
|
4602
|
+
height: view.getUint32(20, false)
|
|
4603
|
+
};
|
|
4604
|
+
}
|
|
4605
|
+
var isPng = (data) => {
|
|
4606
|
+
const pngPattern = new Uint8Array([137, 80, 78, 71]);
|
|
4607
|
+
if (matchesPattern(pngPattern)(data.subarray(0, 4))) {
|
|
4608
|
+
const png = getPngDimensions(data);
|
|
4609
|
+
return { dimensions: png, type: "png" };
|
|
4610
|
+
}
|
|
4611
|
+
return null;
|
|
4612
|
+
};
|
|
4613
|
+
|
|
4614
|
+
// src/file-types/webp.ts
|
|
4615
|
+
function getWebPDimensions(bytes) {
|
|
4616
|
+
if (bytes.length < 30) {
|
|
4617
|
+
return null;
|
|
4618
|
+
}
|
|
4619
|
+
if (bytes[0] !== 82 || bytes[1] !== 73 || bytes[2] !== 70 || bytes[3] !== 70 || bytes[8] !== 87 || bytes[9] !== 69 || bytes[10] !== 66 || bytes[11] !== 80) {
|
|
4620
|
+
return null;
|
|
4621
|
+
}
|
|
4622
|
+
if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56) {
|
|
4623
|
+
if (bytes[15] === 32) {
|
|
4624
|
+
return {
|
|
4625
|
+
width: bytes[26] | bytes[27] << 8 & 16383,
|
|
4626
|
+
height: bytes[28] | bytes[29] << 8 & 16383
|
|
4627
|
+
};
|
|
4628
|
+
}
|
|
4629
|
+
}
|
|
4630
|
+
if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 76) {
|
|
4631
|
+
return {
|
|
4632
|
+
width: 1 + (bytes[21] | (bytes[22] & 63) << 8),
|
|
4633
|
+
height: 1 + ((bytes[22] & 192) >> 6 | bytes[23] << 2 | (bytes[24] & 15) << 10)
|
|
4634
|
+
};
|
|
4635
|
+
}
|
|
4636
|
+
if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 88) {
|
|
4637
|
+
return {
|
|
4638
|
+
width: 1 + (bytes[24] | bytes[25] << 8 | bytes[26] << 16),
|
|
4639
|
+
height: 1 + (bytes[27] | bytes[28] << 8 | bytes[29] << 16)
|
|
4640
|
+
};
|
|
4641
|
+
}
|
|
4642
|
+
return null;
|
|
4643
|
+
}
|
|
4644
|
+
var isWebp = (data) => {
|
|
4645
|
+
const webpPattern = new Uint8Array([82, 73, 70, 70]);
|
|
4646
|
+
if (matchesPattern(webpPattern)(data.subarray(0, 4))) {
|
|
4647
|
+
return {
|
|
4648
|
+
type: "webp",
|
|
4649
|
+
dimensions: getWebPDimensions(data)
|
|
4650
|
+
};
|
|
4651
|
+
}
|
|
4652
|
+
return null;
|
|
4653
|
+
};
|
|
4654
|
+
|
|
4655
|
+
// src/file-types/index.ts
|
|
4656
|
+
var detectFileType = (data) => {
|
|
4657
|
+
if (isRiffWave(data)) {
|
|
4658
|
+
return { type: "wav" };
|
|
4659
|
+
}
|
|
4660
|
+
if (isRiffAvi2(data)) {
|
|
4661
|
+
return { type: "riff" };
|
|
4662
|
+
}
|
|
4663
|
+
if (isAac(data)) {
|
|
4664
|
+
return { type: "aac" };
|
|
4665
|
+
}
|
|
4666
|
+
const webp = isWebp(data);
|
|
4667
|
+
if (webp) {
|
|
4668
|
+
return webp;
|
|
4669
|
+
}
|
|
4670
|
+
if (isWebm(data)) {
|
|
4671
|
+
return { type: "webm" };
|
|
4672
|
+
}
|
|
4673
|
+
if (isIsoBaseMedia(data)) {
|
|
4674
|
+
return { type: "iso-base-media" };
|
|
4675
|
+
}
|
|
4676
|
+
if (isTransportStream(data)) {
|
|
4677
|
+
return { type: "transport-stream" };
|
|
4678
|
+
}
|
|
4679
|
+
if (isMp3(data)) {
|
|
4680
|
+
return { type: "mp3" };
|
|
4681
|
+
}
|
|
4682
|
+
if (isGif(data)) {
|
|
4683
|
+
return { type: "gif" };
|
|
4684
|
+
}
|
|
4685
|
+
const png = isPng(data);
|
|
4686
|
+
if (png) {
|
|
4687
|
+
return png;
|
|
4688
|
+
}
|
|
4689
|
+
const pdf = isPdf(data);
|
|
4690
|
+
if (pdf) {
|
|
4691
|
+
return pdf;
|
|
4692
|
+
}
|
|
4693
|
+
const bmp = isBmp(data);
|
|
4694
|
+
if (bmp) {
|
|
4695
|
+
return bmp;
|
|
4696
|
+
}
|
|
4697
|
+
const jpeg = isJpeg(data);
|
|
4698
|
+
if (jpeg) {
|
|
4699
|
+
return jpeg;
|
|
4700
|
+
}
|
|
4701
|
+
return { type: "unknown" };
|
|
4702
|
+
};
|
|
4703
|
+
|
|
4361
4704
|
// src/buffer-iterator.ts
|
|
4362
4705
|
class OffsetCounter {
|
|
4363
4706
|
#offset;
|
|
@@ -4394,14 +4737,6 @@ class OffsetCounter {
|
|
|
4394
4737
|
this.#offset -= amount;
|
|
4395
4738
|
}
|
|
4396
4739
|
}
|
|
4397
|
-
var isoBaseMediaMp4Pattern = new TextEncoder().encode("ftyp");
|
|
4398
|
-
var mpegPattern = new Uint8Array([255, 243, 228, 100]);
|
|
4399
|
-
var riffPattern = new Uint8Array([82, 73, 70, 70]);
|
|
4400
|
-
var matchesPattern = (pattern) => {
|
|
4401
|
-
return (data) => {
|
|
4402
|
-
return pattern.every((value, index) => data[index] === value);
|
|
4403
|
-
};
|
|
4404
|
-
};
|
|
4405
4740
|
var makeOffsetCounter = () => {
|
|
4406
4741
|
return new OffsetCounter(0);
|
|
4407
4742
|
};
|
|
@@ -4542,21 +4877,6 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
4542
4877
|
const bytesRemaining = () => {
|
|
4543
4878
|
return data.byteLength - counter.getDiscardedOffset();
|
|
4544
4879
|
};
|
|
4545
|
-
const isIsoBaseMedia = () => {
|
|
4546
|
-
return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
|
|
4547
|
-
};
|
|
4548
|
-
const isRiff = () => {
|
|
4549
|
-
return matchesPattern(riffPattern)(data.subarray(0, 4));
|
|
4550
|
-
};
|
|
4551
|
-
const isWebm = () => {
|
|
4552
|
-
return matchesPattern(webmPattern)(data.subarray(0, 4));
|
|
4553
|
-
};
|
|
4554
|
-
const isMp3 = () => {
|
|
4555
|
-
return matchesPattern(mpegPattern)(data.subarray(0, 4));
|
|
4556
|
-
};
|
|
4557
|
-
const isTransportStream = () => {
|
|
4558
|
-
return data[0] === 71;
|
|
4559
|
-
};
|
|
4560
4880
|
const removeBytesRead = () => {
|
|
4561
4881
|
if (!discardAllowed) {
|
|
4562
4882
|
return;
|
|
@@ -4671,10 +4991,8 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
4671
4991
|
getBits,
|
|
4672
4992
|
byteLength,
|
|
4673
4993
|
bytesRemaining,
|
|
4674
|
-
isIsoBaseMedia,
|
|
4675
4994
|
leb128,
|
|
4676
4995
|
removeBytesRead,
|
|
4677
|
-
isWebm,
|
|
4678
4996
|
discard,
|
|
4679
4997
|
getEightByteNumber,
|
|
4680
4998
|
getFourByteNumber,
|
|
@@ -4683,7 +5001,9 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
4683
5001
|
const atom = getSlice(4);
|
|
4684
5002
|
return new TextDecoder().decode(atom);
|
|
4685
5003
|
},
|
|
4686
|
-
|
|
5004
|
+
detectFileType: () => {
|
|
5005
|
+
return detectFileType(data);
|
|
5006
|
+
},
|
|
4687
5007
|
getPaddedFourByteNumber,
|
|
4688
5008
|
getMatroskaSegmentId: () => {
|
|
4689
5009
|
if (bytesRemaining() === 0) {
|
|
@@ -4836,11 +5156,9 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
|
|
|
4836
5156
|
getInt32Le,
|
|
4837
5157
|
getInt32,
|
|
4838
5158
|
destroy,
|
|
4839
|
-
isMp3,
|
|
4840
5159
|
disallowDiscard,
|
|
4841
5160
|
allowDiscard,
|
|
4842
5161
|
startBox,
|
|
4843
|
-
isTransportStream,
|
|
4844
5162
|
readExpGolomb
|
|
4845
5163
|
};
|
|
4846
5164
|
};
|
|
@@ -6205,145 +6523,205 @@ var getLocation = (structure) => {
|
|
|
6205
6523
|
var emitAvailableInfo = ({
|
|
6206
6524
|
hasInfo,
|
|
6207
6525
|
parseResult,
|
|
6208
|
-
|
|
6526
|
+
callbacks,
|
|
6209
6527
|
state,
|
|
6210
6528
|
returnValue,
|
|
6211
6529
|
contentLength,
|
|
6212
|
-
name
|
|
6530
|
+
name,
|
|
6531
|
+
mimeType,
|
|
6532
|
+
fieldsInReturnValue,
|
|
6533
|
+
emittedFields
|
|
6213
6534
|
}) => {
|
|
6214
6535
|
const keys = Object.keys(hasInfo);
|
|
6215
6536
|
for (const key of keys) {
|
|
6216
6537
|
if (key === "structure") {
|
|
6217
|
-
if (parseResult && hasInfo.structure &&
|
|
6218
|
-
|
|
6219
|
-
|
|
6538
|
+
if (parseResult && hasInfo.structure && !emittedFields.structure) {
|
|
6539
|
+
callbacks.onStructure?.(parseResult.segments);
|
|
6540
|
+
if (fieldsInReturnValue.structure) {
|
|
6541
|
+
returnValue.structure = parseResult.segments;
|
|
6542
|
+
}
|
|
6543
|
+
emittedFields.structure = true;
|
|
6220
6544
|
}
|
|
6221
6545
|
continue;
|
|
6222
6546
|
}
|
|
6223
6547
|
if (key === "durationInSeconds") {
|
|
6224
|
-
if (hasInfo.durationInSeconds &&
|
|
6548
|
+
if (hasInfo.durationInSeconds && !emittedFields.durationInSeconds && parseResult) {
|
|
6225
6549
|
const durationInSeconds = getDuration(parseResult.segments, state);
|
|
6226
|
-
|
|
6227
|
-
|
|
6550
|
+
callbacks.onDurationInSeconds?.(durationInSeconds);
|
|
6551
|
+
if (fieldsInReturnValue.durationInSeconds) {
|
|
6552
|
+
returnValue.durationInSeconds = durationInSeconds;
|
|
6553
|
+
}
|
|
6554
|
+
emittedFields.durationInSeconds = true;
|
|
6228
6555
|
}
|
|
6229
6556
|
continue;
|
|
6230
6557
|
}
|
|
6231
6558
|
if (key === "dimensions") {
|
|
6232
|
-
if (hasInfo.dimensions &&
|
|
6559
|
+
if (hasInfo.dimensions && !emittedFields.dimensions && parseResult) {
|
|
6233
6560
|
const dimensionsQueried = getDimensions(parseResult.segments, state);
|
|
6234
6561
|
const dimensions = {
|
|
6235
6562
|
height: dimensionsQueried.height,
|
|
6236
6563
|
width: dimensionsQueried.width
|
|
6237
6564
|
};
|
|
6238
|
-
|
|
6239
|
-
|
|
6565
|
+
callbacks.onDimensions?.(dimensions);
|
|
6566
|
+
if (fieldsInReturnValue.dimensions) {
|
|
6567
|
+
returnValue.dimensions = dimensions;
|
|
6568
|
+
}
|
|
6569
|
+
emittedFields.dimensions = true;
|
|
6240
6570
|
}
|
|
6241
6571
|
continue;
|
|
6242
6572
|
}
|
|
6243
6573
|
if (key === "unrotatedDimensions") {
|
|
6244
|
-
if (
|
|
6574
|
+
if (hasInfo.unrotatedDimensions && !emittedFields.unrotatedDimensions && parseResult) {
|
|
6245
6575
|
const dimensionsQueried = getDimensions(parseResult.segments, state);
|
|
6246
6576
|
const unrotatedDimensions = {
|
|
6247
6577
|
height: dimensionsQueried.unrotatedHeight,
|
|
6248
6578
|
width: dimensionsQueried.unrotatedWidth
|
|
6249
6579
|
};
|
|
6250
|
-
|
|
6251
|
-
|
|
6580
|
+
callbacks.onUnrotatedDimensions?.(unrotatedDimensions);
|
|
6581
|
+
if (fieldsInReturnValue.unrotatedDimensions) {
|
|
6582
|
+
returnValue.unrotatedDimensions = unrotatedDimensions;
|
|
6583
|
+
}
|
|
6584
|
+
emittedFields.unrotatedDimensions = true;
|
|
6252
6585
|
}
|
|
6253
6586
|
continue;
|
|
6254
6587
|
}
|
|
6255
6588
|
if (key === "rotation") {
|
|
6256
|
-
if (
|
|
6589
|
+
if (hasInfo.rotation && !emittedFields.rotation && parseResult) {
|
|
6257
6590
|
const dimensionsQueried = getDimensions(parseResult.segments, state);
|
|
6258
6591
|
const { rotation } = dimensionsQueried;
|
|
6259
|
-
|
|
6260
|
-
|
|
6592
|
+
callbacks.onRotation?.(rotation);
|
|
6593
|
+
if (fieldsInReturnValue.rotation) {
|
|
6594
|
+
returnValue.rotation = rotation;
|
|
6595
|
+
}
|
|
6596
|
+
emittedFields.rotation = true;
|
|
6261
6597
|
}
|
|
6262
6598
|
continue;
|
|
6263
6599
|
}
|
|
6264
6600
|
if (key === "fps") {
|
|
6265
|
-
if (
|
|
6601
|
+
if (!emittedFields.fps && hasInfo.fps && parseResult) {
|
|
6266
6602
|
const fps = getFps(parseResult.segments);
|
|
6267
|
-
|
|
6268
|
-
|
|
6603
|
+
callbacks.onFps?.(fps);
|
|
6604
|
+
if (fieldsInReturnValue.fps) {
|
|
6605
|
+
returnValue.fps = fps;
|
|
6606
|
+
}
|
|
6607
|
+
emittedFields.fps = true;
|
|
6269
6608
|
}
|
|
6270
6609
|
continue;
|
|
6271
6610
|
}
|
|
6272
6611
|
if (key === "videoCodec") {
|
|
6273
|
-
if (
|
|
6612
|
+
if (!emittedFields.videoCodec && hasInfo.videoCodec && parseResult) {
|
|
6274
6613
|
const videoCodec = getVideoCodec(parseResult.segments, state);
|
|
6275
|
-
|
|
6276
|
-
|
|
6614
|
+
callbacks.onVideoCodec?.(videoCodec);
|
|
6615
|
+
if (fieldsInReturnValue.videoCodec) {
|
|
6616
|
+
returnValue.videoCodec = videoCodec;
|
|
6617
|
+
}
|
|
6618
|
+
emittedFields.videoCodec = true;
|
|
6277
6619
|
}
|
|
6278
6620
|
continue;
|
|
6279
6621
|
}
|
|
6280
6622
|
if (key === "audioCodec") {
|
|
6281
|
-
if (
|
|
6623
|
+
if (!emittedFields.audioCodec && hasInfo.audioCodec && parseResult) {
|
|
6282
6624
|
const audioCodec = getAudioCodec(parseResult.segments, state);
|
|
6283
|
-
|
|
6284
|
-
|
|
6625
|
+
callbacks.onAudioCodec?.(audioCodec);
|
|
6626
|
+
if (fieldsInReturnValue.audioCodec) {
|
|
6627
|
+
returnValue.audioCodec = audioCodec;
|
|
6628
|
+
}
|
|
6629
|
+
emittedFields.audioCodec = true;
|
|
6285
6630
|
}
|
|
6286
6631
|
continue;
|
|
6287
6632
|
}
|
|
6288
6633
|
if (key === "tracks") {
|
|
6289
|
-
if (
|
|
6634
|
+
if (!emittedFields.tracks && hasInfo.tracks && parseResult) {
|
|
6290
6635
|
const { videoTracks, audioTracks } = getTracks(parseResult.segments, state);
|
|
6291
|
-
|
|
6292
|
-
|
|
6293
|
-
|
|
6636
|
+
callbacks.onTracks?.({ videoTracks, audioTracks });
|
|
6637
|
+
if (fieldsInReturnValue.tracks) {
|
|
6638
|
+
returnValue.tracks = { videoTracks, audioTracks };
|
|
6639
|
+
}
|
|
6640
|
+
emittedFields.tracks = true;
|
|
6294
6641
|
}
|
|
6295
6642
|
continue;
|
|
6296
6643
|
}
|
|
6297
6644
|
if (key === "internalStats") {
|
|
6298
6645
|
if (hasInfo.internalStats) {
|
|
6299
6646
|
const internalStats = state.getInternalStats();
|
|
6300
|
-
|
|
6647
|
+
if (fieldsInReturnValue.internalStats) {
|
|
6648
|
+
returnValue.internalStats = internalStats;
|
|
6649
|
+
}
|
|
6650
|
+
emittedFields.internalStats = true;
|
|
6301
6651
|
}
|
|
6302
6652
|
continue;
|
|
6303
6653
|
}
|
|
6304
6654
|
if (key === "size") {
|
|
6305
|
-
if (
|
|
6306
|
-
|
|
6307
|
-
|
|
6655
|
+
if (!emittedFields.size && hasInfo.size) {
|
|
6656
|
+
callbacks.onSize?.(contentLength);
|
|
6657
|
+
if (fieldsInReturnValue.size) {
|
|
6658
|
+
returnValue.size = contentLength;
|
|
6659
|
+
}
|
|
6660
|
+
emittedFields.size = true;
|
|
6661
|
+
}
|
|
6662
|
+
continue;
|
|
6663
|
+
}
|
|
6664
|
+
if (key === "mimeType") {
|
|
6665
|
+
if (!emittedFields.mimeType && hasInfo.mimeType) {
|
|
6666
|
+
callbacks.onMimeType?.(mimeType);
|
|
6667
|
+
if (fieldsInReturnValue.mimeType) {
|
|
6668
|
+
returnValue.mimeType = mimeType;
|
|
6669
|
+
}
|
|
6670
|
+
emittedFields.mimeType = true;
|
|
6308
6671
|
}
|
|
6309
6672
|
continue;
|
|
6310
6673
|
}
|
|
6311
6674
|
if (key === "name") {
|
|
6312
|
-
if (
|
|
6313
|
-
|
|
6314
|
-
|
|
6675
|
+
if (!emittedFields.name && hasInfo.name) {
|
|
6676
|
+
callbacks.onName?.(name);
|
|
6677
|
+
if (fieldsInReturnValue.name) {
|
|
6678
|
+
returnValue.name = name;
|
|
6679
|
+
}
|
|
6680
|
+
emittedFields.name = true;
|
|
6315
6681
|
}
|
|
6316
6682
|
continue;
|
|
6317
6683
|
}
|
|
6318
6684
|
if (key === "isHdr") {
|
|
6319
|
-
if (returnValue.isHdr
|
|
6685
|
+
if (!returnValue.isHdr && hasInfo.isHdr && parseResult) {
|
|
6320
6686
|
const isHdr = getIsHdr(parseResult.segments, state);
|
|
6321
|
-
|
|
6322
|
-
|
|
6687
|
+
callbacks.onIsHdr?.(isHdr);
|
|
6688
|
+
if (fieldsInReturnValue.isHdr) {
|
|
6689
|
+
returnValue.isHdr = isHdr;
|
|
6690
|
+
}
|
|
6691
|
+
emittedFields.isHdr = true;
|
|
6323
6692
|
}
|
|
6324
6693
|
continue;
|
|
6325
6694
|
}
|
|
6326
6695
|
if (key === "container") {
|
|
6327
|
-
if (returnValue.container
|
|
6696
|
+
if (!returnValue.container && hasInfo.container && parseResult) {
|
|
6328
6697
|
const container = getContainer(parseResult.segments);
|
|
6329
|
-
|
|
6330
|
-
|
|
6698
|
+
callbacks.onContainer?.(container);
|
|
6699
|
+
if (fieldsInReturnValue.container) {
|
|
6700
|
+
returnValue.container = container;
|
|
6701
|
+
}
|
|
6702
|
+
emittedFields.container = true;
|
|
6331
6703
|
}
|
|
6332
6704
|
continue;
|
|
6333
6705
|
}
|
|
6334
6706
|
if (key === "metadata") {
|
|
6335
|
-
if (
|
|
6707
|
+
if (!emittedFields.metadata && hasInfo.metadata && parseResult) {
|
|
6336
6708
|
const metadata = getMetadata(parseResult.segments);
|
|
6337
|
-
|
|
6338
|
-
|
|
6709
|
+
callbacks.onMetadata?.(metadata);
|
|
6710
|
+
if (fieldsInReturnValue.metadata) {
|
|
6711
|
+
returnValue.metadata = metadata;
|
|
6712
|
+
}
|
|
6713
|
+
emittedFields.metadata = true;
|
|
6339
6714
|
}
|
|
6340
6715
|
continue;
|
|
6341
6716
|
}
|
|
6342
6717
|
if (key === "location") {
|
|
6343
|
-
if (
|
|
6718
|
+
if (!emittedFields.location && hasInfo.location && parseResult) {
|
|
6344
6719
|
const location = getLocation(parseResult.segments);
|
|
6345
|
-
|
|
6346
|
-
|
|
6720
|
+
callbacks.onLocation?.(location);
|
|
6721
|
+
if (fieldsInReturnValue.location) {
|
|
6722
|
+
returnValue.location = location;
|
|
6723
|
+
}
|
|
6724
|
+
emittedFields.location = true;
|
|
6347
6725
|
}
|
|
6348
6726
|
continue;
|
|
6349
6727
|
}
|
|
@@ -6351,9 +6729,41 @@ var emitAvailableInfo = ({
|
|
|
6351
6729
|
}
|
|
6352
6730
|
};
|
|
6353
6731
|
|
|
6732
|
+
// src/get-fields-from-callbacks.ts
|
|
6733
|
+
var getFieldsFromCallback = ({
|
|
6734
|
+
fields,
|
|
6735
|
+
callbacks
|
|
6736
|
+
}) => {
|
|
6737
|
+
const newFields = {
|
|
6738
|
+
audioCodec: Boolean(callbacks.onAudioCodec),
|
|
6739
|
+
container: Boolean(callbacks.onContainer),
|
|
6740
|
+
dimensions: Boolean(callbacks.onDimensions),
|
|
6741
|
+
durationInSeconds: Boolean(callbacks.onDurationInSeconds),
|
|
6742
|
+
fps: Boolean(callbacks.onFps),
|
|
6743
|
+
internalStats: Boolean(callbacks.onInternalStats),
|
|
6744
|
+
isHdr: Boolean(callbacks.onIsHdr),
|
|
6745
|
+
location: Boolean(callbacks.onLocation),
|
|
6746
|
+
metadata: Boolean(callbacks.onMetadata),
|
|
6747
|
+
mimeType: Boolean(callbacks.onMimeType),
|
|
6748
|
+
name: Boolean(callbacks.onName),
|
|
6749
|
+
rotation: Boolean(callbacks.onRotation),
|
|
6750
|
+
size: Boolean(callbacks.onSize),
|
|
6751
|
+
structure: Boolean(callbacks.onStructure),
|
|
6752
|
+
tracks: Boolean(callbacks.onTracks),
|
|
6753
|
+
unrotatedDimensions: Boolean(callbacks.onUnrotatedDimensions),
|
|
6754
|
+
videoCodec: Boolean(callbacks.onVideoCodec),
|
|
6755
|
+
...fields
|
|
6756
|
+
};
|
|
6757
|
+
return newFields;
|
|
6758
|
+
};
|
|
6759
|
+
|
|
6354
6760
|
// src/has-all-info.ts
|
|
6355
|
-
var getAvailableInfo = (
|
|
6356
|
-
|
|
6761
|
+
var getAvailableInfo = ({
|
|
6762
|
+
fieldsToFetch,
|
|
6763
|
+
structure,
|
|
6764
|
+
state
|
|
6765
|
+
}) => {
|
|
6766
|
+
const keys = Object.entries(fieldsToFetch).filter(([, value]) => value);
|
|
6357
6767
|
const infos = keys.map(([_key]) => {
|
|
6358
6768
|
const key = _key;
|
|
6359
6769
|
if (key === "structure") {
|
|
@@ -6386,6 +6796,9 @@ var getAvailableInfo = (options, structure, state) => {
|
|
|
6386
6796
|
if (key === "size") {
|
|
6387
6797
|
return true;
|
|
6388
6798
|
}
|
|
6799
|
+
if (key === "mimeType") {
|
|
6800
|
+
return true;
|
|
6801
|
+
}
|
|
6389
6802
|
if (key === "name") {
|
|
6390
6803
|
return true;
|
|
6391
6804
|
}
|
|
@@ -6409,7 +6822,11 @@ var hasAllInfo = ({
|
|
|
6409
6822
|
state,
|
|
6410
6823
|
structure
|
|
6411
6824
|
}) => {
|
|
6412
|
-
const availableInfo = getAvailableInfo(
|
|
6825
|
+
const availableInfo = getAvailableInfo({
|
|
6826
|
+
fieldsToFetch: fields ?? {},
|
|
6827
|
+
structure,
|
|
6828
|
+
state
|
|
6829
|
+
});
|
|
6413
6830
|
return Object.values(availableInfo).every(Boolean) && (state.maySkipVideoData() || state.canSkipTracksState.canSkipTracks());
|
|
6414
6831
|
};
|
|
6415
6832
|
|
|
@@ -10960,16 +11377,20 @@ var parseVideo = ({
|
|
|
10960
11377
|
options,
|
|
10961
11378
|
signal,
|
|
10962
11379
|
logLevel,
|
|
10963
|
-
fields
|
|
11380
|
+
fields,
|
|
11381
|
+
mimeType,
|
|
11382
|
+
contentLength,
|
|
11383
|
+
name
|
|
10964
11384
|
}) => {
|
|
10965
11385
|
if (iterator.bytesRemaining() === 0) {
|
|
10966
11386
|
return Promise.reject(new Error("no bytes"));
|
|
10967
11387
|
}
|
|
10968
|
-
|
|
11388
|
+
const fileType = iterator.detectFileType();
|
|
11389
|
+
if (fileType.type === "riff") {
|
|
10969
11390
|
Log.verbose(logLevel, "Detected RIFF container");
|
|
10970
11391
|
return Promise.resolve(parseRiff({ iterator, options, fields }));
|
|
10971
11392
|
}
|
|
10972
|
-
if (
|
|
11393
|
+
if (fileType.type === "iso-base-media") {
|
|
10973
11394
|
Log.verbose(logLevel, "Detected ISO Base Media container");
|
|
10974
11395
|
return parseIsoBaseMediaBoxes({
|
|
10975
11396
|
iterator,
|
|
@@ -10983,11 +11404,11 @@ var parseVideo = ({
|
|
|
10983
11404
|
fields
|
|
10984
11405
|
});
|
|
10985
11406
|
}
|
|
10986
|
-
if (
|
|
11407
|
+
if (fileType.type === "webm") {
|
|
10987
11408
|
Log.verbose(logLevel, "Detected Matroska container");
|
|
10988
11409
|
return parseWebm({ counter: iterator, parserContext: options, fields });
|
|
10989
11410
|
}
|
|
10990
|
-
if (
|
|
11411
|
+
if (fileType.type === "transport-stream") {
|
|
10991
11412
|
return parseTransportStream({
|
|
10992
11413
|
iterator,
|
|
10993
11414
|
parserContext: options,
|
|
@@ -11000,10 +11421,68 @@ var parseVideo = ({
|
|
|
11000
11421
|
nextPesHeaderStore: makeNextPesHeaderStore()
|
|
11001
11422
|
});
|
|
11002
11423
|
}
|
|
11003
|
-
if (
|
|
11004
|
-
return Promise.reject(new
|
|
11005
|
-
|
|
11006
|
-
|
|
11424
|
+
if (fileType.type === "mp3") {
|
|
11425
|
+
return Promise.reject(new IsAnUnsupportedAudioTypeError({
|
|
11426
|
+
message: "MP3 files are not yet supported",
|
|
11427
|
+
mimeType,
|
|
11428
|
+
sizeInBytes: contentLength,
|
|
11429
|
+
fileName: name,
|
|
11430
|
+
audioType: "mp3"
|
|
11431
|
+
}));
|
|
11432
|
+
}
|
|
11433
|
+
if (fileType.type === "wav") {
|
|
11434
|
+
return Promise.reject(new IsAnUnsupportedAudioTypeError({
|
|
11435
|
+
message: "WAV files are not yet supported",
|
|
11436
|
+
mimeType,
|
|
11437
|
+
sizeInBytes: contentLength,
|
|
11438
|
+
fileName: name,
|
|
11439
|
+
audioType: "wav"
|
|
11440
|
+
}));
|
|
11441
|
+
}
|
|
11442
|
+
if (fileType.type === "aac") {
|
|
11443
|
+
return Promise.reject(new IsAnUnsupportedAudioTypeError({
|
|
11444
|
+
message: "AAC files are not yet supported",
|
|
11445
|
+
mimeType,
|
|
11446
|
+
sizeInBytes: contentLength,
|
|
11447
|
+
fileName: name,
|
|
11448
|
+
audioType: "aac"
|
|
11449
|
+
}));
|
|
11450
|
+
}
|
|
11451
|
+
if (fileType.type === "gif") {
|
|
11452
|
+
return Promise.reject(new IsAGifError({
|
|
11453
|
+
message: "GIF files are not yet supported",
|
|
11454
|
+
mimeType,
|
|
11455
|
+
sizeInBytes: contentLength,
|
|
11456
|
+
fileName: name
|
|
11457
|
+
}));
|
|
11458
|
+
}
|
|
11459
|
+
if (fileType.type === "pdf") {
|
|
11460
|
+
return Promise.reject(new IsAPdfError({
|
|
11461
|
+
message: "GIF files are not supported",
|
|
11462
|
+
mimeType,
|
|
11463
|
+
sizeInBytes: contentLength,
|
|
11464
|
+
fileName: name
|
|
11465
|
+
}));
|
|
11466
|
+
}
|
|
11467
|
+
if (fileType.type === "bmp" || fileType.type === "jpeg" || fileType.type === "png" || fileType.type === "webp") {
|
|
11468
|
+
return Promise.reject(new IsAnImageError({
|
|
11469
|
+
message: "Image files are not supported",
|
|
11470
|
+
imageType: fileType.type,
|
|
11471
|
+
dimensions: fileType.dimensions,
|
|
11472
|
+
mimeType,
|
|
11473
|
+
sizeInBytes: contentLength,
|
|
11474
|
+
fileName: name
|
|
11475
|
+
}));
|
|
11476
|
+
}
|
|
11477
|
+
if (fileType.type === "unknown") {
|
|
11478
|
+
return Promise.reject(new IsAnUnsupportedFileTypeError({
|
|
11479
|
+
message: "Unknown file format",
|
|
11480
|
+
mimeType,
|
|
11481
|
+
sizeInBytes: contentLength,
|
|
11482
|
+
fileName: name
|
|
11483
|
+
}));
|
|
11484
|
+
}
|
|
11485
|
+
return Promise.reject(new Error("Unknown video format " + fileType));
|
|
11007
11486
|
};
|
|
11008
11487
|
|
|
11009
11488
|
// src/state/can-skip-tracks.ts
|
|
@@ -11023,7 +11502,8 @@ var needsTracksField = {
|
|
|
11023
11502
|
unrotatedDimensions: true,
|
|
11024
11503
|
videoCodec: true,
|
|
11025
11504
|
metadata: true,
|
|
11026
|
-
location: true
|
|
11505
|
+
location: true,
|
|
11506
|
+
mimeType: false
|
|
11027
11507
|
};
|
|
11028
11508
|
var makeCanSkipTracksState = ({
|
|
11029
11509
|
hasAudioTrackHandlers,
|
|
@@ -11225,9 +11705,9 @@ var makeParserState = ({
|
|
|
11225
11705
|
};
|
|
11226
11706
|
|
|
11227
11707
|
// src/parse-media.ts
|
|
11228
|
-
var parseMedia = async ({
|
|
11708
|
+
var parseMedia = async function({
|
|
11229
11709
|
src,
|
|
11230
|
-
fields,
|
|
11710
|
+
fields: _fieldsInReturnValue,
|
|
11231
11711
|
reader: readerInterface = fetchReader,
|
|
11232
11712
|
onAudioTrack,
|
|
11233
11713
|
onVideoTrack,
|
|
@@ -11235,23 +11715,48 @@ var parseMedia = async ({
|
|
|
11235
11715
|
logLevel = "info",
|
|
11236
11716
|
onParseProgress,
|
|
11237
11717
|
...more
|
|
11238
|
-
})
|
|
11718
|
+
}) {
|
|
11239
11719
|
let iterator = null;
|
|
11240
11720
|
let parseResult = null;
|
|
11721
|
+
const fieldsInReturnValue = _fieldsInReturnValue ?? {};
|
|
11722
|
+
const fields = getFieldsFromCallback({
|
|
11723
|
+
fields: fieldsInReturnValue,
|
|
11724
|
+
callbacks: more
|
|
11725
|
+
});
|
|
11241
11726
|
const state = makeParserState({
|
|
11242
11727
|
hasAudioTrackHandlers: Boolean(onAudioTrack),
|
|
11243
11728
|
hasVideoTrackHandlers: Boolean(onVideoTrack),
|
|
11244
11729
|
signal,
|
|
11245
11730
|
getIterator: () => iterator,
|
|
11246
|
-
fields
|
|
11731
|
+
fields
|
|
11247
11732
|
});
|
|
11248
11733
|
const {
|
|
11249
11734
|
reader,
|
|
11250
11735
|
contentLength,
|
|
11251
11736
|
name,
|
|
11737
|
+
contentType,
|
|
11252
11738
|
supportsContentRange: readerSupportsContentRange
|
|
11253
11739
|
} = await readerInterface.read(src, null, signal);
|
|
11254
11740
|
let currentReader = reader;
|
|
11741
|
+
const emittedFields = {
|
|
11742
|
+
audioCodec: false,
|
|
11743
|
+
container: false,
|
|
11744
|
+
dimensions: false,
|
|
11745
|
+
durationInSeconds: false,
|
|
11746
|
+
fps: false,
|
|
11747
|
+
internalStats: false,
|
|
11748
|
+
isHdr: false,
|
|
11749
|
+
location: false,
|
|
11750
|
+
metadata: false,
|
|
11751
|
+
mimeType: false,
|
|
11752
|
+
name: false,
|
|
11753
|
+
rotation: false,
|
|
11754
|
+
size: false,
|
|
11755
|
+
structure: false,
|
|
11756
|
+
tracks: false,
|
|
11757
|
+
videoCodec: false,
|
|
11758
|
+
unrotatedDimensions: false
|
|
11759
|
+
};
|
|
11255
11760
|
const supportsContentRange = readerSupportsContentRange && !(typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.DISABLE_CONTENT_RANGE === "true");
|
|
11256
11761
|
const returnValue = {};
|
|
11257
11762
|
const moreFields = more;
|
|
@@ -11264,15 +11769,22 @@ var parseMedia = async ({
|
|
|
11264
11769
|
nextTrackIndex: 0
|
|
11265
11770
|
};
|
|
11266
11771
|
const triggerInfoEmit = () => {
|
|
11267
|
-
const availableInfo = getAvailableInfo(
|
|
11772
|
+
const availableInfo = getAvailableInfo({
|
|
11773
|
+
fieldsToFetch: fields,
|
|
11774
|
+
structure: parseResult?.segments ?? null,
|
|
11775
|
+
state
|
|
11776
|
+
});
|
|
11268
11777
|
emitAvailableInfo({
|
|
11269
11778
|
hasInfo: availableInfo,
|
|
11270
|
-
moreFields,
|
|
11779
|
+
callbacks: moreFields,
|
|
11780
|
+
fieldsInReturnValue,
|
|
11271
11781
|
parseResult,
|
|
11272
11782
|
state,
|
|
11273
11783
|
returnValue,
|
|
11274
11784
|
contentLength,
|
|
11275
|
-
name
|
|
11785
|
+
name,
|
|
11786
|
+
mimeType: contentType,
|
|
11787
|
+
emittedFields
|
|
11276
11788
|
});
|
|
11277
11789
|
};
|
|
11278
11790
|
triggerInfoEmit();
|
|
@@ -11317,14 +11829,17 @@ var parseMedia = async ({
|
|
|
11317
11829
|
options,
|
|
11318
11830
|
signal: signal ?? null,
|
|
11319
11831
|
logLevel,
|
|
11320
|
-
fields
|
|
11832
|
+
fields,
|
|
11833
|
+
mimeType: contentType,
|
|
11834
|
+
contentLength,
|
|
11835
|
+
name
|
|
11321
11836
|
});
|
|
11322
11837
|
}
|
|
11323
11838
|
if (parseResult.status === "incomplete" && parseResult.skipTo !== null) {
|
|
11324
11839
|
state.increaseSkippedBytes(parseResult.skipTo - iterator.counter.getOffset());
|
|
11325
11840
|
}
|
|
11326
11841
|
if (hasAllInfo({
|
|
11327
|
-
fields
|
|
11842
|
+
fields,
|
|
11328
11843
|
structure: parseResult.segments,
|
|
11329
11844
|
state
|
|
11330
11845
|
})) {
|
|
@@ -11350,19 +11865,23 @@ var parseMedia = async ({
|
|
|
11350
11865
|
}
|
|
11351
11866
|
}
|
|
11352
11867
|
Log.verbose(logLevel, "Finished parsing file");
|
|
11868
|
+
const hasInfo = Object.keys(fields).reduce((acc, key) => {
|
|
11869
|
+
if (fields?.[key]) {
|
|
11870
|
+
acc[key] = true;
|
|
11871
|
+
}
|
|
11872
|
+
return acc;
|
|
11873
|
+
}, {});
|
|
11353
11874
|
emitAvailableInfo({
|
|
11354
|
-
hasInfo
|
|
11355
|
-
|
|
11356
|
-
|
|
11357
|
-
}
|
|
11358
|
-
return acc;
|
|
11359
|
-
}, {}),
|
|
11360
|
-
moreFields,
|
|
11875
|
+
hasInfo,
|
|
11876
|
+
callbacks: moreFields,
|
|
11877
|
+
fieldsInReturnValue,
|
|
11361
11878
|
parseResult,
|
|
11362
11879
|
state,
|
|
11363
11880
|
returnValue,
|
|
11364
11881
|
contentLength,
|
|
11365
|
-
|
|
11882
|
+
mimeType: contentType,
|
|
11883
|
+
name,
|
|
11884
|
+
emittedFields
|
|
11366
11885
|
});
|
|
11367
11886
|
currentReader.abort();
|
|
11368
11887
|
iterator?.destroy();
|
|
@@ -11384,5 +11903,10 @@ var MediaParserInternals = {
|
|
|
11384
11903
|
export {
|
|
11385
11904
|
parseMedia,
|
|
11386
11905
|
VERSION,
|
|
11387
|
-
MediaParserInternals
|
|
11906
|
+
MediaParserInternals,
|
|
11907
|
+
IsAnUnsupportedFileTypeError,
|
|
11908
|
+
IsAnUnsupportedAudioTypeError,
|
|
11909
|
+
IsAnImageError,
|
|
11910
|
+
IsAPdfError,
|
|
11911
|
+
IsAGifError
|
|
11388
11912
|
};
|