Обновление токенов стрима по 403 вместо периодического таймера
— Убран async_track_time_interval из RTKeyCamera (NameError + лишняя нагрузка) — get_camera_stream_url: проверка 403 с retry, как в get_camera_image — Токены обновляются только по факту ошибки, не каждые 300 сек Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -697,7 +697,11 @@ class RTKeyCamerasApi:
|
||||
url = url.update_query({"token": streamer_token})
|
||||
return str(url)
|
||||
|
||||
async def get_camera_stream_url(self, camera_id: str) -> str | None:
|
||||
async def get_camera_stream_url(self, camera_id: str, retry: bool = False) -> str | None:
|
||||
if self._tokens_invalid and not retry:
|
||||
_LOGGER.debug(f"Токены протухшие, обновляем перед запросом стрима для {camera_id}")
|
||||
await self.refresh_tokens()
|
||||
|
||||
info = self.camera_tokens.get(camera_id)
|
||||
streamer_token = info.streamer_token if info else None
|
||||
|
||||
@@ -708,6 +712,27 @@ class RTKeyCamerasApi:
|
||||
})
|
||||
if streamer_token:
|
||||
url = url.update_query({"token": streamer_token})
|
||||
|
||||
r = await self._api_get(url, _DEFAULT_HEADERS, timeout=10)
|
||||
if r is None:
|
||||
return str(url)
|
||||
|
||||
if r.status == 403 and not retry:
|
||||
camera_name = self.get_camera_name(camera_id)
|
||||
_LOGGER.warning(f"Токен стрима для {camera_name} ({camera_id}) протух (403), запускаем обновление...")
|
||||
self._tokens_invalid = True
|
||||
await self.refresh_tokens()
|
||||
return await self.get_camera_stream_url(camera_id, retry=True)
|
||||
|
||||
if r.status == 403 and retry:
|
||||
camera_name = self.get_camera_name(camera_id)
|
||||
_LOGGER.error(f"Повторный 403 для стрима {camera_name} ({camera_id}) — проблема с авторизацией")
|
||||
return None
|
||||
|
||||
if r.status == 200:
|
||||
return str(url)
|
||||
|
||||
_LOGGER.warning(f"Стрим для {camera_id}: статус {r.status}")
|
||||
return str(url)
|
||||
|
||||
# === Домофон: открытие ===
|
||||
|
||||
Reference in New Issue
Block a user