@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
76 lines (75 loc) • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasMetadata = exports.getMetadata = void 0;
const get_metadata_from_flac_1 = require("../containers/flac/get-metadata-from-flac");
const get_metadata_from_mp3_1 = require("../containers/mp3/get-metadata-from-mp3");
const get_metadata_from_wav_1 = require("../containers/wav/get-metadata-from-wav");
const metadata_from_iso_1 = require("./metadata-from-iso");
const metadata_from_matroska_1 = require("./metadata-from-matroska");
const metadata_from_riff_1 = require("./metadata-from-riff");
const getMetadata = (state) => {
var _a, _b;
const structure = state.structure.getStructure();
if (structure.type === 'matroska') {
return (0, metadata_from_matroska_1.getMetadataFromMatroska)(structure);
}
if (structure.type === 'riff') {
return (0, metadata_from_riff_1.getMetadataFromRiff)(structure);
}
if (structure.type === 'transport-stream' || structure.type === 'm3u') {
return [];
}
if (structure.type === 'mp3') {
const tags = (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure);
if (tags === null) {
throw new Error('Failed to get metadata from mp3');
}
return tags;
}
if (structure.type === 'wav') {
return (_a = (0, get_metadata_from_wav_1.getMetadataFromWav)(structure)) !== null && _a !== void 0 ? _a : [];
}
if (structure.type === 'aac') {
return [];
}
if (structure.type === 'flac') {
return (_b = (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure)) !== null && _b !== void 0 ? _b : [];
}
if (structure.type === 'iso-base-media') {
return (0, metadata_from_iso_1.getMetadataFromIsoBase)(state);
}
throw new Error('Unknown container ' + structure);
};
exports.getMetadata = getMetadata;
// TODO: This forces some containers to check the whole file
// we can do this better! skip over video data
const hasMetadata = (structure) => {
if (structure.type === 'mp3') {
return (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure) !== null;
}
if (structure.type === 'wav') {
return (0, get_metadata_from_wav_1.getMetadataFromWav)(structure) !== null;
}
// M3U, Transport Stream, AAC cannot store any metadata
if (structure.type === 'm3u' ||
structure.type === 'transport-stream' ||
structure.type === 'aac') {
return true;
}
if (structure.type === 'flac') {
return (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure) !== null;
}
// The following containers (MP4, Matroska, AVI) all have mechanisms
// to skip over video sections, and tests for it in read-metadata.test.ts
if (structure.type === 'iso-base-media') {
return false;
}
if (structure.type === 'matroska') {
return false;
}
if (structure.type === 'riff') {
return false;
}
throw new Error('Unknown container ' + structure);
};
exports.hasMetadata = hasMetadata;