in src/main/java/com/amazonaws/kinesisvideo/demoapp/activity/WebRtcActivity.java [284:315]
private void checkAndAddIceCandidate(Event message, IceCandidate iceCandidate) {
// if answer/offer is not received, it means peer connection is not found. Hold the received ICE candidates in the map.
if(!peerConnectionFoundMap.containsKey(message.getSenderClientId())) {
Log.d(TAG, "SDP exchange is not complete. Ice candidate " + iceCandidate + " + added to pending queue");
// If the entry for the client ID already exists (in case of subsequent ICE candidates), update the queue
if(pendingIceCandidatesMap.containsKey(message.getSenderClientId())) {
Queue<IceCandidate> pendingIceCandidatesQueueByClientId = pendingIceCandidatesMap.get(message.getSenderClientId());
pendingIceCandidatesQueueByClientId.add(iceCandidate);
pendingIceCandidatesMap.put(message.getSenderClientId(), pendingIceCandidatesQueueByClientId);
}
// If the first ICE candidate before peer connection is received, add entry to map and ICE candidate to a queue
else {
Queue<IceCandidate> pendingIceCandidatesQueueByClientId = new LinkedList<>();
pendingIceCandidatesQueueByClientId.add(iceCandidate);
pendingIceCandidatesMap.put(message.getSenderClientId(), pendingIceCandidatesQueueByClientId);
}
}
// This is the case where peer connection is established and ICE candidates are received for the established
// connection
else {
Log.d(TAG, "Peer connection found already");
// Remote sent us ICE candidates, add to local peer connection
final PeerConnection peer = peerConnectionFoundMap.get(message.getSenderClientId());
final boolean addIce = peer.addIceCandidate(iceCandidate);
Log.d(TAG, "Added ice candidate " + iceCandidate + " " + (addIce ? "Successfully" : "Failed"));
}
}