UNPKG

@remotion/media-parser

Version:

A pure JavaScript library for parsing video files

59 lines (58 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getKeyframesFromIsoBaseMedia = void 0; const get_tracks_1 = require("../../get-tracks"); const are_samples_complete_1 = require("./are-samples-complete"); const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track"); const traversal_1 = require("./traversal"); const getKeyframesFromIsoBaseMedia = (state) => { const tracks = (0, get_tracks_1.getTracksFromIsoBaseMedia)({ isoState: state.iso, m3uPlaylistContext: state.m3uPlaylistContext, structure: state.structure, mayUsePrecomputed: true, }); const videoTracks = tracks.filter((t) => t.type === 'video'); const structure = state.structure.getIsoStructure(); const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes); const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure.boxes); const moov = (0, traversal_1.getMoovFromFromIsoStructure)(structure); if (!moov) { return []; } const allSamples = videoTracks.map((t) => { const { originalTimescale: ts } = t; const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, t.trackId); if (!trakBox) { return []; } const { samplePositions, isComplete } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({ trakBox, moofBoxes, moofComplete: (0, are_samples_complete_1.areSamplesComplete)({ moofBoxes, tfraBoxes, }), trexBoxes: (0, traversal_1.getTrexBoxes)(moov), }); if (!isComplete) { return []; } const keyframes = samplePositions .filter((k) => { return k.isKeyframe; }) .map((k) => { return { trackId: t.trackId, presentationTimeInSeconds: k.timestamp / ts, decodingTimeInSeconds: k.decodingTimestamp / ts, positionInBytes: k.offset, sizeInBytes: k.size, }; }); return keyframes; }); return allSamples.flat(); }; exports.getKeyframesFromIsoBaseMedia = getKeyframesFromIsoBaseMedia;