@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
118 lines (117 loc) • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseM3uDirective = void 0;
const parse_m3u_media_directive_1 = require("./parse-m3u-media-directive");
const parse_stream_inf_1 = require("./parse-stream-inf");
const parseM3uDirective = (str) => {
const firstColon = str.indexOf(':');
const directive = (firstColon === -1 ? str : str.slice(0, firstColon)).trim();
const value = firstColon === -1 ? null : str.slice(firstColon + 1);
if (directive === '#EXT-X-VERSION') {
if (!value) {
throw new Error('EXT-X-VERSION directive must have a value');
}
return {
type: 'm3u-version',
version: value,
};
}
if (directive === '#EXT-X-INDEPENDENT-SEGMENTS') {
return {
type: 'm3u-independent-segments',
};
}
if (directive === '#EXT-X-MEDIA') {
if (!value) {
throw new Error('EXT-X-MEDIA directive must have a value');
}
const parsed = (0, parse_m3u_media_directive_1.parseM3uMediaDirective)(value);
return parsed;
}
if (directive === '#EXT-X-TARGETDURATION') {
if (!value) {
throw new Error('EXT-X-TARGETDURATION directive must have a value');
}
return {
type: 'm3u-target-duration',
duration: parseFloat(value),
};
}
if (directive === '#EXTINF') {
if (!value) {
throw new Error('EXTINF has no value');
}
return {
type: 'm3u-extinf',
value: parseFloat(value),
};
}
if (directive === '#EXT-X-ENDLIST') {
return {
type: 'm3u-endlist',
};
}
if (directive === '#EXT-X-PLAYLIST-TYPE') {
if (!value) {
throw new Error('#EXT-X-PLAYLIST-TYPE. directive must have a value');
}
return {
type: 'm3u-playlist-type',
playlistType: value,
};
}
if (directive === '#EXT-X-MEDIA-SEQUENCE') {
if (!value) {
throw new Error('#EXT-X-MEDIA-SEQUENCE directive must have a value');
}
return {
type: 'm3u-media-sequence',
value: Number(value),
};
}
if (directive === '#EXT-X-DISCONTINUITY-SEQUENCE') {
if (!value) {
throw new Error('#EXT-X-DISCONTINUITY-SEQUENCE directive must have a value');
}
return {
type: 'm3u-discontinuity-sequence',
value: Number(value),
};
}
if (directive === '#EXT-X-STREAM-INF') {
if (!value) {
throw new Error('EXT-X-STREAM-INF directive must have a value');
}
const res = (0, parse_stream_inf_1.parseStreamInf)(value);
return res;
}
if (directive === '#EXT-X-I-FRAME-STREAM-INF') {
return {
type: 'm3u-i-frame-stream-info',
};
}
if (directive === '#EXT-X-ALLOW-CACHE') {
if (!value) {
throw new Error('#EXT-X-ALLOW-CACHE directive must have a value');
}
return {
type: 'm3u-allow-cache',
allowsCache: value === 'YES',
};
}
if (directive === '#EXT-X-MAP') {
if (!value) {
throw new Error('#EXT-X-MAP directive must have a value');
}
const p = (0, parse_m3u_media_directive_1.parseM3uKeyValue)(value);
if (!p.URI) {
throw new Error('EXT-X-MAP directive must have a URI');
}
return {
type: 'm3u-map',
value: p.URI,
};
}
throw new Error(`Unknown directive ${directive}. Value: ${value}`);
};
exports.parseM3uDirective = parseM3uDirective;