search.end_time ?? Date.now() / 1000, [search]);
- const source = `${baseUrl}vod/${search.camera}/start/${search.start_time}/end/${endTime}/index.m3u8`;
+ // subtract 2 seconds from start_time to account for keyframes and any differences in the record/detect streams
+ // to help the start of the event from not being completely cut off
+ const source = `${baseUrl}vod/${search.camera}/start/${search.start_time - 2}/end/${endTime}/index.m3u8`;
return (
<>
diff --git a/web/src/components/settings/ZoneEditPane.tsx b/web/src/components/settings/ZoneEditPane.tsx
index 254f560e0..c73e1fe9c 100644
--- a/web/src/components/settings/ZoneEditPane.tsx
+++ b/web/src/components/settings/ZoneEditPane.tsx
@@ -708,8 +708,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
- ? t("feet", { ns: "common" })
- : t("meters", { ns: "common" }),
+ ? t("unit.length.feet", { ns: "common" })
+ : t("unit.length.meters", { ns: "common" }),
},
)}
@@ -735,8 +735,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
- ? t("feet", { ns: "common" })
- : t("meters", { ns: "common" }),
+ ? t("unit.length.feet", { ns: "common" })
+ : t("unit.length.meters", { ns: "common" }),
},
)}
@@ -762,8 +762,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
- ? t("feet", { ns: "common" })
- : t("meters", { ns: "common" }),
+ ? t("unit.length.feet", { ns: "common" })
+ : t("unit.length.meters", { ns: "common" }),
},
)}
@@ -789,8 +789,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
- ? t("feet", { ns: "common" })
- : t("meters", { ns: "common" }),
+ ? t("unit.length.feet", { ns: "common" })
+ : t("unit.length.meters", { ns: "common" }),
},
)}
diff --git a/web/src/views/live/DraggableGridLayout.tsx b/web/src/views/live/DraggableGridLayout.tsx
index e6977ae39..ccd1b373b 100644
--- a/web/src/views/live/DraggableGridLayout.tsx
+++ b/web/src/views/live/DraggableGridLayout.tsx
@@ -563,9 +563,12 @@ export default function DraggableGridLayout({
const streamName = streamExists
? streamNameFromSettings
: firstStreamEntry;
+ const streamType =
+ currentGroupStreamingSettings?.[camera.name]?.streamType;
const autoLive =
- currentGroupStreamingSettings?.[camera.name]?.streamType !==
- "no-streaming";
+ streamType !== undefined
+ ? streamType !== "no-streaming"
+ : undefined;
const showStillWithoutActivity =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"continuous";
diff --git a/web/src/views/live/LiveDashboardView.tsx b/web/src/views/live/LiveDashboardView.tsx
index b00b1a2f5..ddd6ccd51 100644
--- a/web/src/views/live/LiveDashboardView.tsx
+++ b/web/src/views/live/LiveDashboardView.tsx
@@ -486,9 +486,12 @@ export default function LiveDashboardView({
const streamName = streamExists
? streamNameFromSettings
: firstStreamEntry;
+ const streamType =
+ currentGroupStreamingSettings?.[camera.name]?.streamType;
const autoLive =
- currentGroupStreamingSettings?.[camera.name]?.streamType !==
- "no-streaming";
+ streamType !== undefined
+ ? streamType !== "no-streaming"
+ : undefined;
const showStillWithoutActivity =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"continuous";
diff --git a/web/src/views/recording/RecordingView.tsx b/web/src/views/recording/RecordingView.tsx
index 534811007..18394f4e6 100644
--- a/web/src/views/recording/RecordingView.tsx
+++ b/web/src/views/recording/RecordingView.tsx
@@ -91,7 +91,7 @@ export function RecordingView({
"recordings/summary",
{
timezone: timezone,
- cameras: allCameras ?? null,
+ cameras: allCameras.join(",") ?? null,
},
]);