mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-12 02:19:44 +00:00
Move handling of WebRTC messages to PeerConnectionWrapper
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
f3e04b8e18
commit
4dffd29ceb
@ -116,14 +116,12 @@ import org.webrtc.CameraVideoCapturer;
|
|||||||
import org.webrtc.DefaultVideoDecoderFactory;
|
import org.webrtc.DefaultVideoDecoderFactory;
|
||||||
import org.webrtc.DefaultVideoEncoderFactory;
|
import org.webrtc.DefaultVideoEncoderFactory;
|
||||||
import org.webrtc.EglBase;
|
import org.webrtc.EglBase;
|
||||||
import org.webrtc.IceCandidate;
|
|
||||||
import org.webrtc.Logging;
|
import org.webrtc.Logging;
|
||||||
import org.webrtc.MediaConstraints;
|
import org.webrtc.MediaConstraints;
|
||||||
import org.webrtc.MediaStream;
|
import org.webrtc.MediaStream;
|
||||||
import org.webrtc.PeerConnection;
|
import org.webrtc.PeerConnection;
|
||||||
import org.webrtc.PeerConnectionFactory;
|
import org.webrtc.PeerConnectionFactory;
|
||||||
import org.webrtc.RendererCommon;
|
import org.webrtc.RendererCommon;
|
||||||
import org.webrtc.SessionDescription;
|
|
||||||
import org.webrtc.SurfaceTextureHelper;
|
import org.webrtc.SurfaceTextureHelper;
|
||||||
import org.webrtc.VideoCapturer;
|
import org.webrtc.VideoCapturer;
|
||||||
import org.webrtc.VideoSource;
|
import org.webrtc.VideoSource;
|
||||||
@ -1688,35 +1686,24 @@ public class CallActivity extends CallBaseActivity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String sdp = ncSignalingMessage.getPayload().getSdp();
|
||||||
|
String nick = ncSignalingMessage.getPayload().getNick();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "offer":
|
case "offer":
|
||||||
|
peerConnectionWrapper.getWebRtcMessageListener().onOffer(sdp, nick);
|
||||||
|
break;
|
||||||
case "answer":
|
case "answer":
|
||||||
peerConnectionWrapper.setNick(ncSignalingMessage.getPayload().getNick());
|
peerConnectionWrapper.getWebRtcMessageListener().onAnswer(sdp, nick);
|
||||||
SessionDescription sessionDescriptionWithPreferredCodec;
|
|
||||||
|
|
||||||
String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
|
|
||||||
(ncSignalingMessage.getPayload().getSdp(),
|
|
||||||
"H264", false);
|
|
||||||
|
|
||||||
sessionDescriptionWithPreferredCodec = new SessionDescription(
|
|
||||||
SessionDescription.Type.fromCanonicalForm(type),
|
|
||||||
sessionDescriptionStringWithPreferredCodec);
|
|
||||||
|
|
||||||
if (peerConnectionWrapper.getPeerConnection() != null) {
|
|
||||||
peerConnectionWrapper.getPeerConnection().setRemoteDescription(
|
|
||||||
peerConnectionWrapper.getMagicSdpObserver(),
|
|
||||||
sessionDescriptionWithPreferredCodec);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "candidate":
|
case "candidate":
|
||||||
NCIceCandidate ncIceCandidate = ncSignalingMessage.getPayload().getIceCandidate();
|
NCIceCandidate ncIceCandidate = ncSignalingMessage.getPayload().getIceCandidate();
|
||||||
IceCandidate iceCandidate = new IceCandidate(ncIceCandidate.getSdpMid(),
|
peerConnectionWrapper.getWebRtcMessageListener().onCandidate(ncIceCandidate.getSdpMid(),
|
||||||
ncIceCandidate.getSdpMLineIndex(),
|
ncIceCandidate.getSdpMLineIndex(),
|
||||||
ncIceCandidate.getCandidate());
|
ncIceCandidate.getCandidate());
|
||||||
peerConnectionWrapper.addCandidate(iceCandidate);
|
|
||||||
break;
|
break;
|
||||||
case "endOfCandidates":
|
case "endOfCandidates":
|
||||||
peerConnectionWrapper.drainIceCandidates();
|
peerConnectionWrapper.getWebRtcMessageListener().onEndOfCandidates();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -74,6 +74,8 @@ public class PeerConnectionWrapper {
|
|||||||
|
|
||||||
private static final String TAG = PeerConnectionWrapper.class.getCanonicalName();
|
private static final String TAG = PeerConnectionWrapper.class.getCanonicalName();
|
||||||
|
|
||||||
|
private final WebRtcMessageListener webRtcMessageListener = new WebRtcMessageListener();
|
||||||
|
|
||||||
private List<IceCandidate> iceCandidates = new ArrayList<>();
|
private List<IceCandidate> iceCandidates = new ArrayList<>();
|
||||||
private PeerConnection peerConnection;
|
private PeerConnection peerConnection;
|
||||||
private String sessionId;
|
private String sessionId;
|
||||||
@ -267,6 +269,47 @@ public class PeerConnectionWrapper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WebRtcMessageListener getWebRtcMessageListener() {
|
||||||
|
return webRtcMessageListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WebRtcMessageListener {
|
||||||
|
|
||||||
|
public void onOffer(String sdp, String nick) {
|
||||||
|
onOfferOrAnswer("offer", sdp, nick);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onAnswer(String sdp, String nick) {
|
||||||
|
onOfferOrAnswer("answer", sdp, nick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onOfferOrAnswer(String type, String sdp, String nick) {
|
||||||
|
setNick(nick);
|
||||||
|
|
||||||
|
SessionDescription sessionDescriptionWithPreferredCodec;
|
||||||
|
|
||||||
|
boolean isAudio = false;
|
||||||
|
String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec(sdp, "H264", isAudio);
|
||||||
|
|
||||||
|
sessionDescriptionWithPreferredCodec = new SessionDescription(
|
||||||
|
SessionDescription.Type.fromCanonicalForm(type),
|
||||||
|
sessionDescriptionStringWithPreferredCodec);
|
||||||
|
|
||||||
|
if (getPeerConnection() != null) {
|
||||||
|
getPeerConnection().setRemoteDescription(magicSdpObserver, sessionDescriptionWithPreferredCodec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
|
||||||
|
IceCandidate iceCandidate = new IceCandidate(sdpMid, sdpMLineIndex, sdp);
|
||||||
|
addCandidate(iceCandidate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onEndOfCandidates() {
|
||||||
|
drainIceCandidates();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class MagicDataChannelObserver implements DataChannel.Observer {
|
private class MagicDataChannelObserver implements DataChannel.Observer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user