diff --git a/frigate/config.py b/frigate/config.py index 11762e0c8..41072865e 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -518,7 +518,7 @@ class RtmpConfig(FrigateBaseModel): class RestreamConfig(FrigateBaseModel): - enabled: bool = Field(default=True, title="go2rtc restreaming enabled.") + enabled: bool = Field(default=True, title="Restreaming enabled.") class CameraLiveSourceEnum(str, Enum): @@ -555,6 +555,9 @@ class CameraConfig(FrigateBaseModel): rtmp: RtmpConfig = Field( default_factory=RtmpConfig, title="RTMP restreaming configuration." ) + restream: RestreamConfig = Field( + default_factory=RestreamConfig, title="Restreaming configuration." + ) live: CameraLiveConfig = Field( default_factory=CameraLiveConfig, title="Live playback settings." ) @@ -593,7 +596,7 @@ class CameraConfig(FrigateBaseModel): # add roles to the input if there is only one if len(config["ffmpeg"]["inputs"]) == 1: - config["ffmpeg"]["inputs"][0]["roles"] = ["record", "rtmp", "detect"] + config["ffmpeg"]["inputs"][0]["roles"] = ["record", "rtmp", "detect", "restream"] super().__init__(**config) @@ -780,6 +783,9 @@ class FrigateConfig(FrigateBaseModel): rtmp: RtmpConfig = Field( default_factory=RtmpConfig, title="Global RTMP restreaming configuration." ) + restream: RestreamConfig = Field( + default_factory=RestreamConfig, title="Global restream configuration." + ) birdseye: BirdseyeConfig = Field( default_factory=BirdseyeConfig, title="Birdseye configuration." ) @@ -905,6 +911,11 @@ class FrigateConfig(FrigateBaseModel): f"Camera {name} has rtmp enabled, but rtmp is not assigned to an input." ) + if camera_config.restream.enabled and not "restream" in assigned_roles: + raise ValueError( + f"Camera {name} has restream enabled, but restream is not assigned to an input." + ) + # backwards compatibility for retain_days if not camera_config.record.retain_days is None: logger.warning( diff --git a/frigate/restream.py b/frigate/restream.py index 761e2cf01..9f4fdbf6f 100644 --- a/frigate/restream.py +++ b/frigate/restream.py @@ -1,11 +1,14 @@ """Controls go2rtc restream.""" +import logging import requests import urllib.parse from frigate.config import FrigateConfig +logger = logging.getLogger(__name__) + class RestreamApi: """Control go2rtc relay API.""" @@ -18,10 +21,13 @@ class RestreamApi: self.relays: dict[str, str] = {} for cam_name, camera in self.config.cameras.items(): + if not camera.restream.enabled: + continue + for input in camera.ffmpeg.inputs: if "restream" in input.roles: self.relays[cam_name] = input.path for name, path in self.relays.items(): - params = {"src": urllib.parse.quote_plus(path), "name": name} - requests.put("http://localhost:1984/api/streams", params=params) + params = {"src": path, "name": name} + requests.put("http://127.0.0.1:1984/api/streams", params=params)