diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java index b1a44b30..e52e155f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java @@ -46,8 +46,7 @@ public class CDREventRecording extends CDREventEnd { json.addProperty("id", this.recording.getId()); json.addProperty("name", this.recording.getName()); json.addProperty("outputMode", this.recording.getOutputMode().name()); - if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(this.recording.getOutputMode()) - && this.recording.hasVideo()) { + if (RecordingUtils.IS_COMPOSED(this.recording.getOutputMode()) && this.recording.hasVideo()) { json.addProperty("resolution", this.recording.getResolution()); json.addProperty("recordingLayout", this.recording.getRecordingLayout().name()); if (RecordingLayout.CUSTOM.equals(this.recording.getRecordingLayout()) diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java index 8f386ef9..846f2f04 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java @@ -42,7 +42,7 @@ public class CDREventRecordingStatus extends CDREventEnd { json.addProperty("id", this.recording.getId()); json.addProperty("name", this.recording.getName()); json.addProperty("outputMode", this.recording.getOutputMode().name()); - if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(this.recording.getOutputMode()) + if (RecordingUtils.IS_COMPOSED(this.recording.getOutputMode()) && this.recording.hasVideo()) { json.addProperty("resolution", this.recording.getResolution()); json.addProperty("recordingLayout", this.recording.getRecordingLayout().name()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java index 9bad28b6..54014558 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java @@ -200,7 +200,7 @@ public class Session implements SessionInterface { json.addProperty("mediaMode", this.sessionProperties.mediaMode().name()); json.addProperty("recordingMode", this.sessionProperties.recordingMode().name()); json.addProperty("defaultOutputMode", this.sessionProperties.defaultOutputMode().name()); - if (Recording.OutputMode.COMPOSED.equals(this.sessionProperties.defaultOutputMode())) { + if (RecordingUtils.IS_COMPOSED(this.sessionProperties.defaultOutputMode())) { json.addProperty("defaultRecordingLayout", this.sessionProperties.defaultRecordingLayout().name()); if (RecordingLayout.CUSTOM.equals(this.sessionProperties.defaultRecordingLayout())) { json.addProperty("defaultCustomLayout", this.sessionProperties.defaultCustomLayout()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java index 24669a49..e8dde4de 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java @@ -21,6 +21,7 @@ import com.google.gson.JsonObject; import io.openvidu.java.client.RecordingLayout; import io.openvidu.java.client.RecordingProperties; +import io.openvidu.server.utils.RecordingUtils; public class Recording { @@ -71,7 +72,7 @@ public class Recording { .valueOf(json.get("outputMode").getAsString()); RecordingProperties.Builder builder = new RecordingProperties.Builder().name(json.get("name").getAsString()) .outputMode(outputMode).hasAudio(this.hasAudio).hasVideo(this.hasVideo); - if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(outputMode) && this.hasVideo) { + if (RecordingUtils.IS_COMPOSED(outputMode) && this.hasVideo) { this.resolution = json.get("resolution").getAsString(); builder.resolution(this.resolution); RecordingLayout recordingLayout = RecordingLayout.valueOf(json.get("recordingLayout").getAsString()); @@ -188,8 +189,7 @@ public class Recording { json.addProperty("id", this.id); json.addProperty("name", this.recordingProperties.name()); json.addProperty("outputMode", this.getOutputMode().name()); - if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(this.recordingProperties.outputMode()) - && this.hasVideo) { + if (RecordingUtils.IS_COMPOSED(this.recordingProperties.outputMode()) && this.hasVideo) { json.addProperty("resolution", this.resolution); json.addProperty("recordingLayout", this.recordingProperties.recordingLayout().name()); if (RecordingLayout.CUSTOM.equals(this.recordingProperties.recordingLayout())) { diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index c8b5e011..9a733787 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -76,7 +76,7 @@ import io.openvidu.server.utils.CustomFileManager; import io.openvidu.server.utils.DockerManager; import io.openvidu.server.utils.JsonUtils; import io.openvidu.server.utils.QuarantineKiller; -import org.springframework.http.ResponseEntity; +import io.openvidu.server.utils.RecordingUtils; public class RecordingManager { @@ -161,8 +161,8 @@ public class RecordingManager { this.dockerManager = new DockerManager(); this.composedRecordingService = new ComposedRecordingService(this, recordingDownloader, openviduConfig, cdr, quarantineKiller); - this.composedQuickStartRecordingService = new ComposedQuickStartRecordingService(this, recordingDownloader, openviduConfig, cdr, - quarantineKiller); + this.composedQuickStartRecordingService = new ComposedQuickStartRecordingService(this, recordingDownloader, + openviduConfig, cdr, quarantineKiller); this.singleStreamRecordingService = new SingleStreamRecordingService(this, recordingDownloader, openviduConfig, cdr, quarantineKiller); @@ -271,9 +271,9 @@ public class RecordingManager { this.cdr.recordRecordingStarted(recording); this.cdr.recordRecordingStatusChanged(recording, null, recording.getCreatedAt(), - io.openvidu.java.client.Recording.Status.started); + Status.started); - if (!(OutputMode.COMPOSED.equals(properties.outputMode()) && properties.hasVideo())) { + if (!(RecordingUtils.IS_COMPOSED(properties.outputMode()) && properties.hasVideo())) { // Directly send recording started notification for all cases except for // COMPOSED recordings with video (will be sent on first RECORDER subscriber) this.sessionHandler.sendRecordingStartedNotification(session, recording); @@ -319,7 +319,8 @@ public class RecordingManager { recording = this.composedRecordingService.stopRecording(session, recording, reason, hasSessionEnded); break; case COMPOSED_QUICK_START: - recording = this.composedQuickStartRecordingService.stopRecording(session, recording, reason, hasSessionEnded); + recording = this.composedQuickStartRecordingService.stopRecording(session, recording, reason, + hasSessionEnded); break; case INDIVIDUAL: recording = this.singleStreamRecordingService.stopRecording(session, recording, reason, hasSessionEnded); @@ -334,7 +335,8 @@ public class RecordingManager { recording = this.sessionsRecordings.get(session.getSessionId()); switch (recording.getOutputMode()) { case COMPOSED: - recording = this.composedRecordingService.stopRecording(session, recording, reason, kmsDisconnectionTime, true); + recording = this.composedRecordingService.stopRecording(session, recording, reason, kmsDisconnectionTime, + true); if (recording.hasVideo()) { // Evict the recorder participant if composed recording with video this.sessionManager.evictParticipant( @@ -343,7 +345,8 @@ public class RecordingManager { } break; case COMPOSED_QUICK_START: - recording = this.composedQuickStartRecordingService.stopRecording(session, recording, reason, kmsDisconnectionTime, true); + recording = this.composedQuickStartRecordingService.stopRecording(session, recording, reason, + kmsDisconnectionTime, true); if (recording.hasVideo()) { // Evict the recorder participant if composed recording with video this.sessionManager.evictParticipant( @@ -371,15 +374,14 @@ public class RecordingManager { return; } } - if (io.openvidu.java.client.Recording.OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { + if (OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { // Start new RecorderEndpoint for this stream log.info("Starting new RecorderEndpoint in session {} for new stream of participant {}", session.getSessionId(), participant.getParticipantPublicId()); final CountDownLatch startedCountDown = new CountDownLatch(1); this.singleStreamRecordingService.startRecorderEndpointForPublisherEndpoint(session, recordingId, profile, participant, startedCountDown); - } else if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(recording.getOutputMode()) - && !recording.hasVideo()) { + } else if (RecordingUtils.IS_COMPOSED(recording.getOutputMode()) && !recording.hasVideo()) { // Connect this stream to existing Composite recorder log.info("Joining PublisherEndpoint to existing Composite in session {} for new stream of participant {}", session.getSessionId(), participant.getParticipantPublicId()); @@ -393,7 +395,7 @@ public class RecordingManager { log.error("Cannot stop recording of existing stream {}. Session {} is not being recorded", streamId, session.getSessionId()); } - if (io.openvidu.java.client.Recording.OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { + if (OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { // Stop specific RecorderEndpoint for this stream log.info("Stopping RecorderEndpoint in session {} for stream of participant {}", session.getSessionId(), streamId); @@ -408,8 +410,7 @@ public class RecordingManager { } catch (InterruptedException e) { log.error("Exception while waiting for state change", e); } - } else if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(recording.getOutputMode()) - && !recording.hasVideo()) { + } else if (RecordingUtils.IS_COMPOSED(recording.getOutputMode()) && !recording.hasVideo()) { // Disconnect this stream from existing Composite recorder log.info("Removing PublisherEndpoint from Composite in session {} for stream of participant {}", session.getSessionId(), streamId); @@ -431,8 +432,7 @@ public class RecordingManager { } public Collection getFinishedRecordings() { - return this.getAllRecordingsFromHost().stream() - .filter(recording -> recording.getStatus().equals(io.openvidu.java.client.Recording.Status.ready)) + return this.getAllRecordingsFromHost().stream().filter(recording -> recording.getStatus().equals(Status.ready)) .collect(Collectors.toSet()); } @@ -469,7 +469,7 @@ public class RecordingManager { if (recording == null) { return HttpStatus.NOT_FOUND; } - if (io.openvidu.java.client.Recording.Status.stopped.equals(recording.getStatus())) { + if (Status.stopped.equals(recording.getStatus())) { // Recording is being downloaded from remote host log.warn("Cancelling ongoing download process of recording {}", recording.getId()); this.recordingDownloader.cancelDownload(recording.getId()); @@ -502,8 +502,7 @@ public class RecordingManager { return null; } Recording recording = new Recording(json); - if (io.openvidu.java.client.Recording.Status.ready.equals(recording.getStatus()) - || io.openvidu.java.client.Recording.Status.failed.equals(recording.getStatus())) { + if (Status.ready.equals(recording.getStatus()) || Status.failed.equals(recording.getStatus())) { recording.setUrl(getRecordingUrl(recording)); } return recording; @@ -517,7 +516,7 @@ public class RecordingManager { } private String getExtensionFromRecording(Recording recording) { - if (io.openvidu.java.client.Recording.OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { + if (OutputMode.INDIVIDUAL.equals(recording.getOutputMode())) { return "zip"; } else if (recording.hasVideo()) { return "mp4"; diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java index 4fbba93c..fc5a2052 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java @@ -35,6 +35,7 @@ import io.openvidu.server.recording.RecordingDownloader; import io.openvidu.server.utils.CommandExecutor; import io.openvidu.server.utils.CustomFileManager; import io.openvidu.server.utils.QuarantineKiller; +import io.openvidu.server.utils.RecordingUtils; public abstract class RecordingService { @@ -58,7 +59,8 @@ public abstract class RecordingService { public abstract Recording startRecording(Session session, RecordingProperties properties) throws OpenViduException; - public abstract Recording stopRecording(Session session, Recording recording, EndReason reason, boolean hasSessionEnded); + public abstract Recording stopRecording(Session session, Recording recording, EndReason reason, + boolean hasSessionEnded); /** * Generates metadata recording file (".recording.RECORDING_ID" JSON file to @@ -131,8 +133,8 @@ public abstract class RecordingService { /** * Returns a new available recording identifier (adding a number tag at the end - * of the sessionId if it already exists) and rebuilds RecordinProperties object - * to set the final value of "name" property + * of the sessionId if it already exists) and rebuilds RecordingProperties + * object to set the final value of "name" property */ protected PropertiesRecordingId setFinalRecordingNameAndGetFreeRecordingId(Session session, RecordingProperties properties) { @@ -142,8 +144,7 @@ public abstract class RecordingService { RecordingProperties.Builder builder = new RecordingProperties.Builder().name(recordingId) .outputMode(properties.outputMode()).hasAudio(properties.hasAudio()) .hasVideo(properties.hasVideo()); - if (io.openvidu.java.client.Recording.OutputMode.COMPOSED.equals(properties.outputMode()) - && properties.hasVideo()) { + if (RecordingUtils.IS_COMPOSED(properties.outputMode()) && properties.hasVideo()) { builder.resolution(properties.resolution()); builder.recordingLayout(properties.recordingLayout()); if (RecordingLayout.CUSTOM.equals(properties.recordingLayout())) { diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 861ef22f..94dd1d8b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -65,6 +65,7 @@ import io.openvidu.server.kurento.core.KurentoMediaOptions; import io.openvidu.server.kurento.core.KurentoTokenOptions; import io.openvidu.server.recording.Recording; import io.openvidu.server.recording.service.RecordingManager; +import io.openvidu.server.utils.RecordingUtils; /** * @@ -494,7 +495,7 @@ public class SessionRestController { HttpStatus.BAD_REQUEST); } } - if (OutputMode.COMPOSED.equals(finalOutputMode)) { + if (RecordingUtils.IS_COMPOSED(finalOutputMode)) { if (resolution != null && !sessionManager.formatChecker.isAcceptableRecordingResolution(resolution)) { return this.generateErrorResponse( "Wrong \"resolution\" parameter. Acceptable values from 100 to 1999 for both width and height", @@ -552,7 +553,7 @@ public class SessionRestController { RecordingProperties.Builder builder = new RecordingProperties.Builder(); builder.outputMode( finalOutputMode == null ? session.getSessionProperties().defaultOutputMode() : finalOutputMode); - if (finalOutputMode.equals(OutputMode.COMPOSED)) { + if (RecordingUtils.IS_COMPOSED(finalOutputMode)) { if (resolution != null) { builder.resolution(resolution); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/RecordingUtils.java b/openvidu-server/src/main/java/io/openvidu/server/utils/RecordingUtils.java new file mode 100644 index 00000000..e162d17c --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/RecordingUtils.java @@ -0,0 +1,11 @@ +package io.openvidu.server.utils; + +import io.openvidu.java.client.Recording.OutputMode; + +public final class RecordingUtils { + + public final static boolean IS_COMPOSED(OutputMode outputMode) { + return (OutputMode.COMPOSED.equals(outputMode) || OutputMode.COMPOSED_QUICK_START.equals(outputMode)); + } + +}