#android #webrtc #openvidu
#Android #webrtc #openvidu
Вопрос:
Все работает нормально, но когда я выключаю свой Wi-Fi и снова включаю его, сеанс WebRTC подключается повторно, но через 6-7 секунд он переходит в отключенное состояние, а затем в состояние сбоя.
Журналы
2020-09-19 19:34:27.112 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: CHECKING
2020-09-19 19:34:28.338 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: CONNECTED
2020-09-19 19:35:06.133 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: DISCONNECTED
2020-09-19 19:35:06.473 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: CONNECTED
2020-09-19 19:35:21.363 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: DISCONNECTED
2020-09-19 19:35:31.379 5941-6059/com.thirdeyegen.mr_workspacee D/NEW_WEBRTC_STATE==>: FAILED
Событие 1, 2 начальный сеанс (работает нормально)
Событие 3, 4, 5, 6 Серия событий, когда я отключаю Wi-Fi и снова подключаюсь.
В событии 4 все работает, но 5, 6 происходит через 6-7 секунд.
Мой код
public PeerConnection createLocalPeerConnection() {
final List<PeerConnection.IceServer> iceServers = new ArrayList<>();
PeerConnection.IceServer iceServer = PeerConnection.IceServer
.builder("turn:" turnUrl)
.setUsername(turnUsername)
.setPassword(turnPassword)
.createIceServer();
iceServers.add(iceServer);
PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(iceServers);
rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.ENABLED;
rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE;
rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE;
rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY;
rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
rtcConfig.enableDtlsSrtp = true;
rtcConfig.enableRtpDataChannel = true;
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
return peerConnectionFactory.createPeerConnection(rtcConfig, new CustomPeerConnectionObserver("local") {
@Override
public void onIceCandidate(IceCandidate iceCandidate) {
super.onIceCandidate(iceCandidate);
websocket.onIceCandidate(iceCandidate, localParticipant.getConnectionId());
}
@Override
public void onSignalingChange(PeerConnection.SignalingState signalingState) {
super.onSignalingChange(signalingState);
}
@Override
public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) {
if (iceConnectionState.name().toLowerCase().equals("connected")) {
isLocalConnected = true;
}
Log.d("NEW_WEBRTC_STATE==>", iceConnectionState.name());
if (iceConnectionState.equals(PeerConnection.IceConnectionState.FAILED)) {
checkForInternetAndReconnect();
} else if (iceConnectionState.equals(PeerConnection.IceConnectionState.DISCONNECTED)) {
activity.showConnectingAnimation(View.VISIBLE);
} else {
activity.showConnectingAnimation(View.GONE);
}
super.onIceConnectionChange(iceConnectionState);
}
});
}
PS Я использую код из репозитория OpenVidu Android.
Комментарии:
1. столкнувшись с той же проблемой. Из того, что я узнал, нам нужно будет заново создать предложение, используя параметр
iceRestart: true
, но нигде не смог найти, как это сделать в Android.2. Я исправил это, снова подключив сокеты.
3. @JaswantSingh Не могли бы вы поделиться кодом — как вы повторно подключились к socket после повторного открытия приложения?