From 19a47acca111b233eb245df373cb44b5338d93ff Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Mon, 11 Aug 2025 10:48:37 +0200 Subject: [PATCH] webrtc: close WebRTC sessions when closing browser tabs (#4477) (#4849) This should decrease the delay before WebRTC sessions are marked as closed. --- internal/servers/webrtc/publish_index.html | 9 ++++++++- internal/servers/webrtc/read_index.html | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/internal/servers/webrtc/publish_index.html b/internal/servers/webrtc/publish_index.html index e3951712..0f4897ab 100644 --- a/internal/servers/webrtc/publish_index.html +++ b/internal/servers/webrtc/publish_index.html @@ -161,6 +161,7 @@ const video = document.getElementById('video'); const controls = document.getElementById('controls'); const message = document.getElementById('message'); const publishButton = document.getElementById('publish-button'); +let publisher = null; const videoForm = { device: document.getElementById('video-device'), @@ -185,7 +186,7 @@ const setMessage = (str) => { const onStream = (stream) => { video.srcObject = stream; - new MediaMTXWebRTCPublisher({ + publisher = new MediaMTXWebRTCPublisher({ url: new URL('whip', window.location.href) + window.location.search, stream, videoCodec: videoForm.codec.value, @@ -421,6 +422,12 @@ window.addEventListener('load', () => { populateOptions(); }); +window.addEventListener('beforeunload', () => { + if (publisher !== null) { + publisher.close(); + } +}); + diff --git a/internal/servers/webrtc/read_index.html b/internal/servers/webrtc/read_index.html index 875e7a2f..04c57aca 100644 --- a/internal/servers/webrtc/read_index.html +++ b/internal/servers/webrtc/read_index.html @@ -49,6 +49,7 @@ html, body { const video = document.getElementById('video'); const message = document.getElementById('message'); let defaultControls = false; +let reader = null; const setMessage = (str) => { if (str !== '') { @@ -83,7 +84,7 @@ const loadAttributesFromQuery = () => { window.addEventListener('load', () => { loadAttributesFromQuery(); - new MediaMTXWebRTCReader({ + reader = new MediaMTXWebRTCReader({ url: new URL('whep', window.location.href) + window.location.search, onError: (err) => { setMessage(err); @@ -95,6 +96,12 @@ window.addEventListener('load', () => { }); }); +window.addEventListener('beforeunload', () => { + if (reader !== null) { + reader.close(); + } +}); +