美文网首页
Android WebRTC 04 --- sdp交换(send

Android WebRTC 04 --- sdp交换(send

作者: 沪漂意哥哥 | 来源:发表于2022-03-21 12:52 被阅读0次

一. 设置本地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)


相关文章

网友评论

      本文标题:Android WebRTC 04 --- sdp交换(send

      本文链接:https://www.haomeiwen.com/subject/kigzdrtx.html