fix(webrtc): 修复主动关闭旧连接时误报断开通知,并更新 ICE 服务器列表
- 在 createPeerConnectionAndAnswer 中关闭旧连接前设置 suppressDisconnectNotify 标志,抑制 notifyRemoteDisconnected 回调,避免接受新连接时误报远程断开。 - 调整被控端、控制端、Web 控制台及 Flutter 控制端的 ICE 服务器配置,启用了内网 STUN/TURN 服务器并注释掉旧的公网 TURN 服务器。
This commit is contained in:
@@ -78,6 +78,9 @@ public class WebRtcClient {
|
|||||||
|
|
||||||
private RemoteDisconnectCallback remoteDisconnectCallback;
|
private RemoteDisconnectCallback remoteDisconnectCallback;
|
||||||
private boolean remoteDisconnectNotified = false;
|
private boolean remoteDisconnectNotified = false;
|
||||||
|
// 主动关闭/重建连接(如接受新连接时关闭旧连接)期间,抑制因旧 PeerConnection/
|
||||||
|
// DataChannel 关闭而误触发的"远程控制端断开"通知。
|
||||||
|
private boolean suppressDisconnectNotify = false;
|
||||||
|
|
||||||
public interface IceEventListener {
|
public interface IceEventListener {
|
||||||
void onIceConnected();
|
void onIceConnected();
|
||||||
@@ -120,6 +123,8 @@ public class WebRtcClient {
|
|||||||
|
|
||||||
private void notifyRemoteDisconnected() {
|
private void notifyRemoteDisconnected() {
|
||||||
if (remoteDisconnectNotified) return;
|
if (remoteDisconnectNotified) return;
|
||||||
|
// 主动重建连接期间(关闭旧连接)不向上层报告断开,避免误报。
|
||||||
|
if (suppressDisconnectNotify) return;
|
||||||
remoteDisconnectNotified = true;
|
remoteDisconnectNotified = true;
|
||||||
if (remoteDisconnectCallback != null) {
|
if (remoteDisconnectCallback != null) {
|
||||||
remoteDisconnectCallback.onRemoteDisconnected(currentControllerId);
|
remoteDisconnectCallback.onRemoteDisconnected(currentControllerId);
|
||||||
@@ -272,8 +277,11 @@ public class WebRtcClient {
|
|||||||
|
|
||||||
public void createPeerConnectionAndAnswer(String offerSdp, String controllerId) {
|
public void createPeerConnectionAndAnswer(String offerSdp, String controllerId) {
|
||||||
if (peerConnection != null) {
|
if (peerConnection != null) {
|
||||||
|
// 主动关闭旧连接(用户接受新连接)期间,抑制旧连接关闭带来的误报断开回调。
|
||||||
Log.d(TAG, "Closing previous peer connection");
|
Log.d(TAG, "Closing previous peer connection");
|
||||||
|
suppressDisconnectNotify = true;
|
||||||
closeCurrentConnection();
|
closeCurrentConnection();
|
||||||
|
suppressDisconnectNotify = false;
|
||||||
}
|
}
|
||||||
this.currentControllerId = controllerId;
|
this.currentControllerId = controllerId;
|
||||||
this.remoteDisconnectNotified = false;
|
this.remoteDisconnectNotified = false;
|
||||||
@@ -283,12 +291,12 @@ public class WebRtcClient {
|
|||||||
List<PeerConnection.IceServer> iceServers = new ArrayList<>();
|
List<PeerConnection.IceServer> iceServers = new ArrayList<>();
|
||||||
// 建议:如果你有 TURN 服务器,请务必在此处添加,例如:
|
// 建议:如果你有 TURN 服务器,请务必在此处添加,例如:
|
||||||
// iceServers.add(PeerConnection.IceServer.builder("turn:your_turn_server").setUsername("user").setPassword("pass").createIceServer());
|
// iceServers.add(PeerConnection.IceServer.builder("turn:your_turn_server").setUsername("user").setPassword("pass").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("turn:175.178.213.60:3478").setUsername("fanhuitong").setPassword("Fan19961207..").createIceServer());
|
// iceServers.add(PeerConnection.IceServer.builder("turn:175.178.213.60:3478").setUsername("fanhuitong").setPassword("Fan19961207..").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:175.178.213.60:3478").createIceServer());
|
// iceServers.add(PeerConnection.IceServer.builder("stun:175.178.213.60:3478").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("turn:47.242.112.133:3478").setUsername("ttstd").setPassword("fanhuitong").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("turn:47.242.112.133:3478").setUsername("ttstd").setPassword("fanhuitong").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:47.242.112.133:3478").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:47.242.112.133:3478").createIceServer());
|
||||||
// iceServers.add(PeerConnection.IceServer.builder("turn:192.168.5.224:3478").setUsername("tt").setPassword("fht").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("turn:192.168.5.224:3478").setUsername("tt").setPassword("fht").createIceServer());
|
||||||
// iceServers.add(PeerConnection.IceServer.builder("stun:192.168.5.224:3478").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:192.168.5.224:3478").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun1.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun1.l.google.com:19302").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun2.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun2.l.google.com:19302").createIceServer());
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ public class WebRtcClient {
|
|||||||
iceServers.add(PeerConnection.IceServer.builder("stun:175.178.213.60:3478").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:175.178.213.60:3478").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("turn:47.242.112.133:3478").setUsername("ttstd").setPassword("fanhuitong").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("turn:47.242.112.133:3478").setUsername("ttstd").setPassword("fanhuitong").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:47.242.112.133:3478").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:47.242.112.133:3478").createIceServer());
|
||||||
// iceServers.add(PeerConnection.IceServer.builder("turn:192.168.5.224:3478").setUsername("tt").setPassword("fht").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("turn:192.168.5.224:3478").setUsername("tt").setPassword("fht").createIceServer());
|
||||||
// iceServers.add(PeerConnection.IceServer.builder("stun:192.168.5.224:3478").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:192.168.5.224:3478").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun1.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun1.l.google.com:19302").createIceServer());
|
||||||
iceServers.add(PeerConnection.IceServer.builder("stun:stun2.l.google.com:19302").createIceServer());
|
iceServers.add(PeerConnection.IceServer.builder("stun:stun2.l.google.com:19302").createIceServer());
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ export const DEFAULT_ICE_SERVERS = [
|
|||||||
{ urls: 'stun:47.242.112.133:3478' },
|
{ urls: 'stun:47.242.112.133:3478' },
|
||||||
{ urls: 'turn:47.242.112.133:3478', username: 'ttstd', credential: 'fanhuitong' },
|
{ urls: 'turn:47.242.112.133:3478', username: 'ttstd', credential: 'fanhuitong' },
|
||||||
// 内网 TURN(与被控端同局域网时可用)。
|
// 内网 TURN(与被控端同局域网时可用)。
|
||||||
// { urls: 'stun:192.168.5.224:3478' },
|
{ urls: 'stun:192.168.5.224:3478' },
|
||||||
|
{ urls: 'turn:192.168.5.224:3478', username: 'tt', credential: 'fht' },
|
||||||
// { urls: 'turn:192.168.100.224:3478', username: 'tt', credential: 'fht' },
|
// { urls: 'turn:192.168.100.224:3478', username: 'tt', credential: 'fht' },
|
||||||
// { urls: 'turn:192.168.100.224:3478?transport=tcp', username: 'tt', credential: 'fht' },
|
// { urls: 'turn:192.168.100.224:3478?transport=tcp', username: 'tt', credential: 'fht' },
|
||||||
// { urls: 'stun:stun.l.google.com:19302' },
|
// { urls: 'stun:stun.l.google.com:19302' },
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ const List<Map<String, dynamic>> kIceServers = [
|
|||||||
'username': 'ttstd',
|
'username': 'ttstd',
|
||||||
'credential': 'fanhuitong',
|
'credential': 'fanhuitong',
|
||||||
},
|
},
|
||||||
|
{'urls': 'stun:192.168.5.224:3478'},
|
||||||
|
{
|
||||||
|
'urls': 'turn:192.168.5.224:3478',
|
||||||
|
'username': 'tt',
|
||||||
|
'credential': 'fht',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
/// 信令 WebSocket 默认地址。
|
/// 信令 WebSocket 默认地址。
|
||||||
|
|||||||
Reference in New Issue
Block a user