美文网首页
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