diff --git a/api/app/mediamtx_client.py b/api/app/mediamtx_client.py index 444385d..e42319c 100644 --- a/api/app/mediamtx_client.py +++ b/api/app/mediamtx_client.py @@ -31,8 +31,28 @@ class MediaMTXClient: json=payload, auth=self._auth(), ) - r.raise_for_status() - return r.json() + if r.status_code != 404: + r.raise_for_status() + return r.json() + + # Backward-compatible fallback for MediaMTX versions that don't support bulk patch. + results: dict[str, Any] = {"fallback": []} + async with httpx.AsyncClient(timeout=10) as client: + for name in names: + rr = await client.patch( + f"{self.api_url}/v3/config/paths/patch/{name}", + json={"record": enabled}, + auth=self._auth(), + ) + if rr.status_code == 404: + rr = await client.post( + f"{self.api_url}/v3/config/paths/add/{name}", + json={"record": enabled}, + auth=self._auth(), + ) + rr.raise_for_status() + results["fallback"].append({"name": name, "status": rr.status_code}) + return results async def upsert_paths_sources_bulk(self, sources: dict[str, str]) -> dict[str, Any]: payload = {"paths": {name: {"source": url} for name, url in sources.items()}}