flutter webrtc PeerConnection не может создать ответ в состоянии, отличном от have-remote-offer или have-local-pranswer - PullRequest
0 голосов
/ 22 декабря 2019

при использовании flutter webrtc я создаю ответ только после того, как проверил, что состояние сигнализации имеет have-remote-offer, но все равно я получаю ошибку «PeerConnection не может создать ответ в состоянии, отличном от have-remote-offer или have-local-pranswer»,Нужна помощь .. ниже код

 Future<RTCPeerConnection> getPeerConnection() async {
    if (null == _rtcPeerConnection) {
      _rtcPeerConnection =
          await createPeerConnection(Constants.iceServers, Constants.config);
      await initiateRTCCallbacks();
    }
    return _rtcPeerConnection;
  }

    initiateRTCCallbacks() async {
final RTCPeerConnection _rtcPeerConnection = await getPeerConnection();
    if (null != _rtcPeerConnection) {
      _rtcPeerConnection.onAddTrack = (stream, track) async {};
      _rtcPeerConnection.onAddStream = (stream) {
        MediaStreamBloc().addToController(stream);
      };
      _rtcPeerConnection.onIceCandidate = (iceCandidate) {
        sendIceCandidate(iceCandidate);
      };
      _rtcPeerConnection.onSignalingState = (rtcSignaliingState) {
        print('rtcSignaliingState ' + rtcSignaliingState.toString());
        _sigState = rtcSignaliingState;
        if (rtcSignaliingState ==
            RTCSignalingState.RTCSignalingStateHaveRemoteOffer) {
            createAnswerToOffer();
        }
      };
      _rtcPeerConnection.onRemoveStream = (stream) {
        print('got on remove stream');
      };
      _rtcPeerConnection.onRemoveTrack = (stream, track) {
        print('got on remove track');
      };
      _rtcPeerConnection.onIceConnectionState = (iceConnStateChange) {
        print('ice connection state change ' + iceConnStateChange.toString());
        if (RTCIceConnectionState.RTCIceConnectionStateFailed ==
                iceConnStateChange ||
            RTCIceConnectionState.RTCIceConnectionStateDisconnected ==
                iceConnStateChange ||
            RTCIceConnectionState.RTCIceConnectionStateClosed ==
                iceConnStateChange) {
          endCall();
        }
      };
      _rtcPeerConnection.onRenegotiationNeeded = () {};
    }
  }

  createAnswerToOffer() async {
      await getPeerConnection();
      RTCSessionDescription answer = await _rtcPeerConnection
          .createAnswer(Constants.vidChatConstraints);
      await _rtcPeerConnection.setLocalDescription(answer);
      sendSdp(answer);
    }
  }
...