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 boolean remoteDisconnectNotified = false;
|
||||
// 主动关闭/重建连接(如接受新连接时关闭旧连接)期间,抑制因旧 PeerConnection/
|
||||
// DataChannel 关闭而误触发的"远程控制端断开"通知。
|
||||
private boolean suppressDisconnectNotify = false;
|
||||
|
||||
public interface IceEventListener {
|
||||
void onIceConnected();
|
||||
@@ -120,6 +123,8 @@ public class WebRtcClient {
|
||||
|
||||
private void notifyRemoteDisconnected() {
|
||||
if (remoteDisconnectNotified) return;
|
||||
// 主动重建连接期间(关闭旧连接)不向上层报告断开,避免误报。
|
||||
if (suppressDisconnectNotify) return;
|
||||
remoteDisconnectNotified = true;
|
||||
if (remoteDisconnectCallback != null) {
|
||||
remoteDisconnectCallback.onRemoteDisconnected(currentControllerId);
|
||||
@@ -272,8 +277,11 @@ public class WebRtcClient {
|
||||
|
||||
public void createPeerConnectionAndAnswer(String offerSdp, String controllerId) {
|
||||
if (peerConnection != null) {
|
||||
// 主动关闭旧连接(用户接受新连接)期间,抑制旧连接关闭带来的误报断开回调。
|
||||
Log.d(TAG, "Closing previous peer connection");
|
||||
suppressDisconnectNotify = true;
|
||||
closeCurrentConnection();
|
||||
suppressDisconnectNotify = false;
|
||||
}
|
||||
this.currentControllerId = controllerId;
|
||||
this.remoteDisconnectNotified = false;
|
||||
@@ -283,12 +291,12 @@ public class WebRtcClient {
|
||||
List<PeerConnection.IceServer> iceServers = new ArrayList<>();
|
||||
// 建议:如果你有 TURN 服务器,请务必在此处添加,例如:
|
||||
// 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("stun:175.178.213.60:3478").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("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("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("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:stun.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());
|
||||
|
||||
@@ -128,8 +128,8 @@ public class WebRtcClient {
|
||||
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("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("stun:192.168.5.224:3478").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:stun.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());
|
||||
|
||||
@@ -16,7 +16,8 @@ export const DEFAULT_ICE_SERVERS = [
|
||||
{ urls: 'stun:47.242.112.133:3478' },
|
||||
{ urls: 'turn:47.242.112.133:3478', username: 'ttstd', credential: 'fanhuitong' },
|
||||
// 内网 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?transport=tcp', username: 'tt', credential: 'fht' },
|
||||
// { urls: 'stun:stun.l.google.com:19302' },
|
||||
|
||||
@@ -43,6 +43,12 @@ const List<Map<String, dynamic>> kIceServers = [
|
||||
'username': 'ttstd',
|
||||
'credential': 'fanhuitong',
|
||||
},
|
||||
{'urls': 'stun:192.168.5.224:3478'},
|
||||
{
|
||||
'urls': 'turn:192.168.5.224:3478',
|
||||
'username': 'tt',
|
||||
'credential': 'fht',
|
||||
},
|
||||
];
|
||||
|
||||
/// 信令 WebSocket 默认地址。
|
||||
|
||||
Reference in New Issue
Block a user