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 e48d190f..a0336722 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 @@ -773,20 +773,6 @@ public class OpenviduConfig { } } - protected Double asNonNegativeDouble(String property) { - try { - Double doubleValue = Double.parseDouble(getValue(property)); - - if (doubleValue < 0) { - addError(property, "Is not a non negative double"); - } - return doubleValue; - } catch (NumberFormatException e) { - addError(property, "Is not a non negative doubleValue"); - return 0.0; - } - } - /* * This method checks all types of Internet addresses (IPv4, IPv6 and Domains) */ diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java index a71eaedd..1c4fd73f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java @@ -38,6 +38,10 @@ public class Participant { protected GeoLocation location; // Location of the participant protected String platform; // Platform used by the participant to connect to the session protected EndpointType endpointType; // Type of participant (web participant, IP cam participant...) + protected Integer videoWidth = 0; + protected Integer videoHeight = 0; + protected Boolean videoActive = false; + protected Boolean audioActive = false; protected boolean streaming = false; protected volatile boolean closed = false; @@ -141,6 +145,38 @@ public class Participant { public EndpointType getEndpointType() { return this.endpointType; } + + public Integer getVideoWidth() { + return videoWidth; + } + + public void setVideoWidth(Integer videoWidth) { + this.videoWidth = videoWidth; + } + + public Integer getVideoHeight() { + return videoHeight; + } + + public void setVideoHeight(Integer videoHeight) { + this.videoHeight = videoHeight; + } + + public Boolean isVideoActive() { + return videoActive; + } + + public void setVideoActive(Boolean videoActive) { + this.videoActive = videoActive; + } + + public Boolean isAudioActive() { + return audioActive; + } + + public void setAudioActive(Boolean audioActive) { + this.audioActive = audioActive; + } public boolean isStreaming() { return streaming; 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 bee845f2..00126d74 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 @@ -558,6 +558,18 @@ public class SessionEventsHandler { } } + public void onVideoData(Participant participant, Integer transactionId, Integer height, Integer width, + Boolean videoActive, Boolean audioActive) { + participant.setVideoHeight(height); + participant.setVideoWidth(width); + participant.setVideoActive(videoActive); + participant.setAudioActive(audioActive); + log.info( + "Video data of participant {} was initialized. height:{}, width:{}, isVideoActive: {}, isAudioActive: {}", + participant.getParticipantPublicId(), height, width, videoActive, audioActive); + rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, new JsonObject()); + } + public void closeRpcSession(String participantPrivateId) { this.rpcNotificationService.closeRpcSession(participantPrivateId); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index df58dd20..b4475461 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -165,6 +165,8 @@ public abstract class SessionManager { public abstract String getParticipantPrivateIdFromStreamId(String sessionId, String streamId) throws OpenViduException; + + public abstract void onVideoData(Participant participant, Integer transactionId, Integer height, Integer width, Boolean videoActive, Boolean audioActive); /** * Returns a Session given its id diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index d689cd81..81032cfb 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -1107,6 +1107,11 @@ public class KurentoSessionManager extends SessionManager { Session session = this.getSession(sessionId); return ((KurentoSession) session).getParticipantPrivateIdFromStreamId(streamId); } + + @Override + public void onVideoData(Participant participant, Integer transactionId, Integer height, Integer width, Boolean videoActive, Boolean audioActive) { + sessionEventsHandler.onVideoData(participant, transactionId, height, width, videoActive, audioActive); + } private void applyFilterInPublisher(KurentoParticipant kParticipant, KurentoFilter filter) throws OpenViduException { diff --git a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java index 7c66e35c..05f6fdf8 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java @@ -165,6 +165,9 @@ public class RpcHandler extends DefaultJsonRpcHandler { case ProtocolElements.RECONNECTSTREAM_METHOD: reconnectStream(rpcConnection, request); break; + case ProtocolElements.VIDEODATA_METHOD: + updateVideoData(rpcConnection, request); + break; default: log.error("Unrecognized request {}", request); break; @@ -633,6 +636,20 @@ public class RpcHandler extends DefaultJsonRpcHandler { new JsonObject(), e); } } + + private void updateVideoData(RpcConnection rpcConnection, Request request) { + Participant participant; + try { + participant = sanityCheckOfSession(rpcConnection, "videoData"); + int height = getIntParam(request, "height"); + int width = getIntParam(request, "width"); + boolean videoActive = getBooleanParam(request, "videoActive"); + boolean audioActive = getBooleanParam(request, "audioActive"); + sessionManager.onVideoData(participant, request.getId(), height, width, videoActive, audioActive); + } catch (OpenViduException e) { + log.error("Error getting video data: {}", e.toString()); + } + } public void leaveRoomAfterConnClosed(String participantPrivateId, EndReason reason) { try {