From fcc2c5dd996894bc4831f94fd546520b797ae18d Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Sun, 26 Feb 2023 13:38:36 -0800 Subject: [PATCH] Add support for custom go2rtc streams. --- README.md | 2 ++ src/camera-manager/frigate/engine-frigate.ts | 2 +- src/const.ts | 1 + src/editor.ts | 3 ++- src/localize/languages/en.json | 3 ++- src/localize/languages/it.json | 11 +++++++++++ src/localize/languages/pt-BR.json | 11 +++++++++++ src/types.ts | 3 ++- 8 files changed, 32 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c2d3d517..bec2d6a8 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ cameras: | Option | Default | Overridable | Description | | - | - | - | - | | `modes` | `[webrtc, mse, mp4, mjpeg]` | :heavy_multiplication_x: | An ordered array of `go2rtc` modes to use. Valid values are `webrtc`, `mse`, `mp4` or `mjpeg` values. | +| `stream` | Determind by camera engine (e.g. `frigate` camera name). | :heavy_multiplication_x: | A valid `go2rtc` stream name. | #### Camera WebRTC Card configuration @@ -1392,6 +1393,7 @@ cameras: - mse - mp4 - mjpeg + stream: sitting_room ``` diff --git a/src/camera-manager/frigate/engine-frigate.ts b/src/camera-manager/frigate/engine-frigate.ts index 1711bcf7..67f6ae62 100644 --- a/src/camera-manager/frigate/engine-frigate.ts +++ b/src/camera-manager/frigate/engine-frigate.ts @@ -1093,7 +1093,7 @@ export class FrigateCameraManagerEngine // go2rtc is exposed by the integration under the (slightly // misleading) 'mse' path, even though that path can serve all go2rtc // modes. - `/mse/api/ws?src=${cameraConfig.frigate.camera_name}`, + `/mse/api/ws?src=${cameraConfig.go2rtc?.stream ?? cameraConfig.frigate.camera_name}`, sign: true, }; }; diff --git a/src/const.ts b/src/const.ts index 47cecc94..06ff4fa1 100644 --- a/src/const.ts +++ b/src/const.ts @@ -13,6 +13,7 @@ export const CONF_CAMERAS_ARRAY_FRIGATE_LABEL = export const CONF_CAMERAS_ARRAY_FRIGATE_URL = `${CONF_CAMERAS}.#.frigate.url` as const; export const CONF_CAMERAS_ARRAY_FRIGATE_ZONE = `${CONF_CAMERAS}.#.frigate.zone` as const; export const CONF_CAMERAS_ARRAY_GO2RTC_MODES = `${CONF_CAMERAS}.#.go2rtc.modes` as const; +export const CONF_CAMERAS_ARRAY_GO2RTC_STREAM = `${CONF_CAMERAS}.#.go2rtc.stream` as const; export const CONF_CAMERAS_ARRAY_HIDE = `${CONF_CAMERAS}.#.hide` as const; export const CONF_CAMERAS_ARRAY_ID = `${CONF_CAMERAS}.#.id` as const; export const CONF_CAMERAS_ARRAY_TITLE = `${CONF_CAMERAS}.#.title` as const; diff --git a/src/editor.ts b/src/editor.ts index ca8d11db..74550965 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -130,6 +130,7 @@ import { CONF_PERFORMANCE_FEATURES_MEDIA_CHUNK_SIZE, MEDIA_CHUNK_SIZE_MAX, CONF_CAMERAS_ARRAY_GO2RTC_MODES, + CONF_CAMERAS_ARRAY_GO2RTC_STREAM, CONF_CAMERAS_ARRAY_HIDE, } from './const.js'; import { localize } from './localize/localize.js'; @@ -1436,7 +1437,7 @@ export class FrigateCardEditor extends LitElement implements LovelaceCardEditor } )} ${this._renderStringInput( - getArrayConfigPath(CONF_CAMERAS_ARRAY_WEBRTC_CARD_URL, cameraIndex), + getArrayConfigPath(CONF_CAMERAS_ARRAY_GO2RTC_STREAM, cameraIndex), )}`, )} ${this._putInSubmenu( diff --git a/src/localize/languages/en.json b/src/localize/languages/en.json index 2f6508ff..4a29761e 100644 --- a/src/localize/languages/en.json +++ b/src/localize/languages/en.json @@ -31,7 +31,8 @@ "webrtc": "Web Real-Time Communication (WebRTC)", "mp4": "MPEG-4 (MP4)", "mjpeg": "Motion JPEG (MJPEG)" - } + }, + "stream": "go2rtc stream name" }, "hide": "Hide camera from UI", "icon": "Icon for this camera (Autodetected from entity)", diff --git a/src/localize/languages/it.json b/src/localize/languages/it.json index 39a6a1ab..201a7de2 100644 --- a/src/localize/languages/it.json +++ b/src/localize/languages/it.json @@ -23,6 +23,17 @@ "url": "Frigate URL del server", "zone": "Frigate zona" }, + "go2rtc": { + "editor_label": "", + "modes": { + "editor_label": "", + "mse": "", + "webrtc": "", + "mp4": "", + "mjpeg": "" + }, + "stream": "" + }, "hide": "", "icon": "Icona per questa telecamera (Autoidentificato dall'entità)", "id": "ID univoco per questa telecamera in questa carta", diff --git a/src/localize/languages/pt-BR.json b/src/localize/languages/pt-BR.json index fec51f53..77227066 100644 --- a/src/localize/languages/pt-BR.json +++ b/src/localize/languages/pt-BR.json @@ -23,6 +23,17 @@ "url": "URL do servidor Frigate", "zone": "Zona do Frigate" }, + "go2rtc": { + "editor_label": "", + "modes": { + "editor_label": "", + "mse": "", + "webrtc": "", + "mp4": "", + "mjpeg": "" + }, + "stream": "" + }, "hide": "", "icon": "Ícone para esta câmera (detectado automaticamente pela entidade)", "id": "ID exclusivo para esta câmera nesse cartão", diff --git a/src/types.ts b/src/types.ts index 3cd6ee68..e8eb2e66 100644 --- a/src/types.ts +++ b/src/types.ts @@ -448,7 +448,8 @@ const cameraConfigSchema = z go2rtc: z .object({ - modes: z.enum(['webrtc', 'mse', 'mp4', 'mjpeg']).array(), + modes: z.enum(['webrtc', 'mse', 'mp4', 'mjpeg']).array().optional(), + stream: z.string().optional(), }) .optional(),