Shinobi/libs/cameraThread/singleCamera.js

97 lines
2.7 KiB
JavaScript
Raw Normal View History

2019-12-05 07:25:13 +00:00
const fs = require('fs')
const spawn = require('child_process').spawn
process.send = process.send || function () {};
// [CTRL] + [C] = exit
process.on('SIGINT', function() {
if(cameraProcess && cameraProcess.kill)cameraProcess.kill(0)
});
process.on('exit', (code) => {
if(cameraProcess && cameraProcess.kill)cameraProcess.kill(0)
2019-12-05 07:25:13 +00:00
});
if(!process.argv[2] || !process.argv[3]){
return writeToStderr('Missing FFMPEG Command String or no command operator')
}
var jsonData = JSON.parse(fs.readFileSync(process.argv[3],'utf8'))
const ffmpegAbsolutePath = process.argv[2].trim()
const ffmpegCommandString = jsonData.cmd
const rawMonitorConfig = jsonData.rawMonitorConfig
2019-12-05 07:25:13 +00:00
const stdioPipes = jsonData.pipes || []
var newPipes = []
var stdioWriters = [];
2019-12-05 12:41:36 +00:00
var writeToStderr = function(text){
try{
stdioWriters[2].write(Buffer.from(`${text}`, 'utf8' ))
// stdioWriters[2].write(Buffer.from(`${new Error('writeToStderr').stack}`, 'utf8' ))
}catch(err){
2019-12-11 09:39:40 +00:00
// fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8')
}
}
process.on('uncaughtException', function (err) {
writeToStderr('Uncaught Exception occured!');
writeToStderr(err.stack);
});
2019-12-05 07:25:13 +00:00
for(var i=0; i < stdioPipes; i++){
switch(i){
case 0:
newPipes[i] = 0
break;
case 1:
newPipes[i] = 1
break;
case 2:
newPipes[i] = 2
break;
2019-12-05 07:25:13 +00:00
case 3:
stdioWriters[i] = fs.createWriteStream(null, {fd: i, end:false});
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
newPipes[i] = 'pipe'
}else{
newPipes[i] = stdioWriters[i]
}
2019-12-05 07:25:13 +00:00
break;
case 5:
stdioWriters[i] = fs.createWriteStream(null, {fd: i, end:false});
newPipes[i] = 'pipe'
break;
2019-12-05 07:25:13 +00:00
default:
stdioWriters[i] = fs.createWriteStream(null, {fd: i, end:false});
newPipes[i] = stdioWriters[i]
2019-12-05 07:25:13 +00:00
break;
}
}
stdioWriters.forEach((writer)=>{
writer.on('error', (err) => {
writeToStderr(err.stack);
});
})
writeToStderr(JSON.stringify(ffmpegCommandString))
2019-12-05 07:25:13 +00:00
var cameraProcess = spawn(ffmpegAbsolutePath,ffmpegCommandString,{detached: true,stdio:newPipes})
2019-12-05 14:12:29 +00:00
cameraProcess.on('close',()=>{
writeToStderr('Process Closed')
stdioWriters.forEach((writer)=>{
writer.end()
})
2019-12-05 14:12:29 +00:00
process.exit();
})
cameraProcess.stdio[5].on('data',(data)=>{
stdioWriters[5].write(data)
})
2019-12-08 08:00:56 +00:00
writeToStderr('Thread Opening')
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
try{
const attachPamDetector = require(__dirname + '/detector.js')(jsonData,stdioWriters[3])
attachPamDetector(cameraProcess,(err)=>{
writeToStderr(err)
})
}catch(err){
writeToStderr(err.stack)
}
}