UNPKG

@remotion/media-parser

Version:

A pure JavaScript library for parsing video files

65 lines (64 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.matroskaHasTracks = exports.getTracksFromMatroska = void 0; const codec_string_1 = require("../avc/codec-string"); const make_track_1 = require("./make-track"); const traversal_1 = require("./traversal"); const getTracksFromMatroska = ({ structureState, webmState, }) => { const structure = structureState.getMatroskaStructure(); const mainSegment = (0, traversal_1.getMainSegment)(structure.boxes); if (!mainSegment) { throw new Error('No main segment'); } const tracksSegment = (0, traversal_1.getTracksSegment)(mainSegment); if (!tracksSegment) { throw new Error('No tracks segment'); } const resolvedTracks = []; const missingInfo = []; for (const trackEntrySegment of tracksSegment.value) { if (trackEntrySegment.type === 'Crc32') { continue; } if (trackEntrySegment.type !== 'TrackEntry') { throw new Error('Expected track entry segment'); } const track = (0, make_track_1.getTrack)({ track: trackEntrySegment, timescale: webmState.getTimescale(), }); if (!track) { continue; } if (track.codec === make_track_1.NO_CODEC_PRIVATE_SHOULD_BE_DERIVED_FROM_SPS) { const avc = webmState.getAvcProfileForTrackNumber(track.trackId); if (avc) { resolvedTracks.push({ ...track, codec: (0, codec_string_1.getCodecStringFromSpsAndPps)(avc), }); } else { missingInfo.push(track); } } else { resolvedTracks.push(track); } } return { missingInfo, resolved: resolvedTracks }; }; exports.getTracksFromMatroska = getTracksFromMatroska; const matroskaHasTracks = ({ structureState, webmState, }) => { const structure = structureState.getMatroskaStructure(); const mainSegment = (0, traversal_1.getMainSegment)(structure.boxes); if (!mainSegment) { return false; } return ((0, traversal_1.getTracksSegment)(mainSegment) !== null && (0, exports.getTracksFromMatroska)({ structureState, webmState, }).missingInfo.length === 0); }; exports.matroskaHasTracks = matroskaHasTracks;