From b4d5a3ef14b576b62a2f9cb18be5ea114d18d67c Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 20 Oct 2023 17:20:38 -0600 Subject: [PATCH] Fix dangling webrtc connections (#8251) * fix dangling webrtc connections * Make more efficient * Close pc as well --- web/src/components/WebRtcPlayer.jsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/src/components/WebRtcPlayer.jsx b/web/src/components/WebRtcPlayer.jsx index a454c67d3..b5760afed 100644 --- a/web/src/components/WebRtcPlayer.jsx +++ b/web/src/components/WebRtcPlayer.jsx @@ -1,10 +1,11 @@ import { h } from 'preact'; import { baseUrl } from '../api/baseUrl'; import { useCallback, useEffect } from 'preact/hooks'; +import { useMemo } from 'react'; export default function WebRtcPlayer({ camera, width, height }) { const url = `${baseUrl.replace(/^http/, 'ws')}live/webrtc/api/ws?src=${camera}`; - + const ws = useMemo(() => new WebSocket(url), [url]) const PeerConnection = useCallback(async (media) => { const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }], @@ -60,7 +61,6 @@ export default function WebRtcPlayer({ camera, width, height }) { const connect = useCallback(async () => { const pc = await PeerConnection('video+audio'); - const ws = new WebSocket(url); ws.addEventListener('open', () => { pc.addEventListener('icecandidate', (ev) => { @@ -85,11 +85,19 @@ export default function WebRtcPlayer({ camera, width, height }) { pc.setRemoteDescription({ type: 'answer', sdp: msg.value }); } }); - }, [PeerConnection, url]); + + ws.addEventListener('close', () => { + pc.close(); + }) + }, [PeerConnection, ws]); useEffect(() => { connect(); - }, [connect]); + + return () => { + ws.close(); + } + }, [connect, ws]); return (