Add .gitignore to exclude all node packages and lock files
This commit is contained in:
Generated
Vendored
+78
@@ -0,0 +1,78 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.createVideoEncoder = void 0;
|
||||
const media_parser_1 = require("@remotion/media-parser");
|
||||
const convert_to_correct_videoframe_1 = require("./convert-to-correct-videoframe");
|
||||
const io_synchronizer_1 = require("./io-manager/io-synchronizer");
|
||||
const log_1 = require("./log");
|
||||
const createVideoEncoder = ({ onChunk, onError, controller, config, logLevel, outputCodec, keyframeInterval, }) => {
|
||||
if (controller._internals._mediaParserController._internals.signal.aborted) {
|
||||
throw new media_parser_1.MediaParserAbortError('Not creating video encoder, already aborted');
|
||||
}
|
||||
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)({
|
||||
logLevel,
|
||||
label: 'Video encoder',
|
||||
controller,
|
||||
});
|
||||
const encoder = new VideoEncoder({
|
||||
error(error) {
|
||||
onError(error);
|
||||
},
|
||||
async output(chunk, metadata) {
|
||||
const timestamp = chunk.timestamp + (chunk.duration ?? 0);
|
||||
try {
|
||||
await onChunk(chunk, metadata ?? null);
|
||||
}
|
||||
catch (err) {
|
||||
onError(err);
|
||||
}
|
||||
ioSynchronizer.onOutput(timestamp);
|
||||
},
|
||||
});
|
||||
const close = () => {
|
||||
controller._internals._mediaParserController._internals.signal.removeEventListener('abort',
|
||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||
onAbort);
|
||||
if (encoder.state === 'closed') {
|
||||
return;
|
||||
}
|
||||
encoder.close();
|
||||
};
|
||||
const onAbort = () => {
|
||||
close();
|
||||
};
|
||||
controller._internals._mediaParserController._internals.signal.addEventListener('abort', onAbort);
|
||||
log_1.Log.verbose(logLevel, 'Configuring video encoder', config);
|
||||
encoder.configure(config);
|
||||
let framesProcessed = 0;
|
||||
const encodeFrame = (frame) => {
|
||||
if (encoder.state === 'closed') {
|
||||
return;
|
||||
}
|
||||
const keyFrame = framesProcessed % keyframeInterval === 0;
|
||||
encoder.encode((0, convert_to_correct_videoframe_1.convertToCorrectVideoFrame)({ videoFrame: frame, outputCodec }), {
|
||||
keyFrame,
|
||||
// @ts-expect-error
|
||||
vp9: {
|
||||
quantizer: 36,
|
||||
},
|
||||
});
|
||||
ioSynchronizer.inputItem(frame.timestamp);
|
||||
framesProcessed++;
|
||||
};
|
||||
return {
|
||||
encode: (frame) => {
|
||||
encodeFrame(frame);
|
||||
},
|
||||
waitForFinish: async () => {
|
||||
await encoder.flush();
|
||||
await ioSynchronizer.waitForQueueSize(0);
|
||||
},
|
||||
close,
|
||||
flush: async () => {
|
||||
await encoder.flush();
|
||||
},
|
||||
ioSynchronizer,
|
||||
};
|
||||
};
|
||||
exports.createVideoEncoder = createVideoEncoder;
|
||||
Reference in New Issue
Block a user