update at 2026-06-04 14:09:16

This commit is contained in:
陈赣
2026-06-04 14:09:16 +08:00
parent 41bd03123c
commit 4603914e85
11 changed files with 692 additions and 68 deletions

View File

@@ -33,11 +33,16 @@ class DeviceManager:
if device_num not in {device.device_num for device in self.devices}:
raise ValueError("设备不在 devicelist.env 中")
with self.lock:
old_device_num = self.current_device_num
self.current_device_num = device_num
self.current_url = ""
self.timings = {}
self.updated_at = time.time()
self.version += 1
print(
f"[device-switch] manager set old={old_device_num} new={device_num} version={self.version}",
flush=True,
)
return self.version
def resolve_stream_url(self) -> str:
@@ -49,16 +54,38 @@ class DeviceManager:
return self.fallback_url
raise RuntimeError("devicelist.env 中没有可用设备号")
result = self.api_client.get_stream_url_details(device_num)
print(f"[device-switch] resolve start device={device_num} version={version}", flush=True)
try:
result = self.api_client.get_stream_url_details(device_num)
except Exception as exc:
print(
f"[device-switch] resolve failed device={device_num} version={version} error={exc}",
flush=True,
)
raise
with self.lock:
# 避免旧摄像头的慢接口响应覆盖用户刚切换的新选择。
if version != self.version or device_num != self.current_device_num:
print(
f"[device-switch] resolve stale device={device_num} version={version} current={self.current_device_num} current_version={self.version}",
flush=True,
)
return self.current_url
self.current_url = result.url
self.timings = dict(result.timings)
self.updated_at = time.time()
print(f"[device-switch] resolve success device={device_num} version={version}", flush=True)
return result.url
def resolve_stream_url_for(self, device_num: str) -> str:
if device_num not in {device.device_num for device in self.devices}:
raise ValueError("设备不在 devicelist.env 中")
result = self.api_client.get_stream_url_details(device_num)
return result.url
def get_video_grid_devices(self, limit: int = 4) -> list[Device]:
return self.devices[:limit]
def get_snapshot(self) -> dict[str, Any]:
with self.lock:
return {