Browse Source

Fix media stream & data channel messages sending

Mario Danic 6 years ago
parent
commit
8af047926e

+ 15 - 6
app/src/main/java/com/nextcloud/talk/controllers/CallController.java

@@ -248,6 +248,7 @@ public class CallController extends BaseController {
     private ExternalSignalingServer externalSignalingServer;
     private MagicWebSocketInstance webSocketClient;
     private WebSocketConnectionHelper webSocketConnectionHelper;
+    private boolean hasMCU;
 
     public CallController(Bundle args) {
         super(args);
@@ -793,8 +794,18 @@ public class CallController extends BaseController {
         }
 
         if (inCall) {
-            for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
-                magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
+            if (!hasMCU) {
+                for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
+                    magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
+                }
+            } else {
+                for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
+                    if (magicPeerConnectionWrapperList.get(i).getSessionId().equals(callSession)) {
+                        magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
+                        break;
+
+                    }
+                }
             }
         }
     }
@@ -1493,18 +1504,16 @@ public class CallController extends BaseController {
         if ((magicPeerConnectionWrapper = getPeerConnectionWrapperForSessionId(sessionId)) != null) {
             return magicPeerConnectionWrapper;
         } else {
-            boolean hasMCU = webSocketClient != null && webSocketClient.hasMCU();
+            hasMCU = webSocketClient != null && webSocketClient.hasMCU();
 
             if (hasMCU) {
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
-                        iceServers, sdpConstraintsForMCU, sessionId, callSession, localMediaStream, hasMCU);
+                        iceServers, sdpConstraintsForMCU, sessionId, callSession, null, hasMCU);
             } else {
                 magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
                         iceServers, sdpConstraints, sessionId, callSession, localMediaStream, hasMCU);
             }
 
-            magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
-                    iceServers, sdpConstraints, sessionId, callSession, localMediaStream, hasMCU);
             magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
             return magicPeerConnectionWrapper;
         }

+ 3 - 1
app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java

@@ -87,7 +87,9 @@ public class MagicPeerConnectionWrapper {
                 new MagicPeerConnectionObserver());
 
         if (peerConnection != null) {
-            peerConnection.addStream(localMediaStream);
+            if (localSession != null) {
+                peerConnection.addStream(localMediaStream);
+            }
 
             if (hasInitiated || hasMCU) {
                 DataChannel.Init init = new DataChannel.Init();