mirror of
https://github.com/nextcloud/talk-android.git
synced 2024-11-27 08:55:54 +03:00
Fix screensharing for MCU
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
41da72dd97
commit
0ff737d4fd
2 changed files with 20 additions and 17 deletions
|
@ -1283,7 +1283,7 @@ public class CallController extends BaseController {
|
||||||
if (ncSignalingMessage.getRoomType().equals("video") || ncSignalingMessage.getRoomType().equals("screen")) {
|
if (ncSignalingMessage.getRoomType().equals("video") || ncSignalingMessage.getRoomType().equals("screen")) {
|
||||||
MagicPeerConnectionWrapper magicPeerConnectionWrapper =
|
MagicPeerConnectionWrapper magicPeerConnectionWrapper =
|
||||||
getPeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(),
|
getPeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(),
|
||||||
ncSignalingMessage.getRoomType(),false);
|
ncSignalingMessage.getRoomType(), false);
|
||||||
|
|
||||||
String type = null;
|
String type = null;
|
||||||
if (ncSignalingMessage.getPayload() != null && ncSignalingMessage.getPayload().getType() != null) {
|
if (ncSignalingMessage.getPayload() != null && ncSignalingMessage.getPayload().getType() != null) {
|
||||||
|
@ -1505,7 +1505,7 @@ public class CallController extends BaseController {
|
||||||
hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU();
|
hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU();
|
||||||
|
|
||||||
for (String sessionId : newSessions) {
|
for (String sessionId : newSessions) {
|
||||||
getPeerConnectionWrapperForSessionIdAndType(sessionId, "video",hasMCU && sessionId.equals(webSocketClient.getSessionId()));
|
getPeerConnectionWrapperForSessionIdAndType(sessionId, "video", hasMCU && sessionId.equals(webSocketClient.getSessionId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String sessionId : oldSesssions) {
|
for (String sessionId : oldSesssions) {
|
||||||
|
@ -1600,17 +1600,12 @@ public class CallController extends BaseController {
|
||||||
private void endPeerConnection(String sessionId, boolean justScreen) {
|
private void endPeerConnection(String sessionId, boolean justScreen) {
|
||||||
List<MagicPeerConnectionWrapper> magicPeerConnectionWrappers;
|
List<MagicPeerConnectionWrapper> magicPeerConnectionWrappers;
|
||||||
MagicPeerConnectionWrapper magicPeerConnectionWrapper;
|
MagicPeerConnectionWrapper magicPeerConnectionWrapper;
|
||||||
if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty() && getActivity()
|
if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty()
|
||||||
!= null) {
|
&& getActivity() != null) {
|
||||||
for (int i = 0; i < magicPeerConnectionWrappers.size(); i++) {
|
for (int i = 0; i < magicPeerConnectionWrappers.size(); i++) {
|
||||||
magicPeerConnectionWrapper = magicPeerConnectionWrappers.get(i);
|
magicPeerConnectionWrapper = magicPeerConnectionWrappers.get(i);
|
||||||
if (magicPeerConnectionWrapper.getSessionId().equals(sessionId)) {
|
if (magicPeerConnectionWrapper.getSessionId().equals(sessionId)) {
|
||||||
if (magicPeerConnectionWrapper.getVideoStreamType().equals("screen")) {
|
if (magicPeerConnectionWrapper.getVideoStreamType().equals("screen") || !justScreen) {
|
||||||
MagicPeerConnectionWrapper finalMagicPeerConnectionWrapper = magicPeerConnectionWrapper;
|
|
||||||
getActivity().runOnUiThread(() -> removeMediaStream(sessionId + "+" +
|
|
||||||
finalMagicPeerConnectionWrapper.getVideoStreamType()));
|
|
||||||
deleteMagicPeerConnection(magicPeerConnectionWrapper);
|
|
||||||
} else if (!justScreen) {
|
|
||||||
MagicPeerConnectionWrapper finalMagicPeerConnectionWrapper = magicPeerConnectionWrapper;
|
MagicPeerConnectionWrapper finalMagicPeerConnectionWrapper = magicPeerConnectionWrapper;
|
||||||
getActivity().runOnUiThread(() -> removeMediaStream(sessionId + "+" +
|
getActivity().runOnUiThread(() -> removeMediaStream(sessionId + "+" +
|
||||||
finalMagicPeerConnectionWrapper.getVideoStreamType()));
|
finalMagicPeerConnectionWrapper.getVideoStreamType()));
|
||||||
|
@ -1650,7 +1645,7 @@ public class CallController extends BaseController {
|
||||||
public void onMessageEvent(PeerConnectionEvent peerConnectionEvent) {
|
public void onMessageEvent(PeerConnectionEvent peerConnectionEvent) {
|
||||||
if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType
|
if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType
|
||||||
.PEER_CLOSED)) {
|
.PEER_CLOSED)) {
|
||||||
endPeerConnection(peerConnectionEvent.getSessionId(), false);
|
endPeerConnection(peerConnectionEvent.getSessionId(), peerConnectionEvent.getVideoStreamType().equals("screen"));
|
||||||
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
||||||
.PeerConnectionEventType.SENSOR_FAR) ||
|
.PeerConnectionEventType.SENSOR_FAR) ||
|
||||||
peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
||||||
|
@ -1667,7 +1662,7 @@ public class CallController extends BaseController {
|
||||||
}
|
}
|
||||||
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
||||||
.PeerConnectionEventType.NICK_CHANGE)) {
|
.PeerConnectionEventType.NICK_CHANGE)) {
|
||||||
gotNick(peerConnectionEvent.getSessionId() + "+" + peerConnectionEvent.getVideoStreamType(), peerConnectionEvent.getNick(), true);
|
gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick(), true, peerConnectionEvent.getVideoStreamType());
|
||||||
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
|
||||||
.PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) {
|
.PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) {
|
||||||
gotAudioOrVideoChange(true, peerConnectionEvent.getSessionId() + "+" + peerConnectionEvent.getVideoStreamType(),
|
gotAudioOrVideoChange(true, peerConnectionEvent.getSessionId() + "+" + peerConnectionEvent.getVideoStreamType(),
|
||||||
|
@ -1906,9 +1901,9 @@ public class CallController extends BaseController {
|
||||||
surfaceViewRenderer.setOnClickListener(videoOnClickListener);
|
surfaceViewRenderer.setOnClickListener(videoOnClickListener);
|
||||||
remoteRenderersLayout.addView(relativeLayout);
|
remoteRenderersLayout.addView(relativeLayout);
|
||||||
if (hasExternalSignalingServer) {
|
if (hasExternalSignalingServer) {
|
||||||
gotNick(session + "+" + type, webSocketClient.getDisplayNameForSession(session), false);
|
gotNick(session, webSocketClient.getDisplayNameForSession(session), false, type);
|
||||||
} else {
|
} else {
|
||||||
gotNick(session + "+" + type, getPeerConnectionWrapperForSessionIdAndType(session, "video", false).getNick(), false);
|
gotNick(session, getPeerConnectionWrapperForSessionIdAndType(session, type, false).getNick(), false, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("video".equals(type)) {
|
if ("video".equals(type)) {
|
||||||
|
@ -1920,12 +1915,14 @@ public class CallController extends BaseController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent) {
|
private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent, String type) {
|
||||||
if (isFromAnEvent && hasExternalSignalingServer) {
|
if (isFromAnEvent && hasExternalSignalingServer) {
|
||||||
// get session based on userId
|
// get session based on userId
|
||||||
sessionOrUserId = webSocketClient.getSessionForUserId(sessionOrUserId);
|
sessionOrUserId = webSocketClient.getSessionForUserId(sessionOrUserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sessionOrUserId += "+" + type;
|
||||||
|
|
||||||
if (relativeLayout != null) {
|
if (relativeLayout != null) {
|
||||||
RelativeLayout relativeLayout = remoteRenderersLayout.findViewWithTag(sessionOrUserId);
|
RelativeLayout relativeLayout = remoteRenderersLayout.findViewWithTag(sessionOrUserId);
|
||||||
TextView textView = relativeLayout.findViewById(R.id.peer_nick_text_view);
|
TextView textView = relativeLayout.findViewById(R.id.peer_nick_text_view);
|
||||||
|
|
|
@ -29,6 +29,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||||
import com.nextcloud.talk.events.WebSocketCommunicationEvent;
|
import com.nextcloud.talk.events.WebSocketCommunicationEvent;
|
||||||
import com.nextcloud.talk.models.database.UserEntity;
|
import com.nextcloud.talk.models.database.UserEntity;
|
||||||
import com.nextcloud.talk.models.json.signaling.NCMessageWrapper;
|
import com.nextcloud.talk.models.json.signaling.NCMessageWrapper;
|
||||||
|
import com.nextcloud.talk.models.json.signaling.NCSignalingMessage;
|
||||||
import com.nextcloud.talk.models.json.websocket.BaseWebSocketMessage;
|
import com.nextcloud.talk.models.json.websocket.BaseWebSocketMessage;
|
||||||
import com.nextcloud.talk.models.json.websocket.ByeWebSocketMessage;
|
import com.nextcloud.talk.models.json.websocket.ByeWebSocketMessage;
|
||||||
import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage;
|
import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage;
|
||||||
|
@ -201,9 +202,14 @@ public class MagicWebSocketInstance extends WebSocketListener {
|
||||||
break;
|
break;
|
||||||
case "message":
|
case "message":
|
||||||
CallOverallWebSocketMessage callOverallWebSocketMessage = LoganSquare.parse(text, CallOverallWebSocketMessage.class);
|
CallOverallWebSocketMessage callOverallWebSocketMessage = LoganSquare.parse(text, CallOverallWebSocketMessage.class);
|
||||||
if (callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage().getFrom() != null) {
|
NCSignalingMessage ncSignalingMessage = callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage();
|
||||||
|
if (TextUtils.isEmpty(ncSignalingMessage.getFrom()) && callOverallWebSocketMessage.getCallWebSocketMessage().getSenderWebSocketMessage() != null) {
|
||||||
|
ncSignalingMessage.setFrom(callOverallWebSocketMessage.getCallWebSocketMessage().getSenderWebSocketMessage().getSessionId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!TextUtils.isEmpty(ncSignalingMessage.getFrom())) {
|
||||||
HashMap<String, String> messageHashMap = new HashMap<>();
|
HashMap<String, String> messageHashMap = new HashMap<>();
|
||||||
messageHashMap.put("jobId", Integer.toString(magicMap.add(callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage())));
|
messageHashMap.put("jobId", Integer.toString(magicMap.add(ncSignalingMessage)));
|
||||||
eventBus.post(new WebSocketCommunicationEvent("signalingMessage", messageHashMap));
|
eventBus.post(new WebSocketCommunicationEvent("signalingMessage", messageHashMap));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue