openvidu-server: if COMPOSED also if COMPOSED_QUICK_START

pull/508/head
pabloFuente 2020-07-02 11:22:50 +02:00
parent af9cbbf742
commit 476428b9ae
8 changed files with 45 additions and 34 deletions

View File

@ -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())

View File

@ -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());

View File

@ -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());

View File

@ -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())) {

View File

@ -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<Recording> 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";

View File

@ -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())) {

View File

@ -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);
}

View File

@ -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));
}
}