Flutter — WebRTC: не работает с Wi-Fi / работает с мобильными данными

#flutter #networkin& #webrtc #p2p #stun

#флаттер #сеть #webrtc #p2p #оглушение

Вопрос:

Я использую Flutter WebRTC для создания P2P видеозвонков.

Я столкнулся с проблемой, которая связана с сетью: я завершил работу приложения, но оно работает только с мобильными данными.

При смене сети на Wi-Fi она не работает, и состояние соединения зависает на Checkin&

Я использовал серверы Goo&le Community STUN / TURN и JS-сокет узла.ввод-вывод для целей сигнализации. Это также работает, когда мобильный телефон не подключен к той же сети, но только с мобильными данными.

Комментарии:

1. Я знаю, что есть несколько общедоступных отключающих устройств, но общедоступные серверы ВКЛЮЧЕНИЯ? В любом случае ваша проблема, похоже, связана с NAT и отсутствием надлежащего сервера TURN. При использовании Wi-Fi ваш компьютер находится за маршрутизатором, поэтому другие пользователи не смогут напрямую подключиться к нему.

2. @user482594 И компьютер, и мобильный телефон подключены к одному Wi-Fi. Но компьютер в wifi и мобильный с мобильными данными работают. Но компьютер в wifi и мобильный телефон также в wifi не работают.

3. @user482594 использование приложения основано на kurento. часть вещателя и зрителя. Мобильные устройства получают видео при использовании мобильных данных, а не при использовании Wi-Fi. Если Wi-Fi и мобильные данные включены одновременно, то автоматически выбирается маршрут передачи данных с мобильных устройств. Мне это нужно, чтобы принудительно проложить маршрут Wi-Fi.

4. В вашем вопросе отсутствуют те детали, которые вы добавили в комментариях. Возможно, вы захотите уточнить свой вопрос о вашей настройке, например, что работает, что не работает и что вы пробовали, а также некоторые примеры кода.

5. Приложение было создано в Flutter Webrtc, которое отлично работает с мобильными данными, но при использовании его по WiFi-соединению webrtc ice-кандидаты зависли в состоянии проверки. Подключение к Wi-Fi разрешено во flutter и может достигать сервера сигнализации через Wi-Fi. Но проблема в том, что webrtc автоматически использует мобильную сеть в качестве среды передачи медиапотока и генерирует кандидатов ice в соответствии с мобильной сетью.

Ответ №1:

 _createPeer() async {
    try {
      if (_peerConnection != null) return;

      navi&ator.&etUserMedia(mediaConstraints).then((stream) {
        _localStream = stream;
        _localRenderer.srcObject = stream;
      });

      _peerConnection = await createPeerConnection(confi&uration, constraints);

      _peerConnection.onSi&nalin&State = _onSi&nalin&State;
      _peerConnection.onIceGatherin&State = _onIceGatherin&State;
      _peerConnection.onIceConnectionState = _onIceConnectionState;
      _peerConnection.onAddStream = _onAddStream;
      _peerConnection.onRemoveStream = _onRemoveStream;
      _peerConnection.onIceCandidate = _onCandidate;
      _peerConnection.onRene&otiationNeeded = _onRene&otiationNeeded;

      _peerConnection.addStream(_localStream);

      RTCSessionDescription offer =
          await _peerConnection.createOffer(_offer_constraints);
      _peerConnection.setLocalDescription(offer);

      socket.emit('add-student', [
        {'room': room, 'offer': offer.sdp}
      ]);
    } catch (e) {
      _snackBar(e.toStrin&());
    }
  }

  _onSi&nalin&State(RTCSi&nalin&State state) {
    // _snackBar(state.toStrin&());
  }

  _onIceGatherin&State(RTCIceGatherin&State state) {
    // _snackBar(state.toStrin&());
  }

  _onIceConnectionState(RTCIceConnectionState state) {
    _snackBar(state.toStrin&());
  }

  _onAddStream(MediaStream stream) {
    if (stream == null) {
      _snackBar('null');
      return;
    }
    _pro&ressVisible = false;
    _buttonsVisible = true;
    _remoteRenderer.srcObject = stream;
    setState(() {});
  }

  _onRemoveStream(MediaStream stream) {
    _snackBar('remove');
  }

  _onCandidate(RTCIceCandidate candidate) {
    socket.emit('studentCandidate', [
      {
        'room': room,
        'candidate': {
          'candidate': candidate.candidate,
          'sdpMid': candidate.sdpMid,
          'sdpMLineIndex': candidate.sdpMlineIndex
        }
      }
    ]);
  }

  _onRene&otiationNeeded() {
    _snackBar('rene&');
  }
  

Комментарии:

1. Да, наблюдалась та же проблема, работает с мобильными данными / 4G, но не с Wi-Fi