Compare commits

..

No commits in common. "b5c7f934b64ba7b379e00dd18aa482868bdbd75b" and "eb1fb8f984098deb8e992cfce18f5a11edc3e1aa" have entirely different histories.

2 changed files with 42 additions and 52 deletions

View File

@ -143,9 +143,6 @@ class FrigateApp:
else: else:
logger.debug(f"Skipping directory: {d}") logger.debug(f"Skipping directory: {d}")
def init_debug_replay_manager(self) -> None:
self.replay_manager = DebugReplayManager()
def init_camera_metrics(self) -> None: def init_camera_metrics(self) -> None:
# create camera_metrics # create camera_metrics
for camera_name in self.config.cameras.keys(): for camera_name in self.config.cameras.keys():
@ -538,7 +535,8 @@ class FrigateApp:
set_file_limit() set_file_limit()
# Start frigate services. # Start frigate services.
self.init_debug_replay_manager() self.replay_manager = DebugReplayManager()
self.init_camera_metrics() self.init_camera_metrics()
self.init_queues() self.init_queues()
self.init_database() self.init_database()

View File

@ -8,6 +8,7 @@ import threading
from multiprocessing.synchronize import Event as MpEvent from multiprocessing.synchronize import Event as MpEvent
from wsgiref.simple_server import make_server from wsgiref.simple_server import make_server
import cv2
from ws4py.server.wsgirefserver import ( from ws4py.server.wsgirefserver import (
WebSocketWSGIHandler, WebSocketWSGIHandler,
WebSocketWSGIRequestHandler, WebSocketWSGIRequestHandler,
@ -84,32 +85,6 @@ class OutputProcess(FrigateProcess):
) )
self.config = config self.config = config
def is_debug_replay_camera(self, camera: str) -> bool:
return camera.startswith(REPLAY_CAMERA_PREFIX)
def add_camera(
self,
camera: str,
websocket_server: WSGIServer,
jsmpeg_cameras: dict[str, JsmpegCamera],
preview_recorders: dict[str, PreviewRecorder],
preview_write_times: dict[str, float],
birdseye: Birdseye | None,
) -> None:
camera_config = self.config.cameras[camera]
jsmpeg_cameras[camera] = JsmpegCamera(
camera_config, self.stop_event, websocket_server
)
preview_recorders[camera] = PreviewRecorder(camera_config)
preview_write_times[camera] = 0
if (
birdseye is not None
and self.config.birdseye.enabled
and camera_config.birdseye.enabled
):
birdseye.add_camera(camera)
def run(self) -> None: def run(self) -> None:
self.pre_run_setup(self.config.logger) self.pre_run_setup(self.config.logger)
@ -149,17 +124,15 @@ class OutputProcess(FrigateProcess):
move_preview_frames("cache") move_preview_frames("cache")
for camera, cam_config in self.config.cameras.items(): for camera, cam_config in self.config.cameras.items():
if not cam_config.enabled_in_config or self.is_debug_replay_camera(camera): if not cam_config.enabled_in_config:
continue continue
self.add_camera( jsmpeg_cameras[camera] = JsmpegCamera(
camera, cam_config, self.stop_event, websocket_server
websocket_server,
jsmpeg_cameras,
preview_recorders,
preview_write_times,
birdseye,
) )
if not camera.startswith(REPLAY_CAMERA_PREFIX):
preview_recorders[camera] = PreviewRecorder(cam_config)
preview_write_times[camera] = 0
if self.config.birdseye.enabled: if self.config.birdseye.enabled:
birdseye = Birdseye(self.config, self.stop_event, websocket_server) birdseye = Birdseye(self.config, self.stop_event, websocket_server)
@ -172,15 +145,19 @@ class OutputProcess(FrigateProcess):
if CameraConfigUpdateEnum.add in updates: if CameraConfigUpdateEnum.add in updates:
for camera in updates["add"]: for camera in updates["add"]:
if not self.is_debug_replay_camera(camera): camera_config = self.config.cameras[camera]
self.add_camera( jsmpeg_cameras[camera] = JsmpegCamera(
camera, camera_config, self.stop_event, websocket_server
websocket_server, )
jsmpeg_cameras, if not camera.startswith(REPLAY_CAMERA_PREFIX):
preview_recorders, preview_recorders[camera] = PreviewRecorder(camera_config)
preview_write_times, preview_write_times[camera] = 0
birdseye,
) if (
self.config.birdseye.enabled
and self.config.cameras[camera].birdseye.enabled
):
birdseye.add_camera(camera)
(topic, data) = detection_subscriber.check_for_update(timeout=1) (topic, data) = detection_subscriber.check_for_update(timeout=1)
now = datetime.datetime.now().timestamp() now = datetime.datetime.now().timestamp()
@ -207,7 +184,6 @@ class OutputProcess(FrigateProcess):
if ( if (
camera not in self.config.cameras camera not in self.config.cameras
or not self.config.cameras[camera].enabled or not self.config.cameras[camera].enabled
or self.is_debug_replay_camera(camera)
): ):
continue continue
@ -232,10 +208,22 @@ class OutputProcess(FrigateProcess):
failed_frame_requests[camera] = 0 failed_frame_requests[camera] = 0
# send frames for low fps recording # send frames for low fps recording
preview_recorders[camera].write_data( preview_recorder = preview_recorders.get(camera)
current_tracked_objects, motion_boxes, frame_time, frame
) if preview_recorder is not None:
preview_write_times[camera] = frame_time try:
preview_recorder.write_data(
current_tracked_objects, motion_boxes, frame_time, frame
)
preview_write_times[camera] = frame_time
except cv2.error:
if camera.startswith(REPLAY_CAMERA_PREFIX):
logger.debug(
"Skipping preview frame write for replay camera %s",
camera,
)
else:
raise
# send camera frame to ffmpeg process if websockets are connected # send camera frame to ffmpeg process if websockets are connected
if any( if any(
@ -253,6 +241,10 @@ class OutputProcess(FrigateProcess):
for ws in websocket_server.manager for ws in websocket_server.manager
) )
): ):
if camera.startswith(REPLAY_CAMERA_PREFIX):
frame_manager.close(frame_name)
continue
birdseye.write_data( birdseye.write_data(
camera, camera,
current_tracked_objects, current_tracked_objects,