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 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..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(); + } } } @@ -130,6 +138,8 @@ public void close() { super.close(); audioTracks.clear(); videoTracks.clear(); + + videoCapturers.forEach((k, v) -> v.dispose()); videoCapturers.clear(); } 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..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 @@ -55,7 +55,21 @@ 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); + } + } + + public void close() { + try { + sessions.forEach((roomId, session) -> session.close()); + sessions.clear(); + sessionHandles.clear(); + } catch (Exception ignored) {} + + pcFactory.dispose(); } } 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..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 @@ -110,6 +110,11 @@ public void setFrameCryptorOptions(PmxFrameCryptor.PmxFrameCryptorOptions option } } + public void close(){ + // todo - to use this update aar is required + // keyStore.release(); + } + public class WebRTCImpl implements WebRTCInterface { private final ExecutorService executor = Executors.newSingleThreadExecutor(); 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(); + } }