Mercurial > libervia-web
diff libervia/web/pages/calls/_browser/webrtc.py @ 1559:410064b31dca
browser (calls): add some logs useful for debugging
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 16 Aug 2023 16:52:53 +0200 |
parents | 83c2a6faa2ae |
children | 7dbb131bbb9e |
line wrap: on
line diff
--- a/libervia/web/pages/calls/_browser/webrtc.py Tue Aug 15 17:30:20 2023 +0200 +++ b/libervia/web/pages/calls/_browser/webrtc.py Wed Aug 16 16:52:53 2023 +0200 @@ -18,6 +18,7 @@ def __init__(self): self.reset_instance() bridge.register_signal("ice_candidates_new", self._on_ice_candidates_new) + bridge.register_signal("ice_restart", self._on_ice_restart) self.is_audio_muted = None self.is_video_muted = None self._is_sharing_screen = False @@ -186,6 +187,23 @@ else: log.debug("All ICE candidates gathered") + def on_ice_connection_state_change(self, event): + """Log ICE connection change, mainly used for debugging""" + state = self._peer_connection.iceConnectionState + log.info(f"ICE Connection State changed to: {state}") + + if state == "failed": + log.error("ICE connection failed. Check network connectivity and ICE configurations.") + elif state == "disconnected": + log.warning("ICE connection was disconnected.") + + def on_ice_candidate_error(self, event): + """Log ICE error, useful for debugging""" + log.error(f"ICE Candidate Error: {event.errorText} (Code: {event.errorCode})") + log.debug( + f"URL: {event.url}, Host candidate: {event.hostCandidate}, Port: {event.port}" + ) + def _set_media_types(self, offer): """Sets media types from offer SDP @@ -240,7 +258,12 @@ peer_connection = window.RTCPeerConnection.new(rtc_configuration) peer_connection.addEventListener("track", self.on_track) peer_connection.addEventListener("negotiationneeded", self.on_negotiation_needed) + peer_connection.addEventListener( + "iceconnectionstatechange", + self.on_ice_connection_state_change + ) peer_connection.addEventListener("icecandidate", self.on_ice_candidate) + peer_connection.addEventListener("icecandidateerror", self.on_ice_candidate_error) peer_connection.addEventListener( "icegatheringstatechange", self.on_ice_gathering_state_change ) @@ -401,6 +424,12 @@ candidates = json.loads(candidates_s) aio.run(self.on_ice_candidates_new(candidates)) + def _on_ice_restart(self, sid: str, side: str, profile: str): + if sid != self.sid: + log.debug(f"ignoring peer ice candidates for {sid=} ({self.sid=}).") + return + log.debug("ICE has been restarted") + async def on_ice_candidates_new(self, candidates: dict) -> None: """Called when new ICE canidates are received from peer