#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