homebridge-plugin-eufy-security
Version:
Eufy Security homebridge plugin for video doorbell.
76 lines • 2.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FfmpegProcess = void 0;
const child_process_1 = require("child_process");
class FfmpegProcess {
constructor(cameraName, sessionId, videoProcessor, ffmpegArgs, log, debug, delegate, callback) {
log.debug('Stream command: ' + videoProcessor + ' ' + ffmpegArgs, cameraName, debug);
let started = false;
this.process = child_process_1.spawn(videoProcessor, ffmpegArgs.split(/\s+/), {
env: process.env,
});
if (this.process.stdin) {
this.process.stdin.on('error', (error) => {
if (!error.message.includes('EPIPE')) {
log.error(error.message, cameraName);
}
});
}
if (this.process.stderr) {
this.process.stderr.on('data', (data) => {
if (!started) {
started = true;
if (callback) {
callback();
}
}
if (debug) {
data
.toString()
.split(/\n/)
.forEach((line) => {
if (line && line !== '') {
log.debug(line);
}
});
}
});
}
this.process.on('error', (error) => {
log.error('Failed to start stream: ' + error.message, cameraName);
if (callback) {
callback(new Error('FFmpeg process creation failed'));
}
delegate.stopStream(sessionId);
});
this.process.on('exit', (code, signal) => {
const message = 'FFmpeg exited with code: ' + code + ' and signal: ' + signal;
if (code === null || code === 255) {
if (this.process.killed) {
log.debug(message + ' (Expected)', cameraName, debug);
}
else {
log.error(message + ' (Unexpected)', cameraName);
}
}
else {
log.error(message + ' (Error)', cameraName);
delegate.stopStream(sessionId);
if (!started && callback) {
callback(new Error(message));
}
else {
delegate.controller.forceStopStreamingSession(sessionId);
}
}
});
}
stop() {
this.process.kill('SIGKILL');
}
getStdin() {
return this.process.stdin;
}
}
exports.FfmpegProcess = FfmpegProcess;
//# sourceMappingURL=ffmpeg.js.map