matrix.bottomLeft[1])matrix.bottomLeft[1]=y;
})
matrix.x = matrix.topLeft[0];
matrix.y = matrix.topLeft[1];
matrix.width = matrix.topRight[0] - matrix.topLeft[0]
matrix.height = matrix.bottomLeft[1] - matrix.topLeft[1]
if(matrix.width>mostWidth&&matrix.height>mostHeight){
mostWidth = matrix.width;
mostHeight = matrix.height;
mostWithMotion = matrix;
}
drawMatrices.details.matrices.push(matrix)
})
$.ccio.magnifyStream({
p:mainWindow,
useCanvas:true,
zoomAmount:1,
auto:true,
animate:true,
pageX:((mostWithMotion.width / 2) + mostWithMotion.x) * widthRatio,
pageY:((mostWithMotion.height / 2) + mostWithMotion.y) * heightRatio
})
$.ccio.init('drawMatrices',drawMatrices)
if(d.mon.motionDetectorNextDraw===true){
clearTimeout(d.mon.motionDetectorNextDrawTimeout)
d.mon.motionDetectorNextDrawTimeout=setTimeout(function(){
d.mon.motionDetectorNextDraw = true;
},1000)
d.mon.motionDetectorNextDraw = false;
// console.log({
// p:mainWindow,
// pageX:((matrix.width / 2) + matrix.x) * widthRatio,
// pageY:((matrix.height / 2) + matrix.y) * heightRatio
// })
}
return drawMatrices.details.matrices;
}
if(blenderCanvas.length === 0){
mainWindow.append('')
blenderCanvas = mainWindow.find(".blenderCanvas")
}
blenderCanvas = blenderCanvas[0];
var blenderCanvasContext = blenderCanvas.getContext("2d");
clearInterval(d.mon.motionDetector)
d.mon.motionDetector = setInterval(checkForMotion,2000)
}
img.src=url
})
break;
case'streamURL':
var streamURL
switch(JSON.parse(d.details).stream_type){
case'jpeg':
streamURL=$.ccio.init('location',user)+user.auth_token+'/jpeg/'+d.ke+'/'+d.mid+'/s.jpg'
break;
case'mjpeg':
streamURL=$.ccio.init('location',user)+user.auth_token+'/mjpeg/'+d.ke+'/'+d.mid
break;
case'hls':
streamURL=$.ccio.init('location',user)+user.auth_token+'/hls/'+d.ke+'/'+d.mid+'/s.m3u8'
break;
case'flv':
streamURL=$.ccio.init('location',user)+user.auth_token+'/flv/'+d.ke+'/'+d.mid+'/s.flv'
break;
case'h265':
streamURL=$.ccio.init('location',user)+user.auth_token+'/h265/'+d.ke+'/'+d.mid+'/s.hevc'
break;
case'mp4':
streamURL=$.ccio.init('location',user)+user.auth_token+'/mp4/'+d.ke+'/'+d.mid+'/s.mp4'
break;
case'b64':
streamURL='Websocket'
break;
case'pam':
streamURL='Websocket'
break;
}
return streamURL
break;
case'humanReadMode':
switch(d){
case'idle':
k.mode=lang['Idle']
break;
case'stop':
k.mode=lang['Disabled']
break;
case'record':
k.mode=lang['Record']
break;
case'start':
k.mode=lang['Watch Only']
break;
}
return k.mode
break;
case'monitorInfo':
d.e=$('.glM'+d.mon.mid+user.auth_token);
if(JSON.parse(d.mon.details).vcodec!=='copy'&&d.mon.mode=='record'){
d.e.find('.monitor_not_record_copy').show()
}else{
d.e.find('.monitor_not_record_copy').hide()
}
d.e.find('.monitor_name').text(d.mon.name)
d.e.find('.monitor_mid').text(d.mon.mid)
d.e.find('.monitor_ext').text(d.mon.ext);
d.mode=$.ccio.init('humanReadMode',d.mon.mode,user)
d.e.find('.monitor_mode').text(d.mode)
d.e.find('.monitor_status').text(d.status)
d.e.attr('mode',d.mode)
d.e.find('.lamp').attr('title',d.mode)
break;
case'fullscreen':
if (d.requestFullscreen) {
d.requestFullscreen();
} else if (d.mozRequestFullScreen) {
d.mozRequestFullScreen();
} else if (d.webkitRequestFullscreen) {
d.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
}
break;
case'drawPoints':
d.height=d.stream.height()
d.width=d.stream.width()
if(d.monitorDetails.detector_scale_x===''){d.monitorDetails.detector_scale_x=320}
if(d.monitorDetails.detector_scale_y===''){d.monitorDetails.detector_scale_y=240}
d.widthRatio=d.width/d.monitorDetails.detector_scale_x
d.heightRatio=d.height/d.monitorDetails.detector_scale_y
d.streamObjects.find('.stream-detected-point[name="'+d.details.name+'"]').remove()
d.tmp=''
$.each(d.details.points,function(n,v){
d.tmp+=''
if(v.tag){d.tmp+=''+v.tag+''}
d.tmp+='
'
})
d.streamObjects.append(d.tmp)
break;
case'drawMatrices':
d.height=d.stream.height()
d.width=d.stream.width()
if(!d.details.imgWidth && d.monitorDetails.detector_scale_x===''){d.monitorDetails.detector_scale_x=320}
if(!d.details.imgHeight && d.monitorDetails.detector_scale_y===''){d.monitorDetails.detector_scale_y=240}
d.widthRatio=d.width/d.details.imgWidth || d.monitorDetails.detector_scale_x
d.heightRatio=d.height/d.details.imgHeight || d.monitorDetails.detector_scale_y
d.streamObjects.find('.stream-detected-object[name="'+d.details.name+'"]').remove()
d.tmp=''
$.each(d.details.matrices,function(n,v){
d.tmp+=''
if(v.tag){d.tmp+=''+v.tag+''}
d.tmp+='
'
})
d.streamObjects.append(d.tmp)
break;
case'clearTimers':
if(!d.mid){d.mid=d.id}
if($.ccio.mon[d.ke+d.mid+user.auth_token]){
clearTimeout($.ccio.mon[d.ke+d.mid+user.auth_token]._signal);
clearInterval($.ccio.mon[d.ke+d.mid+user.auth_token].hlsGarbageCollectorTimer)
clearTimeout($.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval);
clearInterval($.ccio.mon[d.ke+d.mid+user.auth_token].signal);
clearInterval($.ccio.mon[d.ke+d.mid+user.auth_token].m3uCheck);
if($.ccio.mon[d.ke+d.mid+user.auth_token].Base64 && $.ccio.mon[d.ke+d.mid+user.auth_token].Base64.connected){
$.ccio.mon[d.ke+d.mid+user.auth_token].Base64.disconnect()
}
if($.ccio.mon[d.ke+d.mid+user.auth_token].Poseidon){
$.ccio.mon[d.ke+d.mid+user.auth_token].Poseidon.stop()
}
}
break;
case'note':
k.o=$.ccio.op().switches
if(k.o&&k.o.notifyHide!==1){
new PNotify(d)
if(user.details.audio_note && user.details.audio_note !== ''){
var audio = new Audio('libs/audio/'+user.details.audio_note);
audio.play()
}
}
break;
case'monGroup':
$.ccio.mon_groups={};
$.each($.ccio.mon,function(n,v,x){
if(typeof v.details==='string'){
k.d=JSON.parse(v.details)
}else{
k.d=v.details
}
try{
k.groups=JSON.parse(k.d.groups)
$.each(k.groups,function(m,b){
if(!$.ccio.mon_groups[b])$.ccio.mon_groups[b]={}
$.ccio.mon_groups[b][v.mid]=v;
})
}catch(er){
}
})
return $.ccio.mon_groups;
break;
case'closeVideo':
var el = $('#monitor_live_'+d.mid+user.auth_token)
var video = el.find('video')
if(video.length === 1){
if(!video[0].paused){
video[0].onerror = function(){}
video[0].pause()
}
video.prop('src','');
video.find('source').remove();
video.remove();
}
break;
case'jpegModeStop':
clearTimeout($.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval);
delete($.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval);
$('#monitor_live_'+d.mid+user.auth_token+' .stream-element').unbind('load')
break;
case'jpegMode':
if(d.watch===1){
k=JSON.parse(d.details);
k.jpegInterval=parseFloat(k.jpegInterval);
if(!k.jpegInterval||k.jpegInterval===''||isNaN(k.jpegInterval)){k.jpegInterval=1}
$.ccio.tm('stream-element',$.ccio.mon[d.ke+d.mid+user.auth_token]);
k.e=$('#monitor_live_'+d.mid+user.auth_token+' .stream-element');
$.ccio.init('jpegModeStop',d,user);
k.run=function(){
k.e.attr('src',$.ccio.init('location',user)+user.auth_token+'/jpeg/'+d.ke+'/'+d.mid+'/s.jpg?time='+(new Date()).getTime())
}
k.e.load(function(){
$.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval=setTimeout(k.run,1000/k.jpegInterval);
}).error(function(){
$.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval=setTimeout(k.run,1000/k.jpegInterval);
})
k.run()
};
break;
case'jpegModeAll':
$.each($.ccio.mon,function(n,v){
$.ccio.init('jpegMode',v,user)
});
break;
case'getLocation':
var l = document.createElement("a");
l.href = d;
return l;
break;
case 'ls'://livestamp all
g={e:jQuery('.livestamp')};
g.e.each(function(){g.v=jQuery(this),g.t=g.v.attr('title');if(!g.t){return};g.v.toggleClass('livestamp livestamped').attr('title',$.ccio.init('t',g.t,user)).livestamp(g.t);})
return g.e
break;
case't'://format time
if(!d){d=new Date();}
return $.ccio.timeObject(d).format('YYYY-MM-DD HH:mm:ss')
break;
case'th'://format time hy
if(!d){d=new Date();}
return $.ccio.timeObject(d).format('YYYY-MM-DDTHH:mm:ss')
break;
case'tf'://time to filename
if(!d){d=new Date();}
return $.ccio.timeObject(d).format('YYYY-MM-DDTHH-mm-ss')
break;
case'fn'://row to filename
return $.ccio.init('tf',d.time,user)+'.'+d.ext
break;
case'filters':
k.tmp='';
$.each(user.details.filters,function(n,v){
k.tmp+=''
});
$('#saved_filters').html(k.tmp)
break;
case'id':
$('.usermail').html(d.mail)
try{k.d=JSON.parse(d.details);}catch(er){k.d=d.details;}
try{user.mon_groups=JSON.parse(k.d.mon_groups);}catch(er){}
if(!user.mon_groups)user.mon_groups={};
$.sM.reDrawMonGroups()
$.each(user,function(n,v){$.sM.e.find('[name="'+n+'"]').val(v).change()})
$.each(k.d,function(n,v){$.sM.e.find('[detail="'+n+'"]').val(v).change()})
$.gR.drawList();
$.ccio.pm('link-set',k.d.links,null,user)
break;
case'jsontoblock'://draw json as block
if(d instanceof Object){
$.each(d,function(n,v){
k.tmp+='';
k.tmp+=''+n+' : '+$.ccio.init('jsontoblock',v,user);
k.tmp+='
';
})
}else{
k.tmp+='';
k.tmp+=d;
k.tmp+='';
}
break;
case'url':
var porty
if(d.port && d.port !== ''){
porty = ':' + d.port
}else{
porty = ''
}
d.url = d.protocol + '://' + d.host + porty
return d.url
break;
case'data-video':
if(!d){
$('[data-mid]').each(function(n,v){
v=$(v);v.attr('mid',v.attr('data-mid'))
});
$('[data-ke]').each(function(n,v){
v=$(v);v.attr('ke',v.attr('data-ke'))
});
$('[data-file]').each(function(n,v){
v=$(v);v.attr('file',v.attr('data-file'))
});
$('[data-status]').each(function(n,v){
v=$(v);v.attr('status',v.attr('data-status'))
});
$('[data-auth]').each(function(n,v){
v=$(v);v.attr('auth',v.attr('data-auth'))
});
}else{
$('[data-ke="'+d.ke+'"][data-mid="'+d.mid+'"][data-file="'+d.filename+'"][auth="'+user.auth_token+'"]').attr('mid',d.mid).attr('ke',d.ke).attr('status',d.status).attr('file',d.filename).attr('auth',user.auth_token);
}
break;
case'signal':
d.mon=$.ccio.mon[d.ke+d.id+user.auth_token];d.e=$('#monitor_live_'+d.id+user.auth_token+' .signal').addClass('btn-success').removeClass('btn-danger');d.signal=parseFloat(JSON.parse(d.mon.details).signal_check);
if(!d.signal||d.signal==NaN){d.signal=10;};d.signal=d.signal*1000*60;
clearTimeout($.ccio.mon[d.ke+d.id+user.auth_token]._signal);$.ccio.mon[d.ke+d.id+user.auth_token]._signal=setTimeout(function(){d.e.addClass('btn-danger').removeClass('btn-success');},d.signal)
break;
case'signal-check':
try{
d.mon=$.ccio.mon[d.ke+d.id+user.auth_token];d.p=$('#monitor_live_'+d.id+user.auth_token);
try{d.d=JSON.parse(d.mon.details)}catch(er){d.d=d.mon.details;}
d.check={c:0};
d.fn=function(){
if(!d.speed){d.speed=1000}
switch(d.d.stream_type){
case'b64':case'h265':
d.p.resize()
break;
case'hls':case'flv':case'mp4':
if(d.p.find('video')[0].paused){
if(d.d.signal_check_log==1){
d.log={type:'Stream Check',msg:lang.clientStreamFailedattemptingReconnect}
$.ccio.tm(4,d,'#logs,.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"] .logs')
}
$.ccio.cx({f:'monitor',ff:'watch_on',id:d.id},user);
}else{
if(d.d.signal_check_log==1){
d.log={type:'Stream Check',msg:'Success'}
$.ccio.tm(4,d,'#logs,.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"] .logs')
}
$.ccio.init('signal',d,user);
}
break;
default:
if($.ccio.op().jpeg_on===true){return}
$.ccio.snapshot(d,function(url){
d.check.f=url;
setTimeout(function(){
$.ccio.snapshot(d,function(url){
if(d.check.f===url){
if(d.check.c<3){
++d.check.c;
setTimeout(function(){
d.fn();
},d.speed)
}else{
if(d.d.signal_check_log==1){
d.log={type:'Stream Check',msg:'Client side ctream check failed, attempting reconnect.'}
$.ccio.tm(4,d,'#logs,.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"] .logs')
}
delete(d.check)
$.ccio.cx({f:'monitor',ff:'watch_on',id:d.id},user);
}
}else{
if(d.d.signal_check_log==1){
d.log={type:'Stream Check',msg:'Success'}
$.ccio.tm(4,d,'#logs,.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"] .logs')
}
delete(d.check)
$.ccio.init('signal',d,user);
}
});
},d.speed)
});
break;
}
}
d.fn();
}catch(er){
er=er.stack;
d.in=function(x){return er.indexOf(x)>-1}
switch(true){
case d.in("The HTMLImageElement provided is in the 'broken' state."):
delete(d.check)
$.ccio.cx({f:'monitor',ff:'watch_on',id:d.id},user);
break;
default:
$.ccio.log('signal-check',er)
break;
}
clearInterval($.ccio.mon[d.ke+d.id+user.auth_token].signal);delete($.ccio.mon[d.ke+d.id+user.auth_token].signal);
}
break;
}
return k.tmp;
}