Updated Signal (Stream) Check for Live Grid

fix-timezone-by-ui
Moe 2022-10-16 19:27:52 -07:00
parent f1fc2e6141
commit 5e839a78f7
3 changed files with 127 additions and 109 deletions

View File

@ -201,7 +201,11 @@ function formattedTimeForFilename(time,utcConvert,timeFormat){
if(utcConvert)theMoment = theMoment.clone().utc()
return theMoment.format(timeFormat ? timeFormat : 'YYYY-MM-DDTHH:mm:ss')
}
function setPromiseTimeout(timeoutAmount){
return new Promise((resolve) => {
setTimeout(resolve,timeoutAmount)
})
}
function checkCorrectPathEnding(x){
var length=x.length
if(x.charAt(length-1)!=='/'){

View File

@ -540,7 +540,7 @@ function initiateLiveGridPlayer(monitor,subStreamChannel){
loadedPlayer.signal = setInterval(function(){
signalCheckLiveStream({
mid: monitorId,
checkSpeed: 1000,
checkSpeed: 3000,
})
},signalCheckInterval);
}
@ -736,6 +736,7 @@ function signalCheckLiveStream(options){
var monitorDetails = monitorConfig.details
var checkCount = 0
var base64Data = null;
var base64Length = 0;
var checkSpeed = options.checkSpeed || 1000
var subStreamChannel = monitorConfig.subStreamChannel
var streamType = subStreamChannel ? monitorDetails.substream ? monitorDetails.substream.output.stream_type : 'hls' : monitorDetails.stream_type
@ -760,50 +761,51 @@ function signalCheckLiveStream(options){
})
}
}
function executeCheck(){
switch(streamType){
case'b64':
monitorItem.resize()
break;
case'hls':case'flv':case'mp4':
if(monitorItem.find('video')[0].paused){
failedStreamCheck()
}else{
succeededStreamCheck()
}
break;
default:
if(dashboardOptions().jpeg_on === true){return}
getSnapshot({
monitor: loadedMonitors[monitorId],
},function(url){
base64Data = url;
setTimeout(function(){
getSnapshot({
monitor: loadedMonitors[monitorId],
},function(url){
if(base64Data === url){
if(checkCount < 3){
++checkCount;
setTimeout(function(){
executeCheck();
},checkSpeed)
}else{
failedStreamCheck()
}
}else{
succeededStreamCheck()
}
});
},checkSpeed)
});
break;
async function executeCheck(){
try{
switch(streamType){
case'b64':
monitorItem.resize()
break;
// case'hls':case'flv':case'mp4':
// if(monitorItem.find('video')[0].paused){
// failedStreamCheck()
// }else{
// succeededStreamCheck()
// }
// break;
default:
if(dashboardOptions().jpeg_on === true){return}
var firstSnapshot = await getSnapshot({
monitor: loadedMonitors[monitorId],
});
// console.log(firstSnapshot)
base64Data = firstSnapshot.url
base64Length = firstSnapshot.fileSize
await setPromiseTimeout(checkSpeed)
var secondSnapshot = await getSnapshot({
monitor: loadedMonitors[monitorId],
});
// console.log(secondSnapshot)
// console.log('----')
var secondSnapLength = secondSnapshot.fileSize
var hasFailed = base64Data === secondSnapshot.url || base64Length === secondSnapLength;
if(hasFailed){
failedStreamCheck()
}else{
succeededStreamCheck()
}
break;
}
$.each(onSignalCheckLiveStreamExtensions,function(n,extender){
extender(streamType,monitorItem)
})
}catch(err){
console.log('signal check ERROR', err)
failedStreamCheck()
}
$.each(onSignalCheckLiveStreamExtensions,function(n,extender){
extender(streamType,monitorItem)
})
}
executeCheck();
executeCheck()
}catch(err){
console.log(err)
var errorStack = err.stack;

View File

@ -51,73 +51,85 @@ function setCosmeticMonitorInfo(monitorConfig){
}
function getSnapshot(options,cb){
var image_data
var url
var monitor = options.mon || options.monitor || options
var targetElement = $(options.targetElement || `[data-mid="${monitor.mid}"].monitor_item .stream-element`)
var details = safeJsonParse(monitor.details)
var streamType = details.stream_type;
if(window.jpegModeOn !== true){
function completeAction(image_data,width,height){
var len = image_data.length
var arraybuffer = new Uint8Array( len )
for (var i = 0; i < len; i++) {
arraybuffer[i] = image_data.charCodeAt(i)
}
try {
var blob = new Blob([arraybuffer], {type: 'application/octet-stream'})
} catch (e) {
var bb = new (window.WebKitBlobBuilder || window.MozBlobBuilder)
bb.append(arraybuffer);
var blob = bb.getBlob('application/octet-stream');
}
url = (window.URL || window.webkitURL).createObjectURL(blob)
cb(url,image_data,width,height)
try{
setTimeout(function(){
URL.revokeObjectURL(url)
},10000)
}catch(er){}
return new Promise((resolve,reject) => {
function endAction(url,image_data,width,height,fileSize){
if(cb)cb(url,image_data,width,height,fileSize);
resolve({
url,
image_data,
width,
height,
fileSize
});
}
switch(streamType){
case'hls':
case'flv':
case'mp4':
getVideoSnapshot(targetElement[0],function(base64,video_data,width,height){
completeAction(video_data,width,height)
})
break;
case'mjpeg':
$('#temp').html('<canvas></canvas>')
var c = $('#temp canvas')[0]
var img = $('img',targetElement.contents())[0]
c.width = img.width
c.height = img.height
var ctx = c.getContext('2d')
ctx.drawImage(img, 0, 0,c.width,c.height)
completeAction(atob(c.toDataURL('image/jpeg').split(',')[1]),c.width,c.height)
break;
case'b64':
var c = targetElement[0]
var ctx = c.getContext('2d')
completeAction(atob(c.toDataURL('image/jpeg').split(',')[1]),c.width,c.height)
break;
case'jpeg':
url = targetElement.attr('src')
image_data = new Image()
image_data.src = url
cb(url,image_data,image_data.width,image_data.height)
break;
var image_data
var url
var monitor = options.mon || options.monitor || options
var targetElement = $(options.targetElement || `[data-mid="${monitor.mid}"].monitor_item .stream-element`)
var details = safeJsonParse(monitor.details)
var streamType = details.stream_type;
if(window.jpegModeOn !== true){
function completeAction(image_data,width,height){
var len = image_data.length
var arraybuffer = new Uint8Array( len )
for (var i = 0; i < len; i++) {
arraybuffer[i] = image_data.charCodeAt(i)
}
try {
var blob = new Blob([arraybuffer], {type: 'application/octet-stream'})
} catch (e) {
var bb = new (window.WebKitBlobBuilder || window.MozBlobBuilder)
bb.append(arraybuffer);
var blob = bb.getBlob('application/octet-stream');
}
url = (window.URL || window.webkitURL).createObjectURL(blob)
endAction(url,image_data,width,height,arraybuffer.length)
try{
setTimeout(function(){
URL.revokeObjectURL(url)
},10000)
}catch(er){}
}
switch(streamType){
case'hls':
case'flv':
case'mp4':
getVideoSnapshot(targetElement[0],function(base64,video_data,width,height){
completeAction(video_data,width,height)
})
break;
case'mjpeg':
$('#temp').html('<canvas></canvas>')
var c = $('#temp canvas')[0]
var img = $('img',targetElement.contents())[0]
c.width = img.width
c.height = img.height
var ctx = c.getContext('2d')
ctx.drawImage(img, 0, 0,c.width,c.height)
completeAction(atob(c.toDataURL('image/jpeg').split(',')[1]),c.width,c.height)
break;
case'b64':
var c = targetElement[0]
var ctx = c.getContext('2d')
completeAction(atob(c.toDataURL('image/jpeg').split(',')[1]),c.width,c.height)
break;
case'jpeg':
url = targetElement.attr('src')
image_data = new Image()
image_data.src = url
endAction(url,image_data,image_data.width,image_data.height,0)
break;
}
$.each(onGetSnapshotByStreamExtensions,function(n,extender){
extender(streamType,targetElement,completeAction,cb)
})
}else{
url = targetElement.attr('src')
image_data = new Image()
image_data.src = url
endAction(url,image_data,image_data.width,image_data.height,0)
}
$.each(onGetSnapshotByStreamExtensions,function(n,extender){
extender(streamType,targetElement,completeAction,cb)
})
}else{
url = targetElement.attr('src')
image_data = new Image()
image_data.src = url
cb(url,image_data,image_data.width,image_data.height)
}
})
}
function getVideoSnapshot(videoElement,cb){
var image_data