mirror of https://github.com/OpenVidu/openvidu.git
openvidu-server: if COMPOSED also if COMPOSED_QUICK_START
parent
af9cbbf742
commit
476428b9ae
|
@ -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())
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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())) {
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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())) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue