优化:解耦帧调度与推理队列,提升单卡实时推理稳定性

This commit is contained in:
2026-03-31 14:35:52 +08:00
parent bb47b94c6e
commit 5dd9dc15d5
4 changed files with 270 additions and 39 deletions

View File

@@ -116,7 +116,7 @@ class TensorRTEngine:
if self._context is not None:
self._release_resources()
self._cuda_context = cuda.Device(0).make_context()
self._cuda_context = cuda.Device(self.config.device_id).make_context()
self._stream = cuda.Stream()
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

View File

@@ -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]: