Поддержка нескольких протоколов у ICE серверов

This commit is contained in:
RoyceDa
2026-03-17 15:26:20 +02:00
parent 12a3e6266b
commit 6166211c60
2 changed files with 10 additions and 13 deletions

View File

@@ -206,14 +206,12 @@ public class ForwardUnitService {
* @return список серверов для RTC * @return список серверов для RTC
*/ */
public Set<RTCIceServer> getTurnServers() { public Set<RTCIceServer> getTurnServers() {
Set<RTCIceServer> turnServers = new HashSet<>(); Set<RTCIceServer> iceServers = new HashSet<>();
for(SFU sfu : this.sfuConnections) { for(SFU sfu : this.sfuConnections) {
RTCIceServer turnServer = sfu.getTurnServer(); Set<RTCIceServer> iceServersSupporetd = sfu.getIceServers();
if(turnServer != null) { iceServers.addAll(iceServersSupporetd);
turnServers.add(turnServer);
}
} }
return turnServers; return iceServers;
} }

View File

@@ -4,6 +4,7 @@ import java.net.URISyntaxException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -64,11 +65,9 @@ public class SFU {
private Consumer<DisconnectedPeer> onPeerDisconnected; private Consumer<DisconnectedPeer> onPeerDisconnected;
/** /**
* TURN сервер предоставляемый SFU (если включен), который может быть использован * TURN сервер предоставляемый SFU (если включен), может поддерживать udp,tcp протоколы (несколько ice)
* для обмена кандидатами между участниками звонка через NAT и брандмауэры.
* Если SFU сервер не предоставляет TURN сервер, то это поле будет равно null.
*/ */
private RTCIceServer turnServer; private Set<RTCIceServer> iceServers = new HashSet<>();
/** /**
* Конструктор для создания объекта SFU, который будет использоваться для установления соединения с SFU сервером. * Конструктор для создания объекта SFU, который будет использоваться для установления соединения с SFU сервером.
@@ -244,7 +243,7 @@ public class SFU {
byte[] transportBytes = new byte[transportLength]; byte[] transportBytes = new byte[transportLength];
message.get(transportBytes); message.get(transportBytes);
String transport = new String(transportBytes).trim(); String transport = new String(transportBytes).trim();
this.turnServer = new RTCIceServer(url, username, credential, transport); this.iceServers.add(new RTCIceServer(url, username, credential, transport));
} }
} }
@@ -400,7 +399,7 @@ public class SFU {
/** /**
* Возвращает TURN сервер на этом SFU * Возвращает TURN сервер на этом SFU
*/ */
public RTCIceServer getTurnServer() { public Set<RTCIceServer> getIceServers() {
return turnServer; return this.iceServers;
} }
} }