|
@@ -126,9 +126,7 @@ public class CallActivity extends AppCompatActivity {
|
|
AudioTrack localAudioTrack;
|
|
AudioTrack localAudioTrack;
|
|
VideoCapturer videoCapturer;
|
|
VideoCapturer videoCapturer;
|
|
VideoRenderer localRenderer;
|
|
VideoRenderer localRenderer;
|
|
- VideoRenderer remoteRenderer;
|
|
|
|
HashMap<String, VideoRenderer> videoRendererHashMap = new HashMap<>();
|
|
HashMap<String, VideoRenderer> videoRendererHashMap = new HashMap<>();
|
|
- PeerConnection localPeer;
|
|
|
|
EglBase rootEglBase;
|
|
EglBase rootEglBase;
|
|
boolean leavingCall = false;
|
|
boolean leavingCall = false;
|
|
BooleanSupplier booleanSupplier = () -> leavingCall;
|
|
BooleanSupplier booleanSupplier = () -> leavingCall;
|
|
@@ -322,8 +320,6 @@ public class CallActivity extends AppCompatActivity {
|
|
@Override
|
|
@Override
|
|
public void onNext(GenericOverall genericOverall) {
|
|
public void onNext(GenericOverall genericOverall) {
|
|
callSession = callOverall.getOcs().getData().getSessionId();
|
|
callSession = callOverall.getOcs().getData().getSessionId();
|
|
- localPeer = alwaysGetPeerConnectionWrapperForSessionId(callSession).
|
|
|
|
- getPeerConnection();
|
|
|
|
|
|
|
|
// start pinging the call
|
|
// start pinging the call
|
|
ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()),
|
|
ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()),
|
|
@@ -360,7 +356,8 @@ public class CallActivity extends AppCompatActivity {
|
|
userEntity.getToken()), ApiHelper.getUrlForSignaling(userEntity.getBaseUrl()))
|
|
userEntity.getToken()), ApiHelper.getUrlForSignaling(userEntity.getBaseUrl()))
|
|
.subscribeOn(Schedulers.newThread())
|
|
.subscribeOn(Schedulers.newThread())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
- .repeatWhen(observable -> observable.delay(1500, TimeUnit.MILLISECONDS))
|
|
|
|
|
|
+ .repeatWhen(observable -> observable.delay(1500, TimeUnit
|
|
|
|
+ .MILLISECONDS))
|
|
.repeatUntil(booleanSupplier)
|
|
.repeatUntil(booleanSupplier)
|
|
.retry(3)
|
|
.retry(3)
|
|
.subscribe(new Observer<SignalingOverall>() {
|
|
.subscribe(new Observer<SignalingOverall>() {
|
|
@@ -487,7 +484,8 @@ public class CallActivity extends AppCompatActivity {
|
|
List<String> oldSesssions = new ArrayList<>();
|
|
List<String> oldSesssions = new ArrayList<>();
|
|
|
|
|
|
for (HashMap<String, String> participant : users) {
|
|
for (HashMap<String, String> participant : users) {
|
|
- if (!participant.get("sessionId").equals(callSession) && Boolean.parseBoolean(participant.get("inCall"))) {
|
|
|
|
|
|
+ Object inCallObject = participant.get("inCall");
|
|
|
|
+ if (!participant.get("sessionId").equals(callSession) && (boolean)inCallObject) {
|
|
newSessions.add(participant.get("sessionId"));
|
|
newSessions.add(participant.get("sessionId"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -533,8 +531,7 @@ public class CallActivity extends AppCompatActivity {
|
|
return magicPeerConnectionWrapper;
|
|
return magicPeerConnectionWrapper;
|
|
} else {
|
|
} else {
|
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
|
- iceServers, sdpConstraints, sessionId, callSession);
|
|
|
|
- magicPeerConnectionWrapper.getPeerConnection().addStream(localMediaStream);
|
|
|
|
|
|
+ iceServers, sdpConstraints, sessionId, callSession, localMediaStream);
|
|
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
|
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
|
return magicPeerConnectionWrapper;
|
|
return magicPeerConnectionWrapper;
|
|
}
|
|
}
|
|
@@ -554,6 +551,10 @@ public class CallActivity extends AppCompatActivity {
|
|
leavingCall = true;
|
|
leavingCall = true;
|
|
dispose(null);
|
|
dispose(null);
|
|
|
|
|
|
|
|
+ for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
|
|
|
|
+ endPeerConnection(magicPeerConnectionWrapperList.get(i).getSessionId());
|
|
|
|
+
|
|
|
|
+ }
|
|
for (MagicPeerConnectionWrapper magicPeerConnectionWrapper : magicPeerConnectionWrapperList) {
|
|
for (MagicPeerConnectionWrapper magicPeerConnectionWrapper : magicPeerConnectionWrapperList) {
|
|
endPeerConnection(magicPeerConnectionWrapper.getSessionId());
|
|
endPeerConnection(magicPeerConnectionWrapper.getSessionId());
|
|
}
|
|
}
|
|
@@ -665,8 +666,8 @@ public class CallActivity extends AppCompatActivity {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void onDestroy() {
|
|
public void onDestroy() {
|
|
- super.onDestroy();
|
|
|
|
hangup();
|
|
hangup();
|
|
|
|
+ super.onDestroy();
|
|
}
|
|
}
|
|
|
|
|
|
private void dispose(@Nullable Disposable disposable) {
|
|
private void dispose(@Nullable Disposable disposable) {
|
|
@@ -739,12 +740,12 @@ public class CallActivity extends AppCompatActivity {
|
|
ncMessageWrapper.setEv("message");
|
|
ncMessageWrapper.setEv("message");
|
|
ncMessageWrapper.setSessionId(callSession);
|
|
ncMessageWrapper.setSessionId(callSession);
|
|
NCSignalingMessage ncSignalingMessage = new NCSignalingMessage();
|
|
NCSignalingMessage ncSignalingMessage = new NCSignalingMessage();
|
|
- ncSignalingMessage.setFrom(callSession);
|
|
|
|
ncSignalingMessage.setTo(sessionDescriptionSend.getPeerId());
|
|
ncSignalingMessage.setTo(sessionDescriptionSend.getPeerId());
|
|
ncSignalingMessage.setRoomType("video");
|
|
ncSignalingMessage.setRoomType("video");
|
|
ncSignalingMessage.setType(sessionDescriptionSend.getType());
|
|
ncSignalingMessage.setType(sessionDescriptionSend.getType());
|
|
NCMessagePayload ncMessagePayload = new NCMessagePayload();
|
|
NCMessagePayload ncMessagePayload = new NCMessagePayload();
|
|
ncMessagePayload.setType(sessionDescriptionSend.getType());
|
|
ncMessagePayload.setType(sessionDescriptionSend.getType());
|
|
|
|
+
|
|
if (!"candidate".equals(sessionDescriptionSend.getType())) {
|
|
if (!"candidate".equals(sessionDescriptionSend.getType())) {
|
|
ncMessagePayload.setSdp(sessionDescriptionSend.getSessionDescription().description);
|
|
ncMessagePayload.setSdp(sessionDescriptionSend.getSessionDescription().description);
|
|
ncMessagePayload.setNick(userEntity.getDisplayName());
|
|
ncMessagePayload.setNick(userEntity.getDisplayName());
|