一. 设置本地sdp(setLocalDescription)
@Override
public void onCreateSuccess(SessionDescription sessionDescription) {
Log.v(TAG, "3 PeerConnectionManager sdp创建成功 " + sessionDescription.description);
pc.setLocalDescription(Peer.this, sessionDescription);
}
二. 监听回调(onSetSuccess)
@Override
public void onSetSuccess() {
Log.v(TAG, "4 PeerConnectionManager sdp连接成功 " + pc.signalingState().toString()+" role "+role.toString());
if (pc.signalingState() == PeerConnection.SignalingState.HAVE_LOCAL_OFFER) {
//判断连接状态为本地发送offer
if (role == Role.Receiver) {
//接收者,发送Answer
webSocket.sendAnswer(socketId, pc.getLocalDescription().description);
} else if (role == Role.Caller) {
//发送者,发送自己的offer
webSocket.sendOffer(socketId, pc.getLocalDescription().description);
}
} else if (pc.signalingState() == PeerConnection.SignalingState.HAVE_REMOTE_OFFER) {
pc.createAnswer(Peer.this, offerOrAnswerConstraint());
} else if (pc.signalingState() == PeerConnection.SignalingState.STABLE) {
// Stable 稳定的
if (role == Role.Receiver) {
Log.i(TAG, "onSetSuccess: 最后一步测试");
webSocket.sendAnswer(socketId, pc.getLocalDescription().description);
}
}
}
三. socket发送offer和answer
@Override
public void sendOffer(String socketId, String sdp) {
HashMap<String, Object> childMap1 = new HashMap();
childMap1.put("type", "offer");
childMap1.put("sdp", sdp);
HashMap<String, Object> childMap2 = new HashMap();
childMap2.put("socketId", socketId);
childMap2.put("sdp", childMap1);
HashMap<String, Object> map = new HashMap();
map.put("eventName", "__offer");
map.put("data", childMap2);
JSONObject object = new JSONObject(map);
String jsonString = object.toString();
Log.d(TAG, "send-->" + jsonString);
mWebSocketClient.send(jsonString);
}
@Override
public void sendAnswer(String socketId, String sdp) {
Map<String, Object> childMap1 = new HashMap();
childMap1.put("type", "answer");
childMap1.put("sdp", sdp);
HashMap<String, Object> childMap2 = new HashMap();
childMap2.put("socketId", socketId);
childMap2.put("sdp", childMap1);
HashMap<String, Object> map = new HashMap();
map.put("eventName", "__answer");
map.put("data", childMap2);
JSONObject object = new JSONObject(map);
String jsonString = object.toString();
Log.d(TAG, "send-->" + jsonString);
mWebSocketClient.send(jsonString);
}
四.socket接受offer和answer
// 处理Offer
private void handleOffer(Map map) {
Log.i(TAG, "handleOffer: ");
Map data = (Map) map.get("data");
Map sdpDic;
if (data != null) {
sdpDic = (Map) data.get("sdp");
String socketId = (String) data.get("socketId");
String sdp = (String) sdpDic.get("sdp");
events.onReceiveOffer(socketId, sdp);
}
}
// 处理Answer
private void handleAnswer(Map map) {
Log.i(TAG, " 5 JavaWebSocket handleAnswer: ");
Map data = (Map) map.get("data");
Map sdpDic;
if (data != null) {
sdpDic = (Map) data.get("sdp");
String socketId = (String) data.get("socketId");
String sdp = (String) sdpDic.get("sdp");
events.onReceiverAnswer(socketId, sdp);
}
}
五.PeerConnectionManager处理offer和answer(setRemoteDescription)
public void onReceiverAnswer(String socketId, String sdp) {
Log.i(TAG, " 10 PeerConnectionManager onReceiverAnswer: ");
executor.execute(() -> {
Peer mPeer = connectionPeerDic.get(socketId);
SessionDescription sessionDescription = new SessionDescription(SessionDescription.Type.ANSWER, sdp);
if (mPeer != null) {
mPeer.pc.setRemoteDescription(mPeer, sessionDescription);
}
});
}
public void onReceiveOffer(String socketId, String description) {
Log.i(TAG, " 11 PeerConnectionManager onReceiveOffer: ");
executor.execute(() -> {
role = Role.Receiver;
Peer mPeer = connectionPeerDic.get(socketId);
SessionDescription sdp = new SessionDescription(SessionDescription.Type.OFFER, description);
if (mPeer != null) {
mPeer.pc.setRemoteDescription(mPeer, sdp);
}
});
}
六.PeerConnectionManager处理offer和answer(setRemoteDescription)
网友评论