Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
ed6e101
feat: dispose frame cryptors on closing JanusConnection
Doominika Mar 11, 2026
7d14373
feat: dispose video capturers when closing JanusPublisher
Doominika Mar 11, 2026
8108bb7
feat: close session before removing it
Doominika Mar 11, 2026
5442650
feat: add close method to PeerConnectionManager
Doominika Mar 11, 2026
ed5cf8b
feat: add close method to RoomJanusSession
Doominika Mar 11, 2026
4c52d54
feat: add close method to StreamApi
Doominika Mar 11, 2026
6b4b2f3
feat: remove redundant closing publisher and subscriber from RoomJanu…
Doominika Mar 13, 2026
4586771
feat: close publishers frame cryptors
Doominika Mar 13, 2026
1a1b31e
feat: update JanusPublisher close method
Doominika Mar 17, 2026
1228e1f
feat: update PcObserver by adding dispose method
Doominika Mar 17, 2026
dbf84ee
feat: update JanusConnection close method
Doominika Mar 17, 2026
91b40bf
feat: make PeerConnectionManager autoCloseable
Doominika Mar 17, 2026
2b2079a
feat: make StreamApi autoCloseable
Doominika Mar 17, 2026
19505c0
feat: remove redundant closing method from RoomJanusSession
Doominika Mar 17, 2026
ee87cb2
feat: update after removing closing method from RoomJanusSession
Doominika Mar 17, 2026
cae52e9
Merge remote-tracking branch 'origin/android-stream-api-testing' into…
Doominika Mar 17, 2026
73dd0c4
feat: add import
Doominika Mar 17, 2026
7e3a2d9
feat: leave stream rooms when closing streamApi
Doominika Mar 18, 2026
9a1e350
Update privmx-endpoint-streams/android/src/main/java/com/simplito/jav…
Doominika Mar 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,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();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,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 @@ -102,6 +106,11 @@ public void removeVideoTrack(String id) {
if (videoTrackInfo == null) return;
peerConnection.removeTrack(videoTrackInfo.sender);
videoTracks.remove(id);

VideoTrackInfo removedVideoTrackInfo = videoTracks.remove(id);
if (removedVideoTrackInfo != null) {
removedVideoTrackInfo.frameCryptor.dispose();
}
}
}

Expand All @@ -124,9 +133,14 @@ public void setAnswer(String sdp, String type){

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

super.close();
}

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

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

@Override
public void onRemoveTrack(RtpReceiver receiver) {
MediaStreamTrack track = receiver.track();
if(track != null) {
if (track != null) {
PmxFrameCryptor removedCryptor = frameCryptorMap.remove(track.id());
if(removedCryptor != null) {
removedCryptor.dispose();
}
}
receiver.dispose();
}

public void setFrameCryptorOptions(PmxFrameCryptor.PmxFrameCryptorOptions options) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@
import com.simplito.java.privmx_endpoint.model.stream.StreamHandle;
import com.simplito.java.privmx_endpoint.model.stream.SdpWithTypeModel;

import org.webrtc.PeerConnection;
import org.webrtc.PeerConnectionFactory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;

class PeerConnectionManager {
class PeerConnectionManager implements AutoCloseable {
private final Map<String, RoomJanusSession> sessions = new HashMap<>();
private final Map<Long, String> sessionHandles = new HashMap<>();
protected final PeerConnectionFactory pcFactory;
Expand Down Expand Up @@ -45,7 +44,6 @@ public RoomJanusSession getSession(@NonNull String streamRoomId) {
return sessions.get(streamRoomId);
}


@Nullable
public RoomJanusSession getSession(@NonNull StreamHandle handle) {
String streamRoomId = sessionHandles.get(handle.getValue());
Expand All @@ -62,5 +60,15 @@ public void createHandleToRoom(
public void leaveStreamRoom(@NonNull String streamRoomId) {
sessions.remove(streamRoomId);
}

public Set<String> getRoomIds(){
return sessions.keySet();
}

@Override
public void close() throws Exception {
sessionHandles.clear();
pcFactory.dispose();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class StreamApi {
public class StreamApi implements AutoCloseable{
private final StreamApiLow api;
private final PeerConnectionManager pcManager;
public final TrackFactory trackFactory;
Expand Down Expand Up @@ -386,6 +387,13 @@ public String buildSubscriptionQuery(
);
}

@Override
public void close() throws Exception {
pcManager.getRoomIds().forEach(this::leaveStreamRoom);
pcManager.close();
api.close();
}

private List<PeerConnection.IceServer> getRTCConfiguration() {
return api.getTurnCredentials().stream().map(item ->
PeerConnection.IceServer.builder(item.url)
Expand Down