@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
65 lines (64 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findTrackToSeek = exports.findAnyTrackWithSamplePositions = void 0;
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 findAnyTrackWithSamplePositions = (allTracks, struc) => {
const moov = (0, traversal_1.getMoovFromFromIsoStructure)(struc);
if (!moov) {
return null;
}
for (const track of allTracks) {
if (track.type === 'video' || track.type === 'audio') {
const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, track.trackId);
if (!trakBox) {
continue;
}
const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
trakBox,
moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
moofComplete: (0, are_samples_complete_1.areSamplesComplete)({
moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
tfraBoxes: (0, traversal_1.getTfraBoxes)(struc.boxes),
}),
trexBoxes: (0, traversal_1.getTrexBoxes)(moov),
});
if (samplePositions.length === 0) {
continue;
}
return { track, samplePositions };
}
}
return null;
};
exports.findAnyTrackWithSamplePositions = findAnyTrackWithSamplePositions;
const findTrackToSeek = (allTracks, structure) => {
const firstVideoTrack = allTracks.find((t) => t.type === 'video');
const struc = structure.getIsoStructure();
if (!firstVideoTrack) {
return (0, exports.findAnyTrackWithSamplePositions)(allTracks, struc);
}
const moov = (0, traversal_1.getMoovFromFromIsoStructure)(struc);
if (!moov) {
return null;
}
const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, firstVideoTrack.trackId);
if (!trakBox) {
return null;
}
const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
trakBox,
moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
moofComplete: (0, are_samples_complete_1.areSamplesComplete)({
moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
tfraBoxes: (0, traversal_1.getTfraBoxes)(struc.boxes),
}),
trexBoxes: (0, traversal_1.getTrexBoxes)(moov),
});
if (samplePositions.length === 0) {
return (0, exports.findAnyTrackWithSamplePositions)(allTracks, struc);
}
return { track: firstVideoTrack, samplePositions };
};
exports.findTrackToSeek = findTrackToSeek;