parent
3531e006f1
commit
0637e32d38
|
@ -15,8 +15,13 @@ module.exports = function(jsonData,pamDiffResponder){
|
||||||
var pamDiff
|
var pamDiff
|
||||||
var p2p
|
var p2p
|
||||||
var writeToStderr = function(text){
|
var writeToStderr = function(text){
|
||||||
|
try{
|
||||||
|
stdioWriters[2].write(Buffer.from(`${text}`, 'utf8' ))
|
||||||
|
// stdioWriters[2].write(Buffer.from(`${new Error('writeToStderr').stack}`, 'utf8' ))
|
||||||
|
}catch(err){
|
||||||
fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8')
|
fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
createPamDiffEngine = function(){
|
createPamDiffEngine = function(){
|
||||||
var width,
|
var width,
|
||||||
height,
|
height,
|
||||||
|
@ -172,7 +177,7 @@ module.exports = function(jsonData,pamDiffResponder){
|
||||||
checkTriggerThreshold(region, detectorObject, function(err2) {
|
checkTriggerThreshold(region, detectorObject, function(err2) {
|
||||||
if(!err1 && ! err2){
|
if(!err1 && ! err2){
|
||||||
detectorObject.doObjectDetection = (jsonData.globalInfo.isAtleatOneDetectorPluginConnected && jsonData.rawMonitorConfig.details.detector_use_detect_object === '1')
|
detectorObject.doObjectDetection = (jsonData.globalInfo.isAtleatOneDetectorPluginConnected && jsonData.rawMonitorConfig.details.detector_use_detect_object === '1')
|
||||||
|
pamDiffResponder.write(Buffer.from(JSON.stringify(detectorObject)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -403,12 +408,19 @@ module.exports = function(jsonData,pamDiffResponder){
|
||||||
return trigger
|
return trigger
|
||||||
}
|
}
|
||||||
|
|
||||||
return function(cameraProcess){
|
return function(cameraProcess,fallback){
|
||||||
if(jsonData.rawMonitorConfig.details.detector === '1' && jsonData.rawMonitorConfig.coProcessor === false){
|
if(jsonData.rawMonitorConfig.details.detector === '1' && jsonData.rawMonitorConfig.coProcessor === false){
|
||||||
//frames from motion detect
|
//frames from motion detect
|
||||||
if(jsonData.rawMonitorConfig.details.detector_pam === '1'){
|
if(jsonData.rawMonitorConfig.details.detector_pam === '1'){
|
||||||
createPamDiffEngine()
|
createPamDiffEngine()
|
||||||
cameraProcess.stdio[3].pipe(p2p).pipe(pamDiff)
|
p2p.pipe(pamDiff)
|
||||||
|
cameraProcess.stdio[3].on('data',(data)=>{
|
||||||
|
try{
|
||||||
|
p2p.write(data)
|
||||||
|
}catch(err){
|
||||||
|
fallback(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
|
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const spawn = require('child_process').spawn
|
const spawn = require('child_process').spawn
|
||||||
try{
|
|
||||||
fs.unlinkSync('/home/Shinobi/test.log')
|
|
||||||
}catch(err){
|
|
||||||
|
|
||||||
}
|
|
||||||
process.send = process.send || function () {};
|
process.send = process.send || function () {};
|
||||||
// [CTRL] + [C] = exit
|
// [CTRL] + [C] = exit
|
||||||
process.on('SIGINT', function() {
|
process.on('SIGINT', function() {
|
||||||
|
@ -24,11 +19,11 @@ var newPipes = []
|
||||||
var stdioWriters = [];
|
var stdioWriters = [];
|
||||||
|
|
||||||
var writeToStderr = function(text){
|
var writeToStderr = function(text){
|
||||||
if(!stdioWriters[2]){
|
try{
|
||||||
fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8')
|
|
||||||
}else{
|
|
||||||
stdioWriters[2].write(Buffer.from(`${text}`, 'utf8' ))
|
stdioWriters[2].write(Buffer.from(`${text}`, 'utf8' ))
|
||||||
// stdioWriters[2].write(Buffer.from(`${new Error('writeToStderr').stack}`, 'utf8' ))
|
// stdioWriters[2].write(Buffer.from(`${new Error('writeToStderr').stack}`, 'utf8' ))
|
||||||
|
}catch(err){
|
||||||
|
fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
process.on('uncaughtException', function (err) {
|
process.on('uncaughtException', function (err) {
|
||||||
|
@ -38,6 +33,15 @@ process.on('uncaughtException', function (err) {
|
||||||
|
|
||||||
for(var i=0; i < stdioPipes; i++){
|
for(var i=0; i < stdioPipes; i++){
|
||||||
switch(i){
|
switch(i){
|
||||||
|
case 0:
|
||||||
|
newPipes[i] = 0
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
newPipes[i] = 1
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
newPipes[i] = 2
|
||||||
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
stdioWriters[i] = fs.createWriteStream(null, {fd: i});
|
stdioWriters[i] = fs.createWriteStream(null, {fd: i});
|
||||||
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
|
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
|
||||||
|
@ -52,18 +56,30 @@ for(var i=0; i < stdioPipes; i++){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stdioWriters.forEach((writer)=>{
|
||||||
|
writer.on('error', (err) => {
|
||||||
|
writeToStderr(err.stack);
|
||||||
|
});
|
||||||
|
})
|
||||||
var cameraProcess = spawn(ffmpegAbsolutePath,ffmpegCommandString,{detached: true,stdio:newPipes})
|
var cameraProcess = spawn(ffmpegAbsolutePath,ffmpegCommandString,{detached: true,stdio:newPipes})
|
||||||
cameraProcess.on('close',()=>{
|
cameraProcess.on('close',()=>{
|
||||||
|
writeToStderr('Process Closed')
|
||||||
|
stdioWriters.forEach((writer)=>{
|
||||||
|
writer.end()
|
||||||
|
})
|
||||||
process.exit();
|
process.exit();
|
||||||
})
|
})
|
||||||
writeToStderr('Thread Opening')
|
writeToStderr('Thread Opening')
|
||||||
|
writeToStderr(JSON.stringify(rawMonitorConfig))
|
||||||
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
|
if(rawMonitorConfig.details.detector === '1' && rawMonitorConfig.details.detector_pam === '1'){
|
||||||
try{
|
try{
|
||||||
const attachPamDetector = require(__dirname + '/detector.js')(jsonData,stdioWriters[3])
|
const attachPamDetector = require(__dirname + '/detector.js')(jsonData,stdioWriters[3])
|
||||||
attachPamDetector(cameraProcess)
|
attachPamDetector(cameraProcess,(err)=>{
|
||||||
|
writeToStderr(err)
|
||||||
|
})
|
||||||
}catch(err){
|
}catch(err){
|
||||||
writeToStderr(err.stack)
|
writeToStderr(err.stack)
|
||||||
}
|
}
|
||||||
|
|
|
@ -357,7 +357,6 @@ module.exports = function(s,config,lang){
|
||||||
ke : e.ke,
|
ke : e.ke,
|
||||||
mid : e.id
|
mid : e.id
|
||||||
},e.ke)
|
},e.ke)
|
||||||
s.group[e.ke].activeMonitors[e.id].spawn.stdio[3].unpipe();
|
|
||||||
// if(s.group[e.ke].activeMonitors[e.id].p2pStream){s.group[e.ke].activeMonitors[e.id].p2pStream.unpipe();}
|
// if(s.group[e.ke].activeMonitors[e.id].p2pStream){s.group[e.ke].activeMonitors[e.id].p2pStream.unpipe();}
|
||||||
if(s.group[e.ke].activeMonitors[e.id].p2p){s.group[e.ke].activeMonitors[e.id].p2p.unpipe();}
|
if(s.group[e.ke].activeMonitors[e.id].p2p){s.group[e.ke].activeMonitors[e.id].p2p.unpipe();}
|
||||||
delete(s.group[e.ke].activeMonitors[e.id].p2pStream)
|
delete(s.group[e.ke].activeMonitors[e.id].p2pStream)
|
||||||
|
@ -404,15 +403,21 @@ module.exports = function(s,config,lang){
|
||||||
}else{
|
}else{
|
||||||
s.coSpawnClose(e)
|
s.coSpawnClose(e)
|
||||||
if(!x||x===1){return};
|
if(!x||x===1){return};
|
||||||
p=x.pid;
|
p = x.pid;
|
||||||
if(s.group[e.ke].rawMonitorConfigurations[e.id].type===('dashcam'||'socket'||'jpeg'||'pipe')){
|
if(s.group[e.ke].rawMonitorConfigurations[e.id].type===('dashcam'||'socket'||'jpeg'||'pipe')){
|
||||||
x.stdin.pause();setTimeout(function(){x.kill('SIGTERM');},500)
|
x.stdin.pause()
|
||||||
|
setTimeout(function(){
|
||||||
|
x.kill('SIGTERM')
|
||||||
|
},500)
|
||||||
}else{
|
}else{
|
||||||
try{
|
try{
|
||||||
x.stdin.setEncoding('utf8');x.stdin.write('q');
|
x.stdin.setEncoding('utf8')
|
||||||
|
x.stdin.write('q')
|
||||||
}catch(er){}
|
}catch(er){}
|
||||||
}
|
}
|
||||||
setTimeout(function(){exec('kill -9 '+p,{detached: true})},1000)
|
setTimeout(function(){
|
||||||
|
exec('kill -9 '+p,{detached: true})
|
||||||
|
},1000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -662,7 +667,7 @@ module.exports = function(s,config,lang){
|
||||||
if(!options)options = {}
|
if(!options)options = {}
|
||||||
s.checkDetails(e)
|
s.checkDetails(e)
|
||||||
if(config.doSnapshot === true){
|
if(config.doSnapshot === true){
|
||||||
if(s.group[e.ke] && s.group[e.ke].rawMonitorConfigurations && s.group[e.ke].rawMonitorConfigurations[e.mid].mode !== 'stop'){
|
if(s.group[e.ke] && s.group[e.ke].rawMonitorConfigurations && s.group[e.ke].rawMonitorConfigurations[e.mid] && s.group[e.ke].rawMonitorConfigurations[e.mid].mode !== 'stop'){
|
||||||
var pathDir = s.dir.streams+e.ke+'/'+e.mid+'/'
|
var pathDir = s.dir.streams+e.ke+'/'+e.mid+'/'
|
||||||
s.getRawSnapshotFromMonitor(s.group[e.ke].rawMonitorConfigurations[e.mid],Object.assign({
|
s.getRawSnapshotFromMonitor(s.group[e.ke].rawMonitorConfigurations[e.mid],Object.assign({
|
||||||
flags: '-s 200x200'
|
flags: '-s 200x200'
|
||||||
|
@ -747,6 +752,11 @@ module.exports = function(s,config,lang){
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
fs.unlinkSync('/home/Shinobi/test.log')
|
||||||
|
}catch(err){
|
||||||
|
|
||||||
}
|
}
|
||||||
var createCameraFolders = function(e,callback){
|
var createCameraFolders = function(e,callback){
|
||||||
//set the recording directory
|
//set the recording directory
|
||||||
|
@ -1064,7 +1074,7 @@ module.exports = function(s,config,lang){
|
||||||
var frameToStreamPrimary
|
var frameToStreamPrimary
|
||||||
switch(e.details.stream_type){
|
switch(e.details.stream_type){
|
||||||
case'mp4':
|
case'mp4':
|
||||||
// delete(s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'])
|
delete(s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'])
|
||||||
if(!s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'])s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'] = new Mp4Frag()
|
if(!s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'])s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'] = new Mp4Frag()
|
||||||
s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'].on('error',function(error){
|
s.group[e.ke].activeMonitors[e.id].mp4frag['MAIN'].on('error',function(error){
|
||||||
s.userLog(e,{type:lang['Mp4Frag'],msg:{error:error}})
|
s.userLog(e,{type:lang['Mp4Frag'],msg:{error:error}})
|
||||||
|
@ -1125,6 +1135,7 @@ module.exports = function(s,config,lang){
|
||||||
var frameToStreamAdded
|
var frameToStreamAdded
|
||||||
switch(channel.stream_type){
|
switch(channel.stream_type){
|
||||||
case'mp4':
|
case'mp4':
|
||||||
|
delete(s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber])
|
||||||
if(!s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber])s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber] = new Mp4Frag();
|
if(!s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber])s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber] = new Mp4Frag();
|
||||||
s.group[e.ke].activeMonitors[e.id].spawn.stdio[pipeNumber].pipe(s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber])
|
s.group[e.ke].activeMonitors[e.id].spawn.stdio[pipeNumber].pipe(s.group[e.ke].activeMonitors[e.id].mp4frag[pipeNumber])
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue