From: Marcel van der Veldt Date: Sat, 6 Dec 2025 10:53:08 +0000 (+0100) Subject: Fix WebRTC ICE servers exchange X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=738768e2637e870a235f26e0c3f8d45f2db6181e;p=music-assistant-server.git Fix WebRTC ICE servers exchange --- diff --git a/music_assistant/controllers/webserver/remote_access/gateway.py b/music_assistant/controllers/webserver/remote_access/gateway.py index ad49584e..b9c967d1 100644 --- a/music_assistant/controllers/webserver/remote_access/gateway.py +++ b/music_assistant/controllers/webserver/remote_access/gateway.py @@ -243,15 +243,23 @@ class WebRTCGateway: async def _register(self) -> None: """Register with the signaling server.""" if self._signaling_ws: + # Prepare ICE servers for the signaling server to relay to clients + # Mask credentials in logs for security + ice_servers_for_log = [ + {k: v if k != "credential" else "***" for k, v in s.items()} + for s in self.ice_servers + ] registration_msg = { "type": "register-server", "remoteId": self.remote_id, + "iceServers": self.ice_servers, } self.logger.debug( - "Sending registration to signaling server with Remote ID: %s", + "Sending registration with Remote ID: %s and %d ICE servers: %s", self.remote_id, + len(self.ice_servers), + ice_servers_for_log, ) - self.logger.debug("Registration message: %s", registration_msg) await self._signaling_ws.send_json(registration_msg) self.logger.debug("Registration message sent successfully") else: @@ -302,6 +310,15 @@ class WebRTCGateway: :param session_id: The session ID. """ + self.logger.debug( + "Creating session %s with %d ICE servers: %s", + session_id, + len(self.ice_servers), + [ + {k: v if k != "credential" else "***" for k, v in s.items()} + for s in self.ice_servers + ], + ) config = RTCConfiguration( iceServers=[RTCIceServer(**server) for server in self.ice_servers] ) @@ -400,6 +417,16 @@ class WebRTCGateway: ) return + # Debug: Log ICE candidates in the answer SDP + sdp_lines = pc.localDescription.sdp.split("\n") + ice_candidates = [line for line in sdp_lines if line.startswith("a=candidate:")] + self.logger.debug( + "Session %s answer SDP contains %d ICE candidates: %s", + session_id, + len(ice_candidates), + ice_candidates, + ) + if self._signaling_ws: await self._signaling_ws.send_json( {