webrtcd: timeout after 5 minutes (#38437)

* webrtc timeout after 5 mins

* omit timeout for body
This commit is contained in:
stef
2026-07-23 15:11:22 -07:00
committed by GitHub
parent b392328c35
commit 554d8d2114
+22 -3
View File
@@ -23,6 +23,7 @@ from openpilot.system.webrtc.schema import generate_field
from openpilot.common.params import Params
from openpilot.cereal import messaging, log
SESSION_TIMEOUT_SECONDS = 300
# socket trick: route lookup for 8.8.8.8 (nothing is sent or actually connected to)
# return the source interfaces IP which is the default interface of the device
@@ -233,6 +234,8 @@ class StreamSession:
builder.add_video_stream(body.init_camera, self.video_track)
self.stream = builder.stream()
self.is_body = "testJoystick" in body.bridge_services_in
self.incoming_bridge: CerealIncomingMessageProxy | None = None
self.incoming_bridge_services = body.bridge_services_in
self.outgoing_bridge: CerealOutgoingMessageProxy | None = None
@@ -297,13 +300,26 @@ class StreamSession:
if hasattr(self.video_track, 'timing_sei_enabled'):
self.video_track.timing_sei_enabled = bool(payload["data"]["enabled"])
case _:
if payload.get("type") not in self.incoming_bridge_services:
if msg_type not in self.incoming_bridge_services:
return
if self.incoming_bridge is not None:
self.incoming_bridge.send(message)
except Exception:
self.logger.exception("Cereal incoming proxy failure")
async def run_normal_session(self):
try:
await asyncio.wait_for(self.stream.wait_for_disconnection(), timeout=SESSION_TIMEOUT_SECONDS)
except TimeoutError:
self.logger.warning("Stream session (%s) timed out after %d s", self.identifier, SESSION_TIMEOUT_SECONDS)
try:
self.stream.get_messaging_channel().send(json.dumps({"type": "disconnect", "data": "Session timed out"}))
except Exception:
pass
async def run_body_session(self):
await self.stream.wait_for_disconnection()
async def run(self):
try:
self.params.put("LivestreamRequestKeyframe", True)
@@ -320,7 +336,10 @@ class StreamSession:
self.bitrate_controller.start()
self.logger.info("Stream session (%s) connected", self.identifier)
await self.stream.wait_for_disconnection()
if self.is_body:
await self.run_body_session()
else:
await self.run_normal_session()
self.logger.info("Stream session (%s) ended", self.identifier)
except Exception:
self.logger.exception("Stream session failure")
@@ -547,7 +566,7 @@ def prewarm_stream_session_imports(debug_mode: bool = False) -> None:
def webrtcd_thread(host: str, port: int, debug: bool):
logging.basicConfig(level=logging.CRITICAL, handlers=[logging.StreamHandler()])
logging.basicConfig(level=logging.INFO, handlers=[logging.StreamHandler()])
prewarm_start = time.monotonic()
prewarm_stream_session_imports(debug)
prewarm_end = time.monotonic()