diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json index 8a64533b3..6d4a32262 100644 --- a/web/public/locales/en/views/settings.json +++ b/web/public/locales/en/views/settings.json @@ -272,6 +272,8 @@ "title": "Stream Validation", "videoCodecGood": "Video codec is {{codec}}.", "audioCodecGood": "Audio codec is {{codec}}.", + "resolutionHigh": "A resolution of {{resolution}} may cause increased resource usage.", + "resolutionLow": "A resolution of {{resolution}} may be too low for reliable detection of small objects.", "noAudioWarning": "No audio detected for this stream, recordings will not have audio.", "audioCodecRecordError": "The AAC audio codec is required to support audio in recordings.", "audioCodecRequired": "An audio stream is required to support audio detection.", diff --git a/web/src/components/settings/wizard/Step3Validation.tsx b/web/src/components/settings/wizard/Step3Validation.tsx index 9a8737f4b..355038b92 100644 --- a/web/src/components/settings/wizard/Step3Validation.tsx +++ b/web/src/components/settings/wizard/Step3Validation.tsx @@ -500,6 +500,29 @@ function StreamIssues({ } } + if (stream.roles.includes("detect") && stream.resolution) { + const [width, height] = stream.resolution.split("x").map(Number); + if (!isNaN(width) && !isNaN(height) && width > 0 && height > 0) { + const minDimension = Math.min(width, height); + const maxDimension = Math.max(width, height); + if (minDimension > 1080) { + result.push({ + type: "warning", + message: t("cameraWizard.step3.issues.resolutionHigh", { + resolution: stream.resolution, + }), + }); + } else if (maxDimension < 640) { + result.push({ + type: "error", + message: t("cameraWizard.step3.issues.resolutionLow", { + resolution: stream.resolution, + }), + }); + } + } + } + // Substream Check if ( wizardData.brandTemplate == "dahua" &&