Browse Source

Fix offer request

Mario Danic 6 years ago
parent
commit
6ef2e3bfd8

+ 13 - 20
app/src/main/java/com/nextcloud/talk/controllers/CallController.java

@@ -1219,6 +1219,9 @@ public class CallController extends BaseController {
             case "signalingMessage":
             case "signalingMessage":
                 processMessage((NCSignalingMessage) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
                 processMessage((NCSignalingMessage) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
                 break;
                 break;
+            case "peerReadyForRequestingOffer":
+                webSocketClient.requestOfferForSessionIdWithType(webSocketCommunicationEvent.getHashMap().get("sessionId"), "video");
+                break;
         }
         }
     }
     }
 
 
@@ -1280,19 +1283,13 @@ public class CallController extends BaseController {
                         magicPeerConnectionWrapper.setNick(ncSignalingMessage.getPayload().getNick());
                         magicPeerConnectionWrapper.setNick(ncSignalingMessage.getPayload().getNick());
                         SessionDescription sessionDescriptionWithPreferredCodec;
                         SessionDescription sessionDescriptionWithPreferredCodec;
 
 
-                        if (magicPeerConnectionWrapper.hasMediaStream()) {
-                            String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
-                                    (ncSignalingMessage.getPayload().getSdp(),
-                                            "VP8", false);
+                        String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
+                                (ncSignalingMessage.getPayload().getSdp(),
+                                        "VP8", false);
 
 
-                            sessionDescriptionWithPreferredCodec = new SessionDescription(
-                                    SessionDescription.Type.fromCanonicalForm(type),
-                                    sessionDescriptionStringWithPreferredCodec);
-                        } else {
-                            sessionDescriptionWithPreferredCodec = new SessionDescription(
-                                    SessionDescription.Type.fromCanonicalForm(type),
-                                    ncSignalingMessage.getPayload().getSdp());
-                        }
+                        sessionDescriptionWithPreferredCodec = new SessionDescription(
+                                SessionDescription.Type.fromCanonicalForm(type),
+                                sessionDescriptionStringWithPreferredCodec);
 
 
                         if (magicPeerConnectionWrapper.getPeerConnection() != null) {
                         if (magicPeerConnectionWrapper.getPeerConnection() != null) {
                             magicPeerConnectionWrapper.getPeerConnection().setRemoteDescription(magicPeerConnectionWrapper
                             magicPeerConnectionWrapper.getPeerConnection().setRemoteDescription(magicPeerConnectionWrapper
@@ -1485,11 +1482,7 @@ public class CallController extends BaseController {
         }
         }
 
 
         for (String sessionId : newSessions) {
         for (String sessionId : newSessions) {
-            if (!hasMCU) {
-                alwaysGetPeerConnectionWrapperForSessionId(sessionId, false);
-            } else {
-                webSocketClient.requestOfferForSessionIdWithType(sessionId, "video");
-            }
+            alwaysGetPeerConnectionWrapperForSessionId(sessionId, false);
         }
         }
 
 
         for (String sessionId : oldSesssions) {
         for (String sessionId : oldSesssions) {
@@ -1543,13 +1536,13 @@ public class CallController extends BaseController {
 
 
             if (hasMCU && publisher) {
             if (hasMCU && publisher) {
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
-                        iceServers, sdpConstraintsForMCU, sessionId, callSession, localMediaStream, true);
+                        iceServers, sdpConstraintsForMCU, sessionId, callSession, localMediaStream, true, true);
             } else if (hasMCU) {
             } else if (hasMCU) {
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
-                        iceServers, sdpConstraints, sessionId, callSession, null, false);
+                        iceServers, sdpConstraints, sessionId, callSession, null, false, true);
             } else {
             } else {
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
-                        iceServers, sdpConstraints, sessionId, callSession, localMediaStream, false);
+                        iceServers, sdpConstraints, sessionId, callSession, localMediaStream, false, false);
             }
             }
 
 
             magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
             magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);

+ 26 - 31
app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java

@@ -50,17 +50,15 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
 
 
 import androidx.annotation.Nullable;
 import androidx.annotation.Nullable;
 
 
 public class MagicPeerConnectionWrapper {
 public class MagicPeerConnectionWrapper {
     private static String TAG = "MagicPeerConnectionWrapper";
     private static String TAG = "MagicPeerConnectionWrapper";
-    List<IceCandidate> iceCandidates = new ArrayList<>();
+    private List<IceCandidate> iceCandidates = new ArrayList<>();
     private PeerConnection peerConnection;
     private PeerConnection peerConnection;
     private String sessionId;
     private String sessionId;
     private String nick;
     private String nick;
-    private String userId;
     private MediaConstraints mediaConstraints;
     private MediaConstraints mediaConstraints;
     private DataChannel magicDataChannel;
     private DataChannel magicDataChannel;
     private MagicSdpObserver magicSdpObserver;
     private MagicSdpObserver magicSdpObserver;
@@ -78,7 +76,7 @@ public class MagicPeerConnectionWrapper {
                                       List<PeerConnection.IceServer> iceServerList,
                                       List<PeerConnection.IceServer> iceServerList,
                                       MediaConstraints mediaConstraints,
                                       MediaConstraints mediaConstraints,
                                       String sessionId, String localSession, @Nullable MediaStream mediaStream,
                                       String sessionId, String localSession, @Nullable MediaStream mediaStream,
-                                      boolean isMCUPublisher) {
+                                      boolean isMCUPublisher, boolean hasMCU) {
 
 
         this.localMediaStream = mediaStream;
         this.localMediaStream = mediaStream;
 
 
@@ -97,13 +95,17 @@ public class MagicPeerConnectionWrapper {
                 peerConnection.addStream(localMediaStream);
                 peerConnection.addStream(localMediaStream);
             }
             }
 
 
-            if (isMCUPublisher || hasInitiated) {
+            if (hasMCU || hasInitiated) {
                 DataChannel.Init init = new DataChannel.Init();
                 DataChannel.Init init = new DataChannel.Init();
                 init.negotiated = false;
                 init.negotiated = false;
                 magicDataChannel = peerConnection.createDataChannel("status", init);
                 magicDataChannel = peerConnection.createDataChannel("status", init);
                 magicDataChannel.registerObserver(new MagicDataChannelObserver());
                 magicDataChannel.registerObserver(new MagicDataChannelObserver());
                 if (isMCUPublisher) {
                 if (isMCUPublisher) {
                     peerConnection.createOffer(magicSdpObserver, mediaConstraints);
                     peerConnection.createOffer(magicSdpObserver, mediaConstraints);
+                } else if (hasMCU) {
+                    HashMap<String, String> hashMap = new HashMap<>();
+                    hashMap.put("sessionId", sessionId);
+                    EventBus.getDefault().post(new WebSocketCommunicationEvent("peerReadyForRequestingOffer", hashMap));
                 }
                 }
             }
             }
         }
         }
@@ -185,16 +187,18 @@ public class MagicPeerConnectionWrapper {
     }
     }
 
 
     private void sendInitialMediaStatus() {
     private void sendInitialMediaStatus() {
-        if (localMediaStream.videoTracks.size() == 1 && localMediaStream.videoTracks.get(0).enabled()) {
-            sendChannelData(new DataChannelMessage("videoOn"));
-        } else {
-            sendChannelData(new DataChannelMessage("videoOff"));
-        }
+        if (localMediaStream != null) {
+            if (localMediaStream.videoTracks.size() == 1 && localMediaStream.videoTracks.get(0).enabled()) {
+                sendChannelData(new DataChannelMessage("videoOn"));
+            } else {
+                sendChannelData(new DataChannelMessage("videoOff"));
+            }
 
 
-        if (localMediaStream.audioTracks.size() == 1 && localMediaStream.audioTracks.get(0).enabled()) {
-            sendChannelData(new DataChannelMessage("audioOn"));
-        } else {
-            sendChannelData(new DataChannelMessage("audioOff"));
+            if (localMediaStream.audioTracks.size() == 1 && localMediaStream.audioTracks.get(0).enabled()) {
+                sendChannelData(new DataChannelMessage("audioOn"));
+            } else {
+                sendChannelData(new DataChannelMessage("audioOff"));
+            }
         }
         }
     }
     }
 
 
@@ -268,13 +272,12 @@ public class MagicPeerConnectionWrapper {
             if (iceConnectionState.equals(PeerConnection.IceConnectionState.CONNECTED)) {
             if (iceConnectionState.equals(PeerConnection.IceConnectionState.CONNECTED)) {
                 /*EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
                 /*EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
                         .PEER_CONNECTED, sessionId, null, null));*/
                         .PEER_CONNECTED, sessionId, null, null));*/
-                if (!isMCUPublisher) {
-                    EventBus.getDefault().post(new MediaStreamEvent(remoteMediaStream, sessionId));
-                }
 
 
+                //EventBus.getDefault().post(new MediaStreamEvent(remoteMediaStream, sessionId));
                 if (hasInitiated) {
                 if (hasInitiated) {
                     sendInitialMediaStatus();
                     sendInitialMediaStatus();
                 }
                 }
+
             } else if (iceConnectionState.equals(PeerConnection.IceConnectionState.CLOSED)) {
             } else if (iceConnectionState.equals(PeerConnection.IceConnectionState.CLOSED)) {
                 EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
                 EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
                         .PEER_CLOSED, sessionId, null, null));
                         .PEER_CLOSED, sessionId, null, null));
@@ -352,16 +355,12 @@ public class MagicPeerConnectionWrapper {
         @Override
         @Override
         public void onCreateSuccess(SessionDescription sessionDescription) {
         public void onCreateSuccess(SessionDescription sessionDescription) {
             SessionDescription sessionDescriptionWithPreferredCodec;
             SessionDescription sessionDescriptionWithPreferredCodec;
-            if (localMediaStream != null) {
-                String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
-                        (sessionDescription.description,
-                                "VP8", false);
-                sessionDescriptionWithPreferredCodec = new SessionDescription(
-                        sessionDescription.type,
-                        sessionDescriptionStringWithPreferredCodec);
-            } else {
-                sessionDescriptionWithPreferredCodec = sessionDescription;
-            }
+            String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
+                    (sessionDescription.description,
+                            "VP8", false);
+            sessionDescriptionWithPreferredCodec = new SessionDescription(
+                    sessionDescription.type,
+                    sessionDescriptionStringWithPreferredCodec);
 
 
 
 
             EventBus.getDefault().post(new SessionDescriptionSendEvent(sessionDescriptionWithPreferredCodec, sessionId,
             EventBus.getDefault().post(new SessionDescriptionSendEvent(sessionDescriptionWithPreferredCodec, sessionId,
@@ -385,8 +384,4 @@ public class MagicPeerConnectionWrapper {
             }
             }
         }
         }
     }
     }
-
-    public boolean hasMediaStream() {
-        return localMediaStream != null;
-    }
 }
 }