Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,10 @@ public boolean isEnded(){
peerConnection.connectionState() == PeerConnection.PeerConnectionState.FAILED;
}

public void close(){
if(peerConnection.connectionState() != PeerConnection.PeerConnectionState.CLOSED) {
public void close() {
if (peerConnection.connectionState() != PeerConnection.PeerConnectionState.CLOSED) {
peerConnection.dispose();
pcObserver.dispose();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
}

Expand All @@ -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();
}
}
}

Expand All @@ -127,10 +135,16 @@ public VideoCapturer getVideoCapturer(String trackId){

@Override
public void close() {
super.close();
try {
audioTracks.values().forEach(track -> track.frameCryptor.dispose());
videoTracks.values().forEach(track -> track.frameCryptor.dispose());
} catch (IllegalStateException ignored) {}
audioTracks.clear();
videoTracks.clear();

videoCapturers.forEach((k, v) -> v.dispose());
videoCapturers.clear();
super.close();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,31 @@ public void onAddTrack(RtpReceiver receiver, MediaStream[] mediaStreams) {
}
}

public void dispose() {
frameCryptorMap.forEach((id, cryptor) -> {
if (cryptor != null) cryptor.dispose();
});
frameCryptorMap.clear();

onAddTrack = null;
onVideoTrack = null;
onIceCandidate = null;
}

@Override
public void onRemoveTrack(RtpReceiver receiver) {
//TODO: cleanup track cryptors (?)
// onRemoveTrack.accept(receiver.track());
MediaStreamTrack track = receiver.track();
if (track != null) {
String trackId = track.id();
if (trackId != null) {
PmxFrameCryptor cryptor = frameCryptorMap.remove(trackId);
if (cryptor != null) cryptor.dispose();

streamIdsByTracks.remove(trackId);
}
}
receiver.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,4 +364,9 @@ public String buildSubscriptionQuery(
selectorId
);
}

public void close() throws Exception {
pcManager.close();
api.close();
}
}