in src/main/java/com/amazonaws/kinesisvideo/demoapp/activity/WebRtcActivity.java [153:263]
private void initWsConnection() {
final String masterEndpoint = mWssEndpoint + "?X-Amz-ChannelARN=" + mChannelArn;
final String viewerEndpoint = mWssEndpoint + "?X-Amz-ChannelARN=" + mChannelArn + "&X-Amz-ClientId=" + mClientId;
URI signedUri;
runOnUiThread(new Runnable() {
@Override
public void run() {
mCreds = KinesisVideoWebRtcDemoApp.getCredentialsProvider().getCredentials();
}
});
signedUri = getSignedUri(masterEndpoint, viewerEndpoint);
if (master) {
createLocalPeerConnection();
}
final String wsHost = signedUri.toString();
final SignalingListener signalingListener = new SignalingListener() {
@Override
public void onSdpOffer(final Event offerEvent) {
Log.d(TAG, "Received SDP Offer: Setting Remote Description ");
final String sdp = Event.parseOfferEvent(offerEvent);
localPeer.setRemoteDescription(new KinesisVideoSdpObserver(),
new SessionDescription(SessionDescription.Type.OFFER, sdp));
recipientClientId = offerEvent.getSenderClientId();
Log.d(TAG, "Received SDP offer for client ID: " + recipientClientId + ".Creating answer");
createSdpAnswer();
}
@Override
public void onSdpAnswer(final Event answerEvent) {
Log.d(TAG, "SDP answer received from signaling");
final String sdp = Event.parseSdpEvent(answerEvent);
final SessionDescription sdpAnswer = new SessionDescription(SessionDescription.Type.ANSWER, sdp);
localPeer.setRemoteDescription(new KinesisVideoSdpObserver(), sdpAnswer);
Log.d(TAG, "Answer Client ID: " + answerEvent.getSenderClientId());
peerConnectionFoundMap.put(answerEvent.getSenderClientId(), localPeer);
// Check if ICE candidates are available in the queue and add the candidate
handlePendingIceCandidates(answerEvent.getSenderClientId());
}
@Override
public void onIceCandidate(Event message) {
Log.d(TAG, "Received IceCandidate from remote ");
final IceCandidate iceCandidate = Event.parseIceCandidate(message);
if(iceCandidate != null) {
checkAndAddIceCandidate(message, iceCandidate);
} else {
Log.e(TAG, "Invalid Ice candidate");
}
}
@Override
public void onError(Event errorMessage) {
Log.e(TAG, "Received error message" + errorMessage);
}
@Override
public void onException(Exception e) {
Log.e(TAG, "Signaling client returned exception " + e.getMessage());
gotException = true;
}
};
if (wsHost != null) {
try {
client = new SignalingServiceWebSocketClient(wsHost, signalingListener, Executors.newFixedThreadPool(10));
Log.d(TAG, "Client connection " + (client.isOpen() ? "Successful" : "Failed"));
} catch (Exception e) {
gotException = true;
}
if (isValidClient()) {
Log.d(TAG, "Client connected to Signaling service " + client.isOpen());
if (!master) {
Log.d(TAG, "Signaling service is connected: " +
"Sending offer as viewer to remote peer"); // Viewer
createSdpOffer();
}
} else {
Log.e(TAG, "Error in connecting to signaling service");
gotException = true;
}
}
}