From 344fa858c912db367702679992718471c9218b16 Mon Sep 17 00:00:00 2001 From: Moe <github@m03.ca> Date: Thu, 30 Jun 2022 18:07:40 -0700 Subject: [PATCH] Remove HLS List Size in favor of Buffer Time from Event monitorConfig.details.detector_buffer_hls_list_size is now deprecated. It will be automatically calculated based on the Buffer Time from Event that is provided. --- definitions/base.js | 20 +++++++++----------- languages/en_CA.json | 2 ++ libs/events/utils.js | 2 +- libs/ffmpeg/builders.js | 6 +++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/definitions/base.js b/definitions/base.js index 30bcdac4..f0dc6ed6 100644 --- a/definitions/base.js +++ b/definitions/base.js @@ -3688,6 +3688,12 @@ module.exports = function(s,config,lang){ isFormGroupGroup: true, "section-class": "h_det_input h_det_1", "info": [ + { + "name": "detail=detector_buffer_seconds_before", + "field": lang['Buffer Time from Event'], + "description": lang["fieldTextBuffetTimeFromEvent"], + "default": "5", + }, { "name": "detail=detector_buffer_vcodec", "field": lang['HLS Video Encoder'], @@ -3792,14 +3798,6 @@ module.exports = function(s,config,lang){ "example": "", "possible": "" }, - { - "name": "detail=detector_buffer_hls_list_size", - "field": lang['HLS List Size'], - "description": lang["fieldTextDetectorBufferHlsListSize"], - "default": "10", - "example": "", - "possible": "" - }, { "name": "detail=detector_buffer_start_number", "field": lang['HLS Start Number'], @@ -3820,9 +3818,9 @@ module.exports = function(s,config,lang){ }, { "field": lang['Buffer Preview'], - id: "monEditBufferPreview", "fieldType": "div", - "style": "width:100%;height:300px;background:#eceaea;border-radius:5px;color:#333;font-family:monospace" + // style: `width:100%;background:#eceaea;border-radius:5px;color:#333;font-family:monospace`, + divContent: `<pre><code id="monEditBufferPreview"></code></pre>` }, ] }, @@ -7716,7 +7714,7 @@ module.exports = function(s,config,lang){ "bars": 3, "color0": "info", "title0": lang["Video Share"], - "color1": "success", + "color1": "danger", "title1": lang["Timelapse Frames Share"], "color2": "warning", "title2": lang["FileBin Share"], diff --git a/languages/en_CA.json b/languages/en_CA.json index 36698da5..1f3cd263 100644 --- a/languages/en_CA.json +++ b/languages/en_CA.json @@ -1401,6 +1401,8 @@ "MQTT Inbound": "MQTT Inbound", "MQTT Outbound": "MQTT Outbound", "MQTT Client": "MQTT Client", + "Buffer Time from Event": "Buffer Time from Event", + "fieldTextBufferTimeFromEvent": "The amount of seconds to record before the trigger happened. If this is consistently inaccutrate you will need to look at the <a target='_blank' href='https://hub.shinobi.video/articles/view/DmWIID78VtvEfnf'>optimization guide</a> or force encoding on the server.", "fieldTextMode": "This is the primary task of the monitor.", "fieldTextModeDisabled": "Inactive monitor, no process will be created in this mode.", "fieldTextModeWatchOnly": "Monitor will only stream, no recording will occur unless otherwise ordered by API or Detector.", diff --git a/libs/events/utils.js b/libs/events/utils.js index 7b1129cf..a0502dd9 100644 --- a/libs/events/utils.js +++ b/libs/events/utils.js @@ -534,7 +534,7 @@ module.exports = (s,config,lang,app,io) => { //-t 00:'+s.timeObject(new Date(detector_timeout * 1000 * 60)).format('mm:ss')+' activeMonitor.eventBasedRecording.process = spawn( config.ffmpegDir, - splitForFFPMEG(('-loglevel warning -analyzeduration 1000000 -probesize 1000000 -re -i "'+s.dir.streams+d.ke+'/'+d.id+'/detectorStream.m3u8" -movflags faststart+frag_keyframe+empty_moov -fflags +igndts -c:v copy -strftime 1 "'+s.getVideoDirectory(monitorConfig) + filename + '"')) + splitForFFPMEG(('-loglevel warning -live_start_index -99999 -analyzeduration 1000 -probesize 32 -re -i "'+s.dir.streams+d.ke+'/'+d.id+'/detectorStream.m3u8" -movflags faststart+frag_keyframe+empty_moov -fflags +igndts -c:v copy -strftime 1 "'+s.getVideoDirectory(monitorConfig) + filename + '"')) ) activeMonitor.eventBasedRecording.process.stderr.on('data',function(data){ s.userLog(d,{ diff --git a/libs/ffmpeg/builders.js b/libs/ffmpeg/builders.js index ad92f30a..8583de25 100644 --- a/libs/ffmpeg/builders.js +++ b/libs/ffmpeg/builders.js @@ -679,13 +679,17 @@ module.exports = (s,config,lang) => { const isCudaEnabled = hasCudaEnabled(e) const outputFilters = [] var videoCodec = e.details.detector_buffer_vcodec + var liveStartIndex = e.details.detector_buffer_live_start_index || '-3' var audioCodec = e.details.detector_buffer_acodec ? e.details.detector_buffer_acodec : 'no' const videoCodecisCopy = videoCodec === 'copy' const videoFps = !isNaN(parseFloat(e.details.stream_fps)) && e.details.stream_fps !== '0' ? parseFloat(e.details.stream_fps) : null const inputMap = buildInputMap(e,e.details.input_map_choices.detector_sip_buffer) const { videoWidth, videoHeight } = validateDimensions(e.details.event_record_scale_x,e.details.event_record_scale_y) const hlsTime = !isNaN(parseInt(e.details.detector_buffer_hls_time)) ? `${parseInt(e.details.detector_buffer_hls_time)}` : '2' - const hlsListSize = !isNaN(parseInt(e.details.detector_buffer_hls_list_size)) ? `${parseInt(e.details.detector_buffer_hls_list_size)}` : '4' + // const hlsListSize = !isNaN(parseInt(e.details.detector_buffer_hls_list_size)) ? `${parseInt(e.details.detector_buffer_hls_list_size)}` : '4' + const secondsBefore = parseInt(e.details.detector_buffer_seconds_before) || 5 + let hlsListSize = parseInt(secondsBefore * 0.6) + hlsListSize = hlsListSize < 3 ? 3 : hlsListSize; if(inputMap)outputFlags.push(inputMap) if(e.details.cust_sip_record)outputFlags.push(e.details.cust_sip_record) if(videoCodec === 'auto'){