From 226b7e9efd7009ec3fdbfd82bb436ad257165f1d Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Sun, 15 Jan 2023 17:04:38 -0700 Subject: [PATCH] Rework birdseye restream --- frigate/config.py | 1 + frigate/restream.py | 58 ++------------------------------------------- 2 files changed, 3 insertions(+), 56 deletions(-) diff --git a/frigate/config.py b/frigate/config.py index 513345a5d..bf93d5a19 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -344,6 +344,7 @@ class BirdseyeModeEnum(str, Enum): class BirdseyeConfig(FrigateBaseModel): enabled: bool = Field(default=True, title="Enable birdseye view.") + restream: bool = Field(default=False, title="Restream birdseye via RTSP.") width: int = Field(default=1280, title="Birdseye width.") height: int = Field(default=720, title="Birdseye height.") quality: int = Field( diff --git a/frigate/restream.py b/frigate/restream.py index 0fe43fc0e..95582ff98 100644 --- a/frigate/restream.py +++ b/frigate/restream.py @@ -4,42 +4,15 @@ import logging import requests -from typing import Optional - -from frigate.config import FrigateConfig, RestreamAudioCodecEnum, RestreamVideoCodecEnum +from frigate.config import FrigateConfig from frigate.const import BIRDSEYE_PIPE from frigate.ffmpeg_presets import ( parse_preset_hardware_acceleration_encode, - parse_preset_hardware_acceleration_go2rtc_engine, ) -from frigate.util import escape_special_characters logger = logging.getLogger(__name__) -def get_manual_go2rtc_stream( - camera_url: str, - aCodecs: list[RestreamAudioCodecEnum], - vCodec: RestreamVideoCodecEnum, - engine: Optional[str], -) -> str: - """Get a manual stream for go2rtc.""" - stream = f"ffmpeg:{camera_url}" - - for aCodec in aCodecs: - stream += f"#audio={aCodec}" - - if vCodec == RestreamVideoCodecEnum.copy: - stream += "#video=copy" - else: - stream += f"#video={vCodec}" - - if engine: - stream += f"#hardware={engine}" - - return stream - - class RestreamApi: """Control go2rtc relay API.""" @@ -50,34 +23,7 @@ class RestreamApi: """Add cameras to go2rtc.""" 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: - if ( - input.path.startswith("rtsp") - and camera.restream.video_encoding - == RestreamVideoCodecEnum.copy - and camera.restream.audio_encoding - == [RestreamAudioCodecEnum.copy] - ): - self.relays[ - cam_name - ] = f"{escape_special_characters(input.path)}#backchannel=0" - else: - # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used - self.relays[cam_name] = get_manual_go2rtc_stream( - escape_special_characters(input.path), - camera.restream.audio_encoding, - camera.restream.video_encoding, - parse_preset_hardware_acceleration_go2rtc_engine( - self.config.ffmpeg.hwaccel_args - ), - ) - - if self.config.restream.birdseye: + if self.config.birdseye.restream: self.relays[ "birdseye" ] = f"exec:{parse_preset_hardware_acceleration_encode(self.config.ffmpeg.hwaccel_args, f'-f rawvideo -pix_fmt yuv420p -video_size {self.config.birdseye.width}x{self.config.birdseye.height} -r 10 -i {BIRDSEYE_PIPE}', '-rtsp_transport tcp -f rtsp {output}')}"