diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index 05a317ed..bcd55d1a 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -1526,8 +1526,8 @@ export class Session extends EventDispatcher { private processJoinRoomResponse(opts: LocalConnectionOptions) { this.sessionId = opts.session; - if (opts.coturnIp != null && opts.turnUsername != null && opts.turnCredential != null) { - const turnUrl1 = 'turn:' + opts.coturnIp + ':3478'; + if (opts.coturnIp != null && opts.coturnPort != null && opts.turnUsername != null && opts.turnCredential != null) { + const turnUrl1 = 'turn:' + opts.coturnIp + ':' + opts.coturnPort; this.openvidu.iceServers = [ { urls: [turnUrl1], username: opts.turnUsername, credential: opts.turnCredential } ]; diff --git a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/LocalConnectionOptions.ts b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/LocalConnectionOptions.ts index 5cfbe203..bc8d2ab3 100644 --- a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/LocalConnectionOptions.ts +++ b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/LocalConnectionOptions.ts @@ -28,6 +28,7 @@ export interface LocalConnectionOptions { role: string; record: boolean; coturnIp: string; + coturnPort: number; turnUsername: string; turnCredential: string; version: string; diff --git a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java index a33a54db..a7648fc4 100644 --- a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java +++ b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java @@ -162,6 +162,7 @@ public class ProtocolElements { public static final String PARTICIPANTJOINED_RECORD_PARAM = "record"; public static final String PARTICIPANTJOINED_ROLE_PARAM = "role"; public static final String PARTICIPANTJOINED_COTURNIP_PARAM = "coturnIp"; + public static final String PARTICIPANTJOINED_COTURNPORT_PARAM = "coturnPort"; public static final String PARTICIPANTJOINED_TURNUSERNAME_PARAM = "turnUsername"; public static final String PARTICIPANTJOINED_TURNCREDENTIAL_PARAM = "turnCredential"; diff --git a/openvidu-server/deployments/ce/docker-compose/docker-compose.yml b/openvidu-server/deployments/ce/docker-compose/docker-compose.yml index 92cd6133..2c7a7ff1 100644 --- a/openvidu-server/deployments/ce/docker-compose/docker-compose.yml +++ b/openvidu-server/deployments/ce/docker-compose/docker-compose.yml @@ -40,6 +40,7 @@ services: - COTURN_REDIS_IP=127.0.0.1 - COTURN_REDIS_PASSWORD=${OPENVIDU_SECRET} - COTURN_IP=${COTURN_IP:-auto-ipv4} + - COTURN_PORT=${COTURN_PORT:-3478} logging: options: max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}" @@ -84,11 +85,11 @@ services: - DB_PASSWORD=${OPENVIDU_SECRET} command: - --log-file=stdout - - --listening-port=3478 + - --listening-port=${COTURN_PORT:-3478} - --fingerprint - --lt-cred-mech - - --min-port=57001 - - --max-port=65535 + - --min-port=${COTURN_MIN_PORT:-57001} + - --max-port=${COTURN_MAX_PORT:-65535} - --realm=openvidu - --verbose logging: diff --git a/openvidu-server/deployments/enterprise/master-node/docker-compose.yml b/openvidu-server/deployments/enterprise/master-node/docker-compose.yml index 8d77ee05..ddeedd7e 100644 --- a/openvidu-server/deployments/enterprise/master-node/docker-compose.yml +++ b/openvidu-server/deployments/enterprise/master-node/docker-compose.yml @@ -45,6 +45,7 @@ services: - COTURN_REDIS_IP=127.0.0.1 - COTURN_REDIS_PASSWORD=${OPENVIDU_SECRET} - COTURN_IP=${COTURN_IP:-auto-ipv4} + - COTURN_PORT=${COTURN_PORT:-3478} - OPENVIDU_PRO_CLUSTER=true - OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana} - OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST:-http://127.0.0.1:9200} @@ -105,11 +106,11 @@ services: command: - --log-file=stdout - --external-ip=$$(detect-external-ip) - - --listening-port=3478 + - --listening-port=${COTURN_PORT:-3478} - --fingerprint - --lt-cred-mech - - --min-port=40000 - - --max-port=65535 + - --min-port=${COTURN_MIN_PORT:-40000} + - --max-port=${COTURN_MAX_PORT:-65535} - --realm=openvidu - --verbose logging: diff --git a/openvidu-server/deployments/pro/docker-compose/openvidu-server-pro/docker-compose.yml b/openvidu-server/deployments/pro/docker-compose/openvidu-server-pro/docker-compose.yml index 1a442dcd..a5c0b6bb 100644 --- a/openvidu-server/deployments/pro/docker-compose/openvidu-server-pro/docker-compose.yml +++ b/openvidu-server/deployments/pro/docker-compose/openvidu-server-pro/docker-compose.yml @@ -42,6 +42,7 @@ services: - COTURN_REDIS_IP=127.0.0.1 - COTURN_REDIS_PASSWORD=${OPENVIDU_SECRET} - COTURN_IP=${COTURN_IP:-auto-ipv4} + - COTURN_PORT=${COTURN_PORT:-3478} - OPENVIDU_PRO_CLUSTER=true - OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana} - OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST:-http://127.0.0.1:9200} @@ -74,11 +75,11 @@ services: command: - --log-file=stdout - --external-ip=$$(detect-external-ip) - - --listening-port=3478 + - --listening-port=${COTURN_PORT:-3478} - --fingerprint - --lt-cred-mech - - --min-port=40000 - - --max-port=65535 + - --min-port=${COTURN_MIN_PORT:-40000} + - --max-port=${COTURN_MAX_PORT:-65535} - --realm=openvidu - --verbose logging: diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java index 1034bc5a..448aa2b3 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java @@ -159,6 +159,8 @@ public class OpenviduConfig { private String coturnIp; + private int coturnPort; + private String coturnRedisIp; // If true, coturn relay ips will come with the private IP of the machine @@ -328,6 +330,10 @@ public class OpenviduConfig { return this.coturnIp; } + public int getCoturnPort() { + return this.coturnPort; + } + public RecordingNotification getOpenViduRecordingNotification() { return this.openviduRecordingNotification; } @@ -522,7 +528,7 @@ public class OpenviduConfig { } protected List getNonUserProperties() { - return Arrays.asList("server.port", "SERVER_PORT", "DOTENV_PATH", "COTURN_IP", "COTURN_REDIS_IP", + return Arrays.asList("server.port", "SERVER_PORT", "DOTENV_PATH", "COTURN_IP", "COTURN_PORT", "COTURN_REDIS_IP", "COTURN_REDIS_DBNAME", "COTURN_REDIS_PASSWORD", "COTURN_REDIS_CONNECT_TIMEOUT", "COTURN_INTERNAL_RELAY", "OPENVIDU_RECORDING_IMAGE", "OPENVIDU_RECORDING_ENABLE_GPU"); } @@ -589,6 +595,8 @@ public class OpenviduConfig { checkCoturnIp(); + checkCoturnPort(); + coturnRedisIp = asOptionalInetAddress("COTURN_REDIS_IP"); checkWebhook(); @@ -622,6 +630,14 @@ public class OpenviduConfig { } } + private void checkCoturnPort(){ + String property = "COTURN_PORT"; + coturnPort = this.asNonNegativeInteger(property); + if (coturnPort <= 0 || coturnPort > 65535){ + log.warn("Non valid coturn port, setting to default 3478"); + } + } + private void checkWebhook() { openviduWebhookEnabled = asBoolean("OPENVIDU_WEBHOOK"); openviduWebhookEndpoint = asOptionalURL("OPENVIDU_WEBHOOK_ENDPOINT"); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index ca3a3a92..3c54b939 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -172,6 +172,7 @@ public class SessionEventsHandler { participant.getToken().getRole().name()); } result.addProperty(ProtocolElements.PARTICIPANTJOINED_COTURNIP_PARAM, openviduConfig.getCoturnIp()); + result.addProperty(ProtocolElements.PARTICIPANTJOINED_COTURNPORT_PARAM, openviduConfig.getCoturnPort()); if (participant.getToken().getTurnCredentials() != null) { result.addProperty(ProtocolElements.PARTICIPANTJOINED_TURNUSERNAME_PARAM, participant.getToken().getTurnCredentials().getUsername()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java b/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java index e883ad55..b156f749 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java @@ -46,6 +46,7 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { log.error("No COTURN server will be automatically configured for clients"); } else { log.info("COTURN IP: " + this.openviduConfig.getCoturnIp()); + log.info("COTURN PORT: " + this.openviduConfig.getCoturnPort()); log.info("COTURN Redis DB accessible with string " + this.coturnDatabaseString); log.info("Cleaning COTURN DB..."); if (response.contains("log file opened")) { diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java index dafb9ef8..76b50dfa 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java @@ -303,7 +303,7 @@ public abstract class MediaEndpoint { if (openviduConfig.getCoturnIp() != null && !openviduConfig.getCoturnIp().isEmpty() && openviduConfig.isTurnadminAvailable()) { webEndpoint.setStunServerAddress(openviduConfig.getCoturnIp()); - webEndpoint.setStunServerPort(3478); + webEndpoint.setStunServerPort(openviduConfig.getCoturnPort()); } endpointLatch.countDown();