move segment file creation to separate pipe

build-default-monitor-config-from-definitions
Moe 2020-04-05 16:00:32 -07:00
parent ff8523fc30
commit 9cd9446800
2 changed files with 47 additions and 41 deletions

View File

@ -672,7 +672,7 @@ module.exports = function(s,config,lang,onFinish){
x.dimensions = e.details.stream_scale_x+'x'+e.details.stream_scale_y;
}
//record - segmenting
x.segment = ' -f segment -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 -segment_list pipe:2 -segment_time '+(60*e.cutoff)+' "'+e.dir+'%Y-%m-%dT%H-%M-%S.'+e.ext+'"';
x.segment = ' -f segment -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 -segment_list pipe:8 -segment_time '+(60*e.cutoff)+' "'+e.dir+'%Y-%m-%dT%H-%M-%S.'+e.ext+'"';
//record - set defaults for extension, video quality
switch(e.ext){
case'mp4':

View File

@ -362,7 +362,7 @@ module.exports = function(s,config,lang){
return items
}
cameraDestroy = function(e,p){
const cameraDestroy = function(e,p){
if(s.group[e.ke]&&s.group[e.ke].activeMonitors[e.id]&&s.group[e.ke].activeMonitors[e.id].spawn !== undefined){
const activeMonitor = s.group[e.ke].activeMonitors[e.id];
const proc = s.group[e.ke].activeMonitors[e.id].spawn;
@ -712,7 +712,7 @@ module.exports = function(s,config,lang){
s.tx({f:'monitor_snapshot',snapshot:e.mon.name,snapshot_format:'plc',mid:e.mid,ke:e.ke},'GRP_'+e.ke)
}
}
var createRecordingDirectory = function(e,callback){
const createRecordingDirectory = function(e,callback){
var directory
if(e.details && e.details.dir && e.details.dir !== '' && config.childNodes.mode !== 'child'){
//addStorage choice
@ -738,14 +738,14 @@ module.exports = function(s,config,lang){
})
}
}
var createTimelapseDirectory = function(e,callback){
const createTimelapseDirectory = function(e,callback){
var directory = s.getTimelapseFrameDirectory(e)
fs.mkdir(directory,function(err){
s.handleFolderError(err)
callback(err,directory)
})
}
var createFileBinDirectory = function(e,callback){
const createFileBinDirectory = function(e,callback){
var directory = s.dir.fileBin + e.ke + '/'
fs.mkdir(directory,function(err){
s.handleFolderError(err)
@ -756,7 +756,7 @@ module.exports = function(s,config,lang){
})
})
}
var createStreamDirectory = function(e,callback){
const createStreamDirectory = function(e,callback){
callback = callback || function(){}
var directory = s.dir.streams + e.ke + '/'
fs.mkdir(directory,function(err){
@ -779,7 +779,7 @@ module.exports = function(s,config,lang){
// }catch(err){
//
// }
var createCameraFolders = function(e,callback){
const createCameraFolders = function(e,callback){
//set the recording directory
var activeMonitor = s.group[e.ke].activeMonitors[e.id]
createStreamDirectory(e,function(err,directory){
@ -824,7 +824,7 @@ module.exports = function(s,config,lang){
}
},60000 * cutoff * 1.3);
}
resetStreamCheck = function(e){
const resetStreamCheck = function(e){
clearTimeout(s.group[e.ke].activeMonitors[e.id].streamChecker)
s.group[e.ke].activeMonitors[e.id].streamChecker = setTimeout(function(){
if(s.group[e.ke].activeMonitors[e.id] && s.group[e.ke].activeMonitors[e.id].isStarted === true){
@ -834,7 +834,7 @@ module.exports = function(s,config,lang){
}
},60000*1);
}
cameraPullJpegStream = function(e){
const cameraPullJpegStream = function(e){
if(!e.details.sfps||e.details.sfps===''){
e.details.sfps = 1
}
@ -939,7 +939,7 @@ module.exports = function(s,config,lang){
}
s.onMonitorDetectorDataOutputAlone = onDetectorJpegOutputAlone
s.onMonitorDetectorDataOutputSecondary = onDetectorJpegOutputSecondary
createCameraFfmpegProcess = function(e){
const createCameraFfmpegProcess = function(e){
//launch ffmpeg (main)
s.tx({
f: 'monitor_starting',
@ -997,7 +997,7 @@ module.exports = function(s,config,lang){
},1000 * 60)
}
}
createCameraStreamHandlers = function(e){
const createCameraStreamHandlers = function(e){
s.group[e.ke].activeMonitors[e.id].spawn.stdio[5].on('data',function(data){
resetStreamCheck(e)
})
@ -1197,7 +1197,41 @@ module.exports = function(s,config,lang){
e.details.stream_channels.forEach(createStreamEmitter)
}
}
cameraFilterFfmpegLog = function(e){
const catchNewSegmentNames = function(e){
var checkLog = function(d,x){return d.indexOf(x)>-1}
s.group[e.ke].activeMonitors[e.id].spawn.stdio[8].on('data',function(d){
d=d.toString();
if(/T[0-9][0-9]-[0-9][0-9]-[0-9][0-9]./.test(d)){
var filename = d.split('.')[0].split(' [')[0].trim()+'.'+e.ext
s.insertCompletedVideo(e,{
file: filename,
events: s.group[e.ke].activeMonitors[e.id].detector_motion_count
},function(err){
s.userLog(e,{type:lang['Video Finished'],msg:{filename:d}})
if(
e.details.detector === '1' &&
s.group[e.ke].activeMonitors[e.id].isStarted === true &&
e.details &&
e.details.detector_record_method === 'del'&&
e.details.detector_delete_motionless_videos === '1'&&
s.group[e.ke].activeMonitors[e.id].detector_motion_count.length === 0
){
if(e.details.loglevel !== 'quiet'){
s.userLog(e,{type:lang['Delete Motionless Video'],msg:filename})
}
s.deleteVideo({
filename : filename,
ke : e.ke,
id : e.id
})
}
s.group[e.ke].activeMonitors[e.id].detector_motion_count = []
})
s.resetRecordingCheck(e)
}
})
}
const cameraFilterFfmpegLog = function(e){
var checkLog = function(d,x){return d.indexOf(x)>-1}
s.group[e.ke].activeMonitors[e.id].spawn.stderr.on('data',function(d){
d=d.toString();
@ -1239,35 +1273,6 @@ module.exports = function(s,config,lang){
case checkLog(d,'No route to host'):
launchMonitorProcesses(e)
break;
case /T[0-9][0-9]-[0-9][0-9]-[0-9][0-9]./.test(d):
var filename = d.split('.')[0].split(' [')[0].trim()+'.'+e.ext
s.insertCompletedVideo(e,{
file: filename,
events: s.group[e.ke].activeMonitors[e.id].detector_motion_count
},function(err){
s.userLog(e,{type:lang['Video Finished'],msg:{filename:d}})
if(
e.details.detector === '1' &&
s.group[e.ke].activeMonitors[e.id].isStarted === true &&
e.details &&
e.details.detector_record_method === 'del'&&
e.details.detector_delete_motionless_videos === '1'&&
s.group[e.ke].activeMonitors[e.id].detector_motion_count.length === 0
){
if(e.details.loglevel !== 'quiet'){
s.userLog(e,{type:lang['Delete Motionless Video'],msg:filename})
}
s.deleteVideo({
filename : filename,
ke : e.ke,
id : e.id
})
}
s.group[e.ke].activeMonitors[e.id].detector_motion_count = []
})
s.resetRecordingCheck(e)
return;
break;
}
s.userLog(e,{type:"FFMPEG STDERR",msg:d})
})
@ -1421,6 +1426,7 @@ module.exports = function(s,config,lang){
e.type === 'h264' ||
e.type === 'local'
){
catchNewSegmentNames(e)
cameraFilterFfmpegLog(e)
}
if(e.coProcessor === true){