refactor: simplify frame handling by removing stream type management and enhancing validation
All checks were successful
Build Worker Base and Application Images / check-base-changes (push) Successful in 7s
Build Worker Base and Application Images / build-base (push) Has been skipped
Build Worker Base and Application Images / build-docker (push) Successful in 2m55s
Build Worker Base and Application Images / deploy-stack (push) Successful in 12s
All checks were successful
Build Worker Base and Application Images / check-base-changes (push) Successful in 7s
Build Worker Base and Application Images / build-base (push) Has been skipped
Build Worker Base and Application Images / build-docker (push) Successful in 2m55s
Build Worker Base and Application Images / deploy-stack (push) Successful in 12s
This commit is contained in:
parent
dc1db635d0
commit
719d16ae4d
4 changed files with 51 additions and 182 deletions
|
@ -10,7 +10,7 @@ from dataclasses import dataclass
|
|||
from collections import defaultdict
|
||||
|
||||
from .readers import RTSPReader, HTTPSnapshotReader
|
||||
from .buffers import shared_cache_buffer, StreamType
|
||||
from .buffers import shared_cache_buffer
|
||||
from ..tracking.integration import TrackingPipelineIntegration
|
||||
|
||||
|
||||
|
@ -177,12 +177,8 @@ class StreamManager:
|
|||
def _frame_callback(self, camera_id: str, frame):
|
||||
"""Callback for when a new frame is available."""
|
||||
try:
|
||||
# Detect stream type based on frame dimensions
|
||||
stream_type = self._detect_stream_type(frame)
|
||||
|
||||
# Store frame in shared buffer with stream type
|
||||
shared_cache_buffer.put_frame(camera_id, frame, stream_type)
|
||||
|
||||
# Store frame in shared buffer
|
||||
shared_cache_buffer.put_frame(camera_id, frame)
|
||||
|
||||
# Process tracking for subscriptions with tracking integration
|
||||
self._process_tracking_for_camera(camera_id, frame)
|
||||
|
@ -404,26 +400,6 @@ class StreamManager:
|
|||
stats[subscription_id] = subscription_info.tracking_integration.get_statistics()
|
||||
return stats
|
||||
|
||||
def _detect_stream_type(self, frame) -> StreamType:
|
||||
"""Detect stream type based on frame dimensions."""
|
||||
if frame is None:
|
||||
return StreamType.RTSP # Default
|
||||
|
||||
h, w = frame.shape[:2]
|
||||
|
||||
# RTSP: 1280x720
|
||||
if w == 1280 and h == 720:
|
||||
return StreamType.RTSP
|
||||
|
||||
# HTTP: 2560x1440 or larger
|
||||
if w >= 2000 and h >= 1000:
|
||||
return StreamType.HTTP
|
||||
|
||||
# Default based on size
|
||||
if w <= 1920 and h <= 1080:
|
||||
return StreamType.RTSP
|
||||
else:
|
||||
return StreamType.HTTP
|
||||
|
||||
def get_stats(self) -> Dict[str, Any]:
|
||||
"""Get comprehensive streaming statistics."""
|
||||
|
@ -431,22 +407,11 @@ class StreamManager:
|
|||
buffer_stats = shared_cache_buffer.get_stats()
|
||||
tracking_stats = self.get_tracking_stats()
|
||||
|
||||
# Add stream type information
|
||||
stream_types = {}
|
||||
for camera_id in self._streams.keys():
|
||||
if isinstance(self._streams[camera_id], RTSPReader):
|
||||
stream_types[camera_id] = 'rtsp'
|
||||
elif isinstance(self._streams[camera_id], HTTPSnapshotReader):
|
||||
stream_types[camera_id] = 'http'
|
||||
else:
|
||||
stream_types[camera_id] = 'unknown'
|
||||
|
||||
return {
|
||||
'active_subscriptions': len(self._subscriptions),
|
||||
'active_streams': len(self._streams),
|
||||
'cameras_with_subscribers': len(self._camera_subscribers),
|
||||
'max_streams': self.max_streams,
|
||||
'stream_types': stream_types,
|
||||
'subscriptions_by_camera': {
|
||||
camera_id: len(subscribers)
|
||||
for camera_id, subscribers in self._camera_subscribers.items()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue