fix: restore recording playback and default to 30-day retention
This commit is contained in:
@@ -1,9 +1,15 @@
|
||||
'use strict';
|
||||
// Pure range logic shared by the UI and regression tests. All ranges are [start,end).
|
||||
const RecordingRanges=(()=>{
|
||||
// Date truncates fractional milliseconds. Round the query start inward so
|
||||
// MediaMTX never receives a time before this segment's microsecond timestamp.
|
||||
function firstMillisecond(value){
|
||||
const time=+new Date(value),fraction=typeof value==='string'&&value.match(/\.(\d+)(?:Z|[+-]\d{2}:\d{2})$/);
|
||||
return time+(fraction&&/[1-9]/.test(fraction[1].slice(3))?1:0);
|
||||
}
|
||||
function normalize(items,start,end){
|
||||
const lo=+start,hi=+end;if(!Number.isFinite(lo)||!Number.isFinite(hi)||hi<=lo)return [];
|
||||
const ranges=(Array.isArray(items)?items:[]).filter(s=>s&&Number.isFinite(+new Date(s.start))&&Number.isFinite(Number(s.duration))&&Number(s.duration)>0).map(s=>({start:Math.max(lo,+new Date(s.start)),end:Math.min(hi,+new Date(s.start)+Number(s.duration)*1000)}))
|
||||
const ranges=(Array.isArray(items)?items:[]).filter(s=>s&&Number.isFinite(+new Date(s.start))&&Number.isFinite(Number(s.duration))&&Number(s.duration)>0).map(s=>({start:Math.max(lo,firstMillisecond(s.start)),end:Math.min(hi,Math.floor(+new Date(s.start)+Number(s.duration)*1000))}))
|
||||
.filter(s=>Number.isFinite(s.start)&&Number.isFinite(s.end)&&s.end>s.start).sort((a,b)=>a.start-b.start);
|
||||
const result=[];for(const r of ranges){const last=result.at(-1);if(last&&r.start<=last.end)last.end=Math.max(last.end,r.end);else result.push({...r});}return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user