优化:解耦帧调度与推理队列,提升单卡实时推理稳定性
This commit is contained in:
@@ -102,6 +102,7 @@ class RTSPStreamReader:
|
||||
|
||||
self._logger = get_logger("video_stream")
|
||||
self._lock = threading.Lock()
|
||||
self._latest_frame: Optional[VideoFrame] = None
|
||||
|
||||
@property
|
||||
def is_connected(self) -> bool:
|
||||
@@ -221,6 +222,8 @@ class RTSPStreamReader:
|
||||
pass
|
||||
|
||||
self._frame_buffer.put_nowait(frame_obj)
|
||||
with self._lock:
|
||||
self._latest_frame = frame_obj
|
||||
|
||||
if self._on_frame_callback:
|
||||
self._on_frame_callback(frame_obj)
|
||||
@@ -293,6 +296,9 @@ class RTSPStreamReader:
|
||||
self._frame_buffer.get_nowait()
|
||||
except queue.Empty:
|
||||
break
|
||||
|
||||
with self._lock:
|
||||
self._latest_frame = None
|
||||
|
||||
self._logger.info(f"视频流已停止: {self.camera_id}")
|
||||
|
||||
@@ -305,16 +311,11 @@ class RTSPStreamReader:
|
||||
|
||||
def get_latest_frame(self, timeout: float = 1.0) -> Optional[VideoFrame]:
|
||||
"""获取最新帧(丢弃中间帧)"""
|
||||
try:
|
||||
while True:
|
||||
try:
|
||||
frame = self._frame_buffer.get_nowait()
|
||||
if self._frame_buffer.empty():
|
||||
return frame
|
||||
except queue.Empty:
|
||||
return None
|
||||
except Exception:
|
||||
return None
|
||||
del timeout
|
||||
with self._lock:
|
||||
frame = self._latest_frame
|
||||
self._latest_frame = None
|
||||
return frame
|
||||
|
||||
def get_frame_batch(self, max_count: int = 8,
|
||||
timeout: float = 2.0) -> List[VideoFrame]:
|
||||
|
||||
Reference in New Issue
Block a user