Fix: got data from backend

This commit is contained in:
ziesorx 2025-09-13 01:00:49 +07:00
parent 42a8325faf
commit 086ba0e4d3
4 changed files with 107 additions and 12 deletions

View file

@ -134,8 +134,13 @@ class StreamManager:
camera_id: str,
rtsp_url: Optional[str] = None,
snapshot_url: Optional[str] = None,
snapshot_interval: Optional[int] = None) -> StreamInfo:
"""Create StreamInfo object based on stream type."""
snapshot_interval: Optional[int] = None,
subscription_metadata: Optional[Dict[str, Any]] = None) -> StreamInfo:
"""Create StreamInfo object based on stream type with subscription metadata."""
# Extract subscription metadata if provided
metadata = subscription_metadata or {}
if snapshot_url and snapshot_interval:
return StreamInfo(
camera_id=camera_id,
@ -143,7 +148,15 @@ class StreamManager:
stream_type="snapshot",
snapshot_interval=snapshot_interval,
buffer=queue.Queue(maxsize=SHARED_STREAM_BUFFER_SIZE),
stop_event=threading.Event()
stop_event=threading.Event(),
# Add subscription metadata
subscriptionIdentifier=metadata.get("subscriptionIdentifier"),
modelId=metadata.get("modelId"),
modelName=metadata.get("modelName"),
cropX1=metadata.get("cropX1"),
cropY1=metadata.get("cropY1"),
cropX2=metadata.get("cropX2"),
cropY2=metadata.get("cropY2")
)
elif rtsp_url:
return StreamInfo(
@ -151,7 +164,15 @@ class StreamManager:
stream_url=rtsp_url,
stream_type="rtsp",
buffer=queue.Queue(maxsize=SHARED_STREAM_BUFFER_SIZE),
stop_event=threading.Event()
stop_event=threading.Event(),
# Add subscription metadata
subscriptionIdentifier=metadata.get("subscriptionIdentifier"),
modelId=metadata.get("modelId"),
modelName=metadata.get("modelName"),
cropX1=metadata.get("cropX1"),
cropY1=metadata.get("cropY1"),
cropX2=metadata.get("cropX2"),
cropY2=metadata.get("cropY2")
)
else:
raise ValueError("Must provide either RTSP URL or snapshot URL with interval")
@ -162,7 +183,8 @@ class StreamManager:
subscriber_id: str,
rtsp_url: Optional[str] = None,
snapshot_url: Optional[str] = None,
snapshot_interval: Optional[int] = None) -> bool:
snapshot_interval: Optional[int] = None,
subscription_metadata: Optional[Dict[str, Any]] = None) -> bool:
"""
Create a stream subscription.
@ -194,7 +216,7 @@ class StreamManager:
# Create or get existing stream
if camera_id not in self._streams:
stream_info = self._create_stream_info(
camera_id, rtsp_url, snapshot_url, snapshot_interval
camera_id, rtsp_url, snapshot_url, snapshot_interval, subscription_metadata
)
self._streams[camera_id] = stream_info
@ -642,6 +664,19 @@ class StreamManager:
# Create a subscriber_id (for WebSocket compatibility, use the subscription_id)
subscriber_id = f"websocket_{int(time.time() * 1000)}"
# Extract subscription metadata from payload
subscription_metadata = {
"subscriptionIdentifier": payload.get("subscriptionIdentifier"),
"modelId": payload.get("modelId"),
"modelName": payload.get("modelName"),
"cropX1": payload.get("cropX1"),
"cropY1": payload.get("cropY1"),
"cropX2": payload.get("cropX2"),
"cropY2": payload.get("cropY2")
}
logger.info(f"Extracted subscription metadata for camera {camera_id}: {subscription_metadata}")
# Create subscription based on available URL type
if rtsp_url and rtsp_url.strip():
logger.info(f"Creating RTSP stream for camera {camera_id}: {rtsp_url}")
@ -649,7 +684,8 @@ class StreamManager:
subscription_id=subscription_id,
camera_id=camera_id,
subscriber_id=subscriber_id,
rtsp_url=rtsp_url.strip()
rtsp_url=rtsp_url.strip(),
subscription_metadata=subscription_metadata
)
elif snapshot_url and snapshot_url.strip():
logger.info(f"Creating snapshot stream for camera {camera_id}: {snapshot_url}")
@ -658,7 +694,8 @@ class StreamManager:
camera_id=camera_id,
subscriber_id=subscriber_id,
snapshot_url=snapshot_url.strip(),
snapshot_interval=snapshot_interval
snapshot_interval=snapshot_interval,
subscription_metadata=subscription_metadata
)
else:
logger.error(f"No valid stream URL provided for camera {camera_id}. "