From ed6e101c3993a0cf5558f787c96ac4cb5cad04ee Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:15:55 +0100 Subject: [PATCH 1/8] feat: dispose frame cryptors on closing JanusConnection --- .../java/privmx_endpoint/modules/stream/JanusConnection.java | 1 + 1 file changed, 1 insertion(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java index 96b438f7..e1b2be0a 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java @@ -118,6 +118,7 @@ public boolean isEnded(){ public void close(){ if(peerConnection.connectionState() != PeerConnection.PeerConnectionState.CLOSED) { peerConnection.dispose(); + pcObserver.frameCryptorMap.forEach((k,v) -> v.dispose()); } } } \ No newline at end of file From 7d14373d4b1aaea812dae06ccfbcf2cb4a2ead5d Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:16:48 +0100 Subject: [PATCH 2/8] feat: dispose video capturers when closing JanusPublisher --- .../java/privmx_endpoint/modules/stream/JanusPublisher.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java index e70a33de..4001a30e 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java @@ -130,6 +130,8 @@ public void close() { super.close(); audioTracks.clear(); videoTracks.clear(); + + videoCapturers.forEach((k, v) -> v.dispose()); videoCapturers.clear(); } From 8108bb78c0f9e1b130db4f187c4ed7c6436a4c3e Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:17:55 +0100 Subject: [PATCH 3/8] feat: close session before removing it --- .../modules/stream/PeerConnectionManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java index 26257fb0..529a9794 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java @@ -55,7 +55,11 @@ public void createHandleToRoom( } public void leaveStreamRoom(@NonNull String streamRoomId) { - sessions.remove(streamRoomId); + RoomJanusSession session = sessions.getOrDefault(streamRoomId, null); + if (session != null) { + session.close(); + sessions.remove(streamRoomId); + } } } From 544265047c16e5a401c3abbf9d8fb46a6c65ffe4 Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:18:34 +0100 Subject: [PATCH 4/8] feat: add close method to PeerConnectionManager --- .../modules/stream/PeerConnectionManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java index 529a9794..8f727c28 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PeerConnectionManager.java @@ -61,5 +61,15 @@ public void leaveStreamRoom(@NonNull String streamRoomId) { sessions.remove(streamRoomId); } } + + public void close() { + try { + sessions.forEach((roomId, session) -> session.close()); + sessions.clear(); + sessionHandles.clear(); + } catch (Exception ignored) {} + + pcFactory.dispose(); + } } From ed5cf8b7cf37459f8cc0214fdb4bf757055193cf Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:19:52 +0100 Subject: [PATCH 5/8] feat: add close method to RoomJanusSession --- .../privmx_endpoint/modules/stream/RoomJanusSession.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java index 1e98131b..c590a752 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java @@ -110,6 +110,14 @@ public void setFrameCryptorOptions(PmxFrameCryptor.PmxFrameCryptorOptions option } } + public void close(){ + if (publisher != null) publisher.close(); + if (subscriber != null) subscriber.close(); + + // todo - to use this update aar is required + // keyStore.release(); + } + public class WebRTCImpl implements WebRTCInterface { private final ExecutorService executor = Executors.newSingleThreadExecutor(); From 4c52d54a505980a7d41f24743d3d9caf5f4c4d82 Mon Sep 17 00:00:00 2001 From: Doominika Date: Wed, 11 Mar 2026 13:20:06 +0100 Subject: [PATCH 6/8] feat: add close method to StreamApi --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 956fca55..0a8b4f58 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -364,4 +364,9 @@ public String buildSubscriptionQuery( selectorId ); } + + public void close() throws Exception { + pcManager.close(); + api.close(); + } } From 6b4b2f32640a093e1e840668f7a70ca512800fc2 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 13 Mar 2026 11:30:39 +0100 Subject: [PATCH 7/8] feat: remove redundant closing publisher and subscriber from RoomJanusSession closing method --- .../java/privmx_endpoint/modules/stream/RoomJanusSession.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java index c590a752..00429339 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java @@ -111,9 +111,6 @@ public void setFrameCryptorOptions(PmxFrameCryptor.PmxFrameCryptorOptions option } public void close(){ - if (publisher != null) publisher.close(); - if (subscriber != null) subscriber.close(); - // todo - to use this update aar is required // keyStore.release(); } From 4586771739c45d594a0805e8d67de370e69177ee Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 13 Mar 2026 13:03:27 +0100 Subject: [PATCH 8/8] feat: close publishers frame cryptors --- .../modules/stream/JanusPublisher.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java index 4001a30e..d2f61c85 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java @@ -90,7 +90,11 @@ public void removeAudioTrack(String id) { AudioTrackInfo audioTrackInfo = audioTracks.get(id); if (audioTrackInfo == null) return; peerConnection.removeTrack(audioTrackInfo.sender); - audioTracks.remove(id); + + AudioTrackInfo removedAudioTrackInfo = audioTracks.remove(id); + if (removedAudioTrackInfo != null) { + removedAudioTrackInfo.frameCryptor.dispose(); + } } } @@ -99,8 +103,12 @@ public void removeVideoTrack(String id) { VideoTrackInfo videoTrackInfo = videoTracks.get(id); if (videoTrackInfo == null) return; peerConnection.removeTrack(videoTrackInfo.sender); - videoTracks.remove(id); videoCapturers.remove(id); + + VideoTrackInfo removedVideoTrackInfo = videoTracks.remove(id); + if (removedVideoTrackInfo != null) { + removedVideoTrackInfo.frameCryptor.dispose(); + } } }