From a1e7c42fb35db7f2bbf43b53769f0f149e7dfaa7 Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Fri, 26 Sep 2025 01:44:46 +0700 Subject: [PATCH] refactor: improve error handling and logging in RTSPReader for frame capture failures --- core/streaming/readers.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/streaming/readers.py b/core/streaming/readers.py index 78a3d45..59db84b 100644 --- a/core/streaming/readers.py +++ b/core/streaming/readers.py @@ -89,7 +89,11 @@ class RTSPReader: continue # Read frame immediately without rate limiting for minimum latency - ret, frame = self.cap.read() + try: + ret, frame = self.cap.read() + except Exception as read_error: + logger.error(f"Camera {self.camera_id}: cap.read() threw exception: {type(read_error).__name__}: {read_error}") + ret, frame = False, None if not ret or frame is None: consecutive_errors += 1 @@ -98,10 +102,14 @@ class RTSPReader: logger.error(f"Camera {self.camera_id}: cap.read() failed - ret={ret}, frame={frame is not None}") # Try to get more info from the capture - if self.cap.isOpened(): - logger.debug(f"Camera {self.camera_id}: Capture still open, backend: {self.cap.getBackendName()}") - else: - logger.error(f"Camera {self.camera_id}: Capture is closed!") + try: + if self.cap.isOpened(): + backend = self.cap.getBackendName() + logger.debug(f"Camera {self.camera_id}: Capture still open, backend: {backend}") + else: + logger.error(f"Camera {self.camera_id}: Capture is closed!") + except Exception as info_error: + logger.error(f"Camera {self.camera_id}: Error getting capture info: {type(info_error).__name__}: {info_error}") if consecutive_errors >= self.max_consecutive_errors: logger.error(f"Camera {self.camera_id}: Too many consecutive errors ({consecutive_errors}), reinitializing")