@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
145 lines (144 loc) • 5.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeParserState = void 0;
const get_fields_from_callbacks_1 = require("../get-fields-from-callbacks");
const buffer_iterator_1 = require("../iterator/buffer-iterator");
const log_1 = require("../log");
const aac_state_1 = require("./aac-state");
const avc_state_1 = require("./avc/avc-state");
const current_reader_1 = require("./current-reader");
const emitted_fields_1 = require("./emitted-fields");
const flac_state_1 = require("./flac-state");
const images_1 = require("./images");
const iso_state_1 = require("./iso-base-media/iso-state");
const keyframes_1 = require("./keyframes");
const m3u_state_1 = require("./m3u-state");
const webm_1 = require("./matroska/webm");
const mp3_1 = require("./mp3");
const riff_1 = require("./riff");
const sample_callbacks_1 = require("./sample-callbacks");
const slow_duration_fps_1 = require("./samples-observed/slow-duration-fps");
const seek_infinite_loop_1 = require("./seek-infinite-loop");
const structure_1 = require("./structure");
const timings_1 = require("./timings");
const transport_stream_1 = require("./transport-stream/transport-stream");
const video_section_1 = require("./video-section");
const makeParserState = ({ hasAudioTrackHandlers, hasVideoTrackHandlers, controller, onAudioTrack, onVideoTrack, contentLength, logLevel, mode, src, readerInterface, onDiscardedData, selectM3uStreamFn, selectM3uAssociatedPlaylistsFn, m3uPlaylistContext, contentType, name, callbacks, fieldsInReturnValue, mimeType, initialReaderInstance, makeSamplesStartAtZero, prefetchCache, }) => {
let skippedBytes = 0;
const returnValue = {};
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array([]), contentLength);
const increaseSkippedBytes = (bytes) => {
skippedBytes += bytes;
};
const structure = (0, structure_1.structureState)();
const keyframes = (0, keyframes_1.keyframesState)();
const emittedFields = (0, emitted_fields_1.emittedState)();
const samplesObserved = (0, slow_duration_fps_1.samplesObservedState)();
const mp3 = (0, mp3_1.makeMp3State)();
const images = (0, images_1.imagesState)();
const timings = (0, timings_1.timingsState)();
const seekInfiniteLoop = (0, seek_infinite_loop_1.seekInfiniteLoopDetectionState)();
const currentReaderState = (0, current_reader_1.currentReader)(initialReaderInstance);
const avc = (0, avc_state_1.avcState)();
const errored = null;
const discardReadBytes = async (force) => {
const { bytesRemoved, removedData } = iterator.removeBytesRead(force, mode);
if (bytesRemoved) {
log_1.Log.verbose(logLevel, `Freed ${bytesRemoved} bytes`);
}
if (removedData && onDiscardedData) {
await onDiscardedData(removedData);
}
};
const fields = (0, get_fields_from_callbacks_1.getFieldsFromCallback)({
fields: fieldsInReturnValue,
callbacks,
});
const mediaSection = (0, video_section_1.mediaSectionState)();
return {
riff: (0, riff_1.riffSpecificState)({
controller,
logLevel,
readerInterface,
src,
prefetchCache,
contentLength,
}),
transportStream: (0, transport_stream_1.transportStreamState)(),
webm: (0, webm_1.webmState)({
controller,
logLevel,
readerInterface,
src,
prefetchCache,
}),
iso: (0, iso_state_1.isoBaseMediaState)({
contentLength,
controller,
readerInterface,
src,
logLevel,
prefetchCache,
}),
mp3,
aac: (0, aac_state_1.aacState)(),
flac: (0, flac_state_1.flacState)(),
m3u: (0, m3u_state_1.m3uState)(logLevel),
timings,
callbacks: (0, sample_callbacks_1.callbacksState)({
controller,
hasAudioTrackHandlers,
hasVideoTrackHandlers,
fields,
keyframes,
emittedFields,
samplesObserved,
structure,
src,
seekSignal: controller._internals.seekSignal,
logLevel,
}),
getInternalStats: () => {
var _a;
return ({
skippedBytes,
finalCursorOffset: (_a = iterator.counter.getOffset()) !== null && _a !== void 0 ? _a : 0,
});
},
getSkipBytes: () => skippedBytes,
increaseSkippedBytes,
keyframes,
structure,
onAudioTrack,
onVideoTrack,
emittedFields,
fields,
samplesObserved,
contentLength,
images,
mediaSection,
logLevel,
iterator,
controller,
mode,
src,
readerInterface,
discardReadBytes,
selectM3uStreamFn,
selectM3uAssociatedPlaylistsFn,
m3uPlaylistContext,
contentType,
name,
returnValue,
callbackFunctions: callbacks,
fieldsInReturnValue,
mimeType,
errored: errored,
currentReader: currentReaderState,
seekInfiniteLoop,
makeSamplesStartAtZero,
prefetchCache,
avc,
};
};
exports.makeParserState = makeParserState;