From 8a7e30561921914e28b7fb9099c8ef6ec7c29110 Mon Sep 17 00:00:00 2001 From: Filipi Fuchter Date: Thu, 13 Mar 2025 17:35:47 -0300 Subject: [PATCH] Closing the old peer connection --- .../typescript/src/smallWebRTCTransport.ts | 32 ++++++++++++------- .../transports/network/small_webrtc.py | 2 +- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/examples/aiortc/video-transform/client/typescript/src/smallWebRTCTransport.ts b/examples/aiortc/video-transform/client/typescript/src/smallWebRTCTransport.ts index a79467177..676f6caf9 100644 --- a/examples/aiortc/video-transform/client/typescript/src/smallWebRTCTransport.ts +++ b/examples/aiortc/video-transform/client/typescript/src/smallWebRTCTransport.ts @@ -135,8 +135,12 @@ export class SmallWebRTCTransport { // aiortc it is not working fine when just trying to restart the ice // so in this case we are creating a new peer connection on both sides if (recreatePeerConnection) { - //this.pc?.close() + const oldPC = this.pc await this.startNewPeerConnection(recreatePeerConnection) + if (oldPC) { + this.log("closing old peer connection") + this.closePeerConnection(oldPC) + } } else { await this.negotiate(); } @@ -356,6 +360,20 @@ export class SmallWebRTCTransport { return constraints; } + private closePeerConnection(pc:RTCPeerConnection) { + pc.getTransceivers().forEach((transceiver) => { + if (transceiver.stop) { + transceiver.stop(); + } + }); + + pc.getSenders().forEach((sender) => { + sender.track?.stop(); + }); + + pc.close(); + } + stop(): void { if (!this.pc) { this.log("Peer connection is already closed or null."); @@ -366,17 +384,7 @@ export class SmallWebRTCTransport { this.dc.close(); } - this.pc.getTransceivers().forEach((transceiver) => { - if (transceiver.stop) { - transceiver.stop(); - } - }); - - this.pc.getSenders().forEach((sender) => { - sender.track?.stop(); - }); - - this.pc.close(); + this.closePeerConnection(this.pc) // For some reason after we close the peer connection, it is not triggering the listeners this.pc_id = null diff --git a/src/pipecat/transports/network/small_webrtc.py b/src/pipecat/transports/network/small_webrtc.py index 411c32838..f84d70ff8 100644 --- a/src/pipecat/transports/network/small_webrtc.py +++ b/src/pipecat/transports/network/small_webrtc.py @@ -189,7 +189,7 @@ class SmallWebRTCClient: except asyncio.TimeoutError: if self._webrtcConnection.is_connected(): logger.warning("Timeout: No video frame received within the specified time.") - self._webrtcConnection.ask_to_renegotiate() + # self._webrtcConnection.ask_to_renegotiate() frame = None except MediaStreamError: logger.warning("Received an unexpected media stream error while reading the audio.")