mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 12:39:58 +01:00
Improve data channel handling
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
a621401520
commit
b98bb93e44
@ -298,7 +298,6 @@ public class CallActivity extends AppCompatActivity {
|
|||||||
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true"));
|
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true"));
|
||||||
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
|
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
|
||||||
|
|
||||||
|
|
||||||
ncApi.joinRoom(credentials, ApiHelper.getUrlForJoinRoom(userEntity.getBaseUrl(), roomToken))
|
ncApi.joinRoom(credentials, ApiHelper.getUrlForJoinRoom(userEntity.getBaseUrl(), roomToken))
|
||||||
.subscribeOn(Schedulers.newThread())
|
.subscribeOn(Schedulers.newThread())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
@ -547,7 +546,7 @@ public class CallActivity extends AppCompatActivity {
|
|||||||
return magicPeerConnectionWrapper;
|
return magicPeerConnectionWrapper;
|
||||||
} else {
|
} else {
|
||||||
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
||||||
iceServers, sdpConstraints, sessionId);
|
iceServers, sdpConstraints, sessionId, callSession);
|
||||||
magicPeerConnectionWrapper.getPeerConnection().addStream(localMediaStream);
|
magicPeerConnectionWrapper.getPeerConnection().addStream(localMediaStream);
|
||||||
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
||||||
return magicPeerConnectionWrapper;
|
return magicPeerConnectionWrapper;
|
||||||
|
@ -36,7 +36,6 @@ import android.support.v7.widget.RecyclerView;
|
|||||||
import android.support.v7.widget.SearchView;
|
import android.support.v7.widget.SearchView;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@ -237,7 +236,6 @@ public class CallsListController extends BaseController implements SearchView.On
|
|||||||
|
|
||||||
callItems = new ArrayList<>();
|
callItems = new ArrayList<>();
|
||||||
|
|
||||||
Log.d("MARIO", userEntity.getUsername());
|
|
||||||
roomsQueryDisposable = ncApi.getRooms(ApiHelper.getCredentials(userEntity.getUsername(),
|
roomsQueryDisposable = ncApi.getRooms(ApiHelper.getCredentials(userEntity.getUsername(),
|
||||||
userEntity.getToken()), ApiHelper.getUrlForGetRooms(userEntity.getBaseUrl()))
|
userEntity.getToken()), ApiHelper.getUrlForGetRooms(userEntity.getBaseUrl()))
|
||||||
.subscribeOn(Schedulers.newThread())
|
.subscribeOn(Schedulers.newThread())
|
||||||
|
@ -48,9 +48,10 @@ public class MagicPeerConnectionWrapper {
|
|||||||
private static String TAG = "MagicPeerConnectionWrapper";
|
private static String TAG = "MagicPeerConnectionWrapper";
|
||||||
private static PeerConnection peerConnection;
|
private static PeerConnection peerConnection;
|
||||||
List<IceCandidate> iceCandidates = new ArrayList<>();
|
List<IceCandidate> iceCandidates = new ArrayList<>();
|
||||||
List<PeerConnection.IceServer> iceServers;
|
private List<PeerConnection.IceServer> iceServers;
|
||||||
List<NCIceCandidate> localCandidates = new ArrayList<>();
|
private List<NCIceCandidate> localCandidates = new ArrayList<>();
|
||||||
private String sessionId;
|
private String sessionId;
|
||||||
|
private String localSession;
|
||||||
private String nick;
|
private String nick;
|
||||||
private MediaConstraints mediaConstraints;
|
private MediaConstraints mediaConstraints;
|
||||||
private DataChannel magicDataChannel;
|
private DataChannel magicDataChannel;
|
||||||
@ -62,19 +63,22 @@ public class MagicPeerConnectionWrapper {
|
|||||||
public MagicPeerConnectionWrapper(PeerConnectionFactory peerConnectionFactory,
|
public MagicPeerConnectionWrapper(PeerConnectionFactory peerConnectionFactory,
|
||||||
List<PeerConnection.IceServer> iceServerList,
|
List<PeerConnection.IceServer> iceServerList,
|
||||||
MediaConstraints mediaConstraints,
|
MediaConstraints mediaConstraints,
|
||||||
String sessionId) {
|
String sessionId, String localSession) {
|
||||||
|
|
||||||
this.iceServers = iceServerList;
|
this.iceServers = iceServerList;
|
||||||
|
|
||||||
peerConnection = peerConnectionFactory.createPeerConnection(iceServerList, mediaConstraints,
|
peerConnection = peerConnectionFactory.createPeerConnection(iceServerList, mediaConstraints,
|
||||||
new MagicPeerConnectionObserver());
|
new MagicPeerConnectionObserver());
|
||||||
|
|
||||||
DataChannel.Init init = new DataChannel.Init();
|
if (sessionId.compareTo(localSession) < 0) {
|
||||||
init.negotiated = false;
|
DataChannel.Init init = new DataChannel.Init();
|
||||||
magicDataChannel = peerConnection.createDataChannel("status", init);
|
init.negotiated = false;
|
||||||
magicDataChannel.registerObserver(new MagicDataChannelObserver());
|
magicDataChannel = peerConnection.createDataChannel("status", init);
|
||||||
|
magicDataChannel.registerObserver(new MagicDataChannelObserver());
|
||||||
|
}
|
||||||
|
|
||||||
this.sessionId = sessionId;
|
this.sessionId = sessionId;
|
||||||
|
this.localSession = localSession;
|
||||||
this.mediaConstraints = mediaConstraints;
|
this.mediaConstraints = mediaConstraints;
|
||||||
|
|
||||||
magicSdpObserver = new MagicSdpObserver();
|
magicSdpObserver = new MagicSdpObserver();
|
||||||
@ -119,7 +123,7 @@ public class MagicPeerConnectionWrapper {
|
|||||||
buffer = ByteBuffer.wrap(LoganSquare.serialize(dataChannelMessage).getBytes());
|
buffer = ByteBuffer.wrap(LoganSquare.serialize(dataChannelMessage).getBytes());
|
||||||
magicDataChannel.send(new DataChannel.Buffer(buffer, false));
|
magicDataChannel.send(new DataChannel.Buffer(buffer, false));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
Log.d(TAG, "Failed to send channel data");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +166,6 @@ public class MagicPeerConnectionWrapper {
|
|||||||
sendChannelData(new DataChannelMessage("videoOn"));
|
sendChannelData(new DataChannelMessage("videoOn"));
|
||||||
sendChannelData(new DataChannelMessage("audioOn"));
|
sendChannelData(new DataChannelMessage("audioOn"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -187,12 +190,11 @@ public class MagicPeerConnectionWrapper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSignalingChange(PeerConnection.SignalingState signalingState) {
|
public void onSignalingChange(PeerConnection.SignalingState signalingState) {
|
||||||
|
Log.d("MARIO", signalingState.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) {
|
public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -241,7 +243,11 @@ public class MagicPeerConnectionWrapper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDataChannel(DataChannel dataChannel) {
|
public void onDataChannel(DataChannel dataChannel) {
|
||||||
|
Log.d("MARIO", "DATA");
|
||||||
|
if (dataChannel.label().equals("status")) {
|
||||||
|
magicDataChannel = dataChannel;
|
||||||
|
magicDataChannel.registerObserver(new MagicDataChannelObserver());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user