mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-06 00:36:29 +08:00
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import time
|
|
import requests
|
|
from dataclasses import asdict, dataclass, field
|
|
|
|
|
|
WEBRTCD_PORT = 5001
|
|
|
|
@dataclass
|
|
class StreamRequestBody:
|
|
sdp: str
|
|
init_camera: str
|
|
enabled: bool
|
|
bridge_services_in: list[str] = field(default_factory=list)
|
|
bridge_services_out: list[str] = field(default_factory=list)
|
|
|
|
|
|
def post_stream_request(body: StreamRequestBody) -> dict:
|
|
t_start = time.monotonic()
|
|
try:
|
|
resp = requests.post(f"http://localhost:{WEBRTCD_PORT}/stream", json=asdict(body), timeout=10)
|
|
t_end = time.monotonic()
|
|
ret = resp.json()
|
|
ret["time"] = (t_end - t_start) * 1000
|
|
return ret
|
|
except requests.ConnectTimeout as e:
|
|
raise Exception("webrtc took too long to respond.") from e
|
|
except requests.ConnectionError as e:
|
|
raise Exception("webrtc server on device is not running.") from e
|
|
|
|
|
|
def wait_for_webrtcd(max_retries: float = 10) -> None:
|
|
attempts = 0
|
|
while attempts < max_retries:
|
|
try:
|
|
if requests.get(f"http://localhost:{WEBRTCD_PORT}/schema", timeout=1).ok:
|
|
return
|
|
except requests.ConnectionError:
|
|
attempts += 1
|
|
time.sleep(0.5)
|
|
raise TimeoutError("webrtcd did not initialize in time.")
|