mirror of https://github.com/OpenVidu/openvidu.git
openvidu-java-client/openvidu-node-client RecordingProperties refactoring
parent
89e73262aa
commit
b774d2cefc
|
@ -258,12 +258,10 @@ public class OpenVidu {
|
|||
* Starts the recording of a {@link io.openvidu.java.client.Session}
|
||||
*
|
||||
* @param sessionId The sessionId of the session you want to start recording
|
||||
* @param name The name you want to give to the video file. You can access
|
||||
* this same value in your clients on recording events
|
||||
* (recordingStarted, recordingStopped). <strong>WARNING: this
|
||||
* parameter follows an overwriting policy.</strong> If you
|
||||
* name two recordings the same, the newest MP4 file will
|
||||
* overwrite the oldest one
|
||||
* @param name The name you want to give to the video file.
|
||||
* <strong>WARNING: this parameter follows an overwriting
|
||||
* policy.</strong> If you name two recordings the same, the
|
||||
* newest MP4 file will overwrite the oldest one
|
||||
*
|
||||
* @return The started recording. If this method successfully returns the
|
||||
* Recording object it means that the recording can be stopped with
|
||||
|
|
|
@ -153,9 +153,7 @@ public class Recording {
|
|||
}
|
||||
|
||||
/**
|
||||
* Name of the recording. The video file will be named after this property. You
|
||||
* can access this same value in your clients on recording events
|
||||
* (<code>recordingStarted</code>, <code>recordingStopped</code>)
|
||||
* Name of the recording. The video file will be named after this property
|
||||
*/
|
||||
public String getName() {
|
||||
return this.recordingProperties.name();
|
||||
|
@ -170,15 +168,22 @@ public class Recording {
|
|||
}
|
||||
|
||||
/**
|
||||
* The layout used in this recording. Only defined if OutputMode is COMPOSED
|
||||
* The layout used in this recording. Only applicable if
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode} is
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START} and
|
||||
* {@link Recording#hasVideo()} is true
|
||||
*/
|
||||
public RecordingLayout getRecordingLayout() {
|
||||
return this.recordingProperties.recordingLayout();
|
||||
}
|
||||
|
||||
/**
|
||||
* The custom layout used in this recording. Only defined if if OutputMode is
|
||||
* COMPOSED and
|
||||
* The custom layout used in this recording. Only applicable if
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode} is
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START},
|
||||
* {@link Recording#hasVideo()} is true and
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#customLayout(String)}
|
||||
* has been called
|
||||
*/
|
||||
|
@ -227,14 +232,27 @@ public class Recording {
|
|||
}
|
||||
|
||||
/**
|
||||
* Resolution of the video file. Only defined if OutputMode of the Recording is
|
||||
* set to {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* Resolution of the video file. Only applicable if
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode} is
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START} and
|
||||
* {@link Recording#hasVideo()} is true
|
||||
*/
|
||||
public String getResolution() {
|
||||
return this.recordingProperties.resolution();
|
||||
}
|
||||
|
||||
/**
|
||||
* Frame rate of the video file. Only applicable if
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode} is
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START} and
|
||||
* {@link Recording#hasVideo()} is true
|
||||
*/
|
||||
public int getFrameRate() {
|
||||
return this.recordingProperties.frameRate();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>true</code> if the recording has an audio track, <code>false</code>
|
||||
* otherwise (currently fixed to true)
|
||||
|
|
|
@ -19,9 +19,7 @@ package io.openvidu.java.client;
|
|||
|
||||
/**
|
||||
* See
|
||||
* {@link io.openvidu.java.client.SessionProperties.Builder#defaultRecordingLayout(RecordingLayout)}
|
||||
* and
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#recordingLayout(RecordingLayout)}
|
||||
* {@link io.openvidu.java.client.RecordingProperties#recordingLayout(RecordingLayout)}
|
||||
*/
|
||||
public enum RecordingLayout {
|
||||
|
||||
|
@ -46,8 +44,8 @@ public enum RecordingLayout {
|
|||
HORIZONTAL_PRESENTATION,
|
||||
|
||||
/**
|
||||
* Use your own custom recording layout. See
|
||||
* <a href="https://docs.openvidu.io/en/stable/advanced-features/recording#custom-recording-layouts"
|
||||
* Use your own custom recording layout. See <a href=
|
||||
* "https://docs.openvidu.io/en/stable/advanced-features/recording#custom-recording-layouts"
|
||||
* target="_blank">Custom recording layouts</a> to learn more
|
||||
*/
|
||||
CUSTOM
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
|
||||
package io.openvidu.java.client;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import io.openvidu.java.client.Recording.OutputMode;
|
||||
|
||||
/**
|
||||
* See
|
||||
* {@link io.openvidu.java.client.OpenVidu#startRecording(String, RecordingProperties)}
|
||||
|
@ -28,6 +32,7 @@ public class RecordingProperties {
|
|||
private RecordingLayout recordingLayout;
|
||||
private String customLayout;
|
||||
private String resolution;
|
||||
private int frameRate;
|
||||
private boolean hasAudio;
|
||||
private boolean hasVideo;
|
||||
private long shmSize; // For COMPOSED recording
|
||||
|
@ -39,27 +44,42 @@ public class RecordingProperties {
|
|||
public static class Builder {
|
||||
|
||||
private String name = "";
|
||||
private Recording.OutputMode outputMode;
|
||||
private RecordingLayout recordingLayout;
|
||||
private String customLayout;
|
||||
private String resolution;
|
||||
private Recording.OutputMode outputMode = Recording.OutputMode.COMPOSED;
|
||||
private RecordingLayout recordingLayout = RecordingLayout.BEST_FIT;
|
||||
private String customLayout = "";
|
||||
private String resolution = "1280x720";
|
||||
private int frameRate = 25;
|
||||
private boolean hasAudio = true;
|
||||
private boolean hasVideo = true;
|
||||
private long shmSize = 536870912L;
|
||||
private String mediaNode;
|
||||
|
||||
public Builder() {
|
||||
}
|
||||
|
||||
public Builder(RecordingProperties props) {
|
||||
this.name = props.name();
|
||||
this.outputMode = props.outputMode();
|
||||
this.recordingLayout = props.recordingLayout();
|
||||
this.customLayout = props.customLayout();
|
||||
this.resolution = props.resolution();
|
||||
this.frameRate = props.frameRate();
|
||||
this.hasAudio = props.hasAudio();
|
||||
this.hasVideo = props.hasVideo();
|
||||
this.shmSize = props.shmSize();
|
||||
this.mediaNode = props.mediaNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder for {@link io.openvidu.java.client.RecordingProperties}
|
||||
*/
|
||||
public RecordingProperties build() {
|
||||
return new RecordingProperties(this.name, this.outputMode, this.recordingLayout, this.customLayout,
|
||||
this.resolution, this.hasAudio, this.hasVideo, this.shmSize, this.mediaNode);
|
||||
this.resolution, this.frameRate, this.hasAudio, this.hasVideo, this.shmSize, this.mediaNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to set the name of the video file. You can access this same
|
||||
* value in your clients on recording events (<code>recordingStarted</code>,
|
||||
* <code>recordingStopped</code>)
|
||||
* Call this method to set the name of the video file
|
||||
*/
|
||||
public RecordingProperties.Builder name(String name) {
|
||||
this.name = name;
|
||||
|
@ -67,8 +87,11 @@ public class RecordingProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Call this method to set the mode of recording: COMPOSED for a single archive
|
||||
* in a grid layout or INDIVIDUAL for one archive for each stream
|
||||
* Call this method to set the mode of recording:
|
||||
* {@link Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START} for
|
||||
* a single archive in a grid layout or {@link Recording.OutputMode#INDIVIDUAL}
|
||||
* for one archive for each stream.
|
||||
*/
|
||||
public RecordingProperties.Builder outputMode(Recording.OutputMode outputMode) {
|
||||
this.outputMode = outputMode;
|
||||
|
@ -77,11 +100,9 @@ public class RecordingProperties {
|
|||
|
||||
/**
|
||||
* Call this method to set the layout to be used in the recording. Will only
|
||||
* have effect if
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)}
|
||||
* has been called with value
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* have effect for {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED}
|
||||
* or {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true.
|
||||
*/
|
||||
public RecordingProperties.Builder recordingLayout(RecordingLayout layout) {
|
||||
this.recordingLayout = layout;
|
||||
|
@ -94,13 +115,6 @@ public class RecordingProperties {
|
|||
* to {@link io.openvidu.java.client.RecordingLayout#CUSTOM} you can call this
|
||||
* method to set the relative path to the specific custom layout you want to
|
||||
* use.<br>
|
||||
* Will only have effect if
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)
|
||||
* Builder.outputMode()} has been called with value
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED
|
||||
* OutputMode.COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START
|
||||
* OutputMode.COMPOSED_QUICK_START}.<br>
|
||||
* See <a href=
|
||||
* "https://docs.openvidu.io/en/stable/advanced-features/recording#custom-recording-layouts"
|
||||
* target="_blank">Custom recording layouts</a> to learn more
|
||||
|
@ -114,22 +128,35 @@ public class RecordingProperties {
|
|||
* Call this method to specify the recording resolution. Must be a string with
|
||||
* format "WIDTHxHEIGHT", being both WIDTH and HEIGHT the number of pixels
|
||||
* between 100 and 1999.<br>
|
||||
* Will only have effect if
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)
|
||||
* Builder.outputMode()} has been called with value
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED
|
||||
* OutputMode.COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START
|
||||
* OutputMode.COMPOSED_QUICK_START}. For
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL
|
||||
* OutputMode.INDIVIDUAL} all individual video files will have the native
|
||||
* resolution of the published stream
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings. For
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL} all
|
||||
* individual video files will have the native resolution of the published
|
||||
* stream.
|
||||
*/
|
||||
public RecordingProperties.Builder resolution(String resolution) {
|
||||
this.resolution = resolution;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to specify the recording frame rate. Will only have effect
|
||||
* for {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings. For
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL} all
|
||||
* individual video files will have the native frame rate of the published
|
||||
* stream.
|
||||
*/
|
||||
public RecordingProperties.Builder frameRate(int frameRate) {
|
||||
this.frameRate = frameRate;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to specify whether to record audio or not. Cannot be set to
|
||||
* false at the same time as
|
||||
|
@ -151,9 +178,13 @@ public class RecordingProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* If COMPOSED recording, call this method to specify the amount of shared
|
||||
* memory reserved for the recording process in bytes. Minimum 134217728 (128
|
||||
* MB). Property ignored if INDIVIDUAL recording
|
||||
* Call this method to specify the amount of shared memory reserved for the
|
||||
* recording process in bytes. Minimum 134217728 (128MB).<br>
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings
|
||||
*/
|
||||
public RecordingProperties.Builder shmSize(long shmSize) {
|
||||
this.shmSize = shmSize;
|
||||
|
@ -167,8 +198,10 @@ public class RecordingProperties {
|
|||
* 3px; font-size: 13px; line-height:21px; font-family: Montserrat,
|
||||
* sans-serif">PRO</a> Call this method to force the recording to be hosted in
|
||||
* the Media Node with identifier <code>mediaNodeId</code>. This property only
|
||||
* applies to COMPOSED recordings and is ignored for INDIVIDUAL recordings, that
|
||||
* are always hosted in the same Media Node hosting its Session
|
||||
* applies to COMPOSED or COMPOSED_QUICK_START recordings with
|
||||
* {@link RecordingProperties#hasVideo()} to true and is ignored for INDIVIDUAL
|
||||
* recordings and audio-only recordings, that are always hosted in the same
|
||||
* Media Node hosting its Session
|
||||
*/
|
||||
public RecordingProperties.Builder mediaNode(String mediaNodeId) {
|
||||
this.mediaNode = mediaNodeId;
|
||||
|
@ -178,13 +211,14 @@ public class RecordingProperties {
|
|||
}
|
||||
|
||||
protected RecordingProperties(String name, Recording.OutputMode outputMode, RecordingLayout layout,
|
||||
String customLayout, String resolution, boolean hasAudio, boolean hasVideo, long shmSize,
|
||||
String customLayout, String resolution, int frameRate, boolean hasAudio, boolean hasVideo, long shmSize,
|
||||
String mediaNode) {
|
||||
this.name = name;
|
||||
this.outputMode = outputMode;
|
||||
this.recordingLayout = layout;
|
||||
this.customLayout = customLayout;
|
||||
this.resolution = resolution;
|
||||
this.frameRate = frameRate;
|
||||
this.hasAudio = hasAudio;
|
||||
this.hasVideo = hasVideo;
|
||||
this.shmSize = shmSize;
|
||||
|
@ -192,9 +226,7 @@ public class RecordingProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Defines the name you want to give to the video file. You can access this same
|
||||
* value in your clients on recording events (<code>recordingStarted</code>,
|
||||
* <code>recordingStopped</code>)
|
||||
* Defines the name you want to give to the video file
|
||||
*/
|
||||
public String name() {
|
||||
return this.name;
|
||||
|
@ -215,12 +247,11 @@ public class RecordingProperties {
|
|||
|
||||
/**
|
||||
* Defines the layout to be used in the recording.<br>
|
||||
* Will only have effect if
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)
|
||||
* Builder.outputMode()} has been called with value
|
||||
* {@link Recording.OutputMode#COMPOSED OutputMode.COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START
|
||||
* OutputMode.COMPOSED_QUICK_START}.<br>
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings<br>
|
||||
* <br>
|
||||
*
|
||||
* Default to {@link RecordingLayout#BEST_FIT RecordingLayout.BEST_FIT}
|
||||
|
@ -243,22 +274,40 @@ public class RecordingProperties {
|
|||
|
||||
/**
|
||||
* Defines the resolution of the recorded video.<br>
|
||||
* Will only have effect if
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)}
|
||||
* has been called with value
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}.
|
||||
* For {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL} all
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings. For
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL} all
|
||||
* individual video files will have the native resolution of the published
|
||||
* stream.<br>
|
||||
* <br>
|
||||
*
|
||||
* Default to "1920x1080"
|
||||
* Default to "1280x720"
|
||||
*/
|
||||
public String resolution() {
|
||||
return this.resolution;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the frame rate of the recorded video.<br>
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings. For
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#INDIVIDUAL} all
|
||||
* individual video files will have the native frame rate of the published
|
||||
* stream.<br>
|
||||
* <br>
|
||||
*
|
||||
* Default to 25
|
||||
*/
|
||||
public int frameRate() {
|
||||
return this.frameRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines whether to record audio or not. Cannot be set to false at the same
|
||||
* time as {@link RecordingProperties#hasVideo()}.<br>
|
||||
|
@ -282,9 +331,13 @@ public class RecordingProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* If COMPOSED recording, the amount of shared memory reserved for the recording
|
||||
* process in bytes. Minimum 134217728 (128MB). Property ignored if INDIVIDUAL
|
||||
* recording<br>
|
||||
* The amount of shared memory reserved for the recording process in bytes.
|
||||
* Minimum 134217728 (128MB).<br>
|
||||
* Will only have effect for
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
* recordings with {@link RecordingProperties#hasVideo()} to true. Property
|
||||
* ignored for INDIVIDUAL recordings and audio-only recordings<br>
|
||||
* <br>
|
||||
*
|
||||
* Default to 536870912 (512 MB)
|
||||
|
@ -300,11 +353,71 @@ public class RecordingProperties {
|
|||
* 3px; font-size: 13px; line-height:21px; font-family: Montserrat,
|
||||
* sans-serif">PRO</a> The Media Node where to host the recording. The default
|
||||
* option if this property is not defined is the same Media Node hosting the
|
||||
* Session to record. This property only applies to COMPOSED recordings and is
|
||||
* ignored for INDIVIDUAL recordings
|
||||
* Session to record. This property only applies to COMPOSED or
|
||||
* COMPOSED_QUICK_START recordings with {@link RecordingProperties#hasVideo()}
|
||||
* to true and is ignored for INDIVIDUAL recordings and audio-only recordings
|
||||
*/
|
||||
public String mediaNode() {
|
||||
return this.mediaNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hidden
|
||||
*/
|
||||
public JsonObject toJson() {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("name", name);
|
||||
json.addProperty("outputMode", outputMode.name());
|
||||
json.addProperty("hasAudio", hasAudio);
|
||||
json.addProperty("hasVideo", hasVideo);
|
||||
if (OutputMode.COMPOSED.equals(outputMode) || OutputMode.COMPOSED_QUICK_START.equals(outputMode)) {
|
||||
json.addProperty("recordingLayout", recordingLayout.name());
|
||||
if (RecordingLayout.CUSTOM.equals(recordingLayout)) {
|
||||
json.addProperty("customLayout", customLayout);
|
||||
}
|
||||
json.addProperty("resolution", resolution);
|
||||
json.addProperty("frameRate", frameRate);
|
||||
json.addProperty("shmSize", shmSize);
|
||||
}
|
||||
if (this.mediaNode != null) {
|
||||
json.addProperty("mediaNode", mediaNode);
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
public static RecordingProperties fromJson(JsonObject json) {
|
||||
Builder builder = new RecordingProperties.Builder();
|
||||
if (json.has("name")) {
|
||||
builder.name(json.get("name").getAsString());
|
||||
}
|
||||
if (json.has("outputMode")) {
|
||||
builder.outputMode(OutputMode.valueOf(json.get("outputMode").getAsString()));
|
||||
}
|
||||
if (json.has("recordingLayout")) {
|
||||
builder.recordingLayout(RecordingLayout.valueOf(json.get("recordingLayout").getAsString()));
|
||||
}
|
||||
if (json.has("customLayout")) {
|
||||
builder.customLayout(json.get("customLayout").getAsString());
|
||||
}
|
||||
if (json.has("resolution")) {
|
||||
builder.resolution(json.get("resolution").getAsString());
|
||||
}
|
||||
if (json.has("frameRate")) {
|
||||
builder.frameRate(json.get("frameRate").getAsInt());
|
||||
}
|
||||
if (json.has("hasAudio")) {
|
||||
builder.hasAudio(json.get("hasAudio").getAsBoolean());
|
||||
}
|
||||
if (json.has("hasVideo")) {
|
||||
builder.hasVideo(json.get("hasVideo").getAsBoolean());
|
||||
}
|
||||
if (json.has("shmSize")) {
|
||||
builder.shmSize(json.get("shmSize").getAsLong());
|
||||
}
|
||||
if (json.has("mediaNode")) {
|
||||
builder.mediaNode(json.get("mediaNode").getAsString());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -684,22 +684,17 @@ public class Session {
|
|||
this.sessionId = responseJson.get("id").getAsString();
|
||||
this.createdAt = responseJson.get("createdAt").getAsLong();
|
||||
|
||||
// forcedVideoCodec and allowTranscoding values are configured in OpenVidu Server
|
||||
// via configuration or session
|
||||
// forcedVideoCodec and allowTranscoding values are configured in OpenVidu
|
||||
// Server via configuration or session
|
||||
VideoCodec forcedVideoCodec = VideoCodec.valueOf(responseJson.get("forcedVideoCodec").getAsString());
|
||||
Boolean allowTranscoding = responseJson.get("allowTranscoding").getAsBoolean();
|
||||
|
||||
SessionProperties responseProperties = new SessionProperties.Builder()
|
||||
.customSessionId(properties.customSessionId())
|
||||
.mediaMode(properties.mediaMode())
|
||||
.customSessionId(properties.customSessionId()).mediaMode(properties.mediaMode())
|
||||
.recordingMode(properties.recordingMode())
|
||||
.defaultOutputMode(properties.defaultOutputMode())
|
||||
.defaultRecordingLayout(properties.defaultRecordingLayout())
|
||||
.defaultCustomLayout(properties.defaultCustomLayout())
|
||||
.mediaNode(properties.mediaNode())
|
||||
.forcedVideoCodec(forcedVideoCodec)
|
||||
.allowTranscoding(allowTranscoding)
|
||||
.build();
|
||||
.defaultRecordingProperties(properties.defaultRecordingProperties())
|
||||
.mediaNode(properties.mediaNode()).forcedVideoCodec(forcedVideoCodec)
|
||||
.allowTranscoding(allowTranscoding).build();
|
||||
|
||||
this.properties = responseProperties;
|
||||
log.info("Session '{}' created", this.sessionId);
|
||||
|
@ -734,13 +729,10 @@ public class Session {
|
|||
this.recording = json.get("recording").getAsBoolean();
|
||||
SessionProperties.Builder builder = new SessionProperties.Builder()
|
||||
.mediaMode(MediaMode.valueOf(json.get("mediaMode").getAsString()))
|
||||
.recordingMode(RecordingMode.valueOf(json.get("recordingMode").getAsString()))
|
||||
.defaultOutputMode(Recording.OutputMode.valueOf(json.get("defaultOutputMode").getAsString()));
|
||||
if (json.has("defaultRecordingLayout")) {
|
||||
builder.defaultRecordingLayout(RecordingLayout.valueOf(json.get("defaultRecordingLayout").getAsString()));
|
||||
}
|
||||
if (json.has("defaultCustomLayout")) {
|
||||
builder.defaultCustomLayout(json.get("defaultCustomLayout").getAsString());
|
||||
.recordingMode(RecordingMode.valueOf(json.get("recordingMode").getAsString()));
|
||||
if (json.has("defaultRecordingProperties")) {
|
||||
builder.defaultRecordingProperties(
|
||||
RecordingProperties.fromJson(json.get("defaultRecordingProperties").getAsJsonObject()));
|
||||
}
|
||||
if (json.has("customSessionId")) {
|
||||
builder.customSessionId(json.get("customSessionId").getAsString());
|
||||
|
@ -791,10 +783,10 @@ public class Session {
|
|||
json.addProperty("recording", this.recording);
|
||||
json.addProperty("mediaMode", this.properties.mediaMode().name());
|
||||
json.addProperty("recordingMode", this.properties.recordingMode().name());
|
||||
json.addProperty("defaultOutputMode", this.properties.defaultOutputMode().name());
|
||||
json.addProperty("defaultRecordingLayout", this.properties.defaultRecordingLayout().name());
|
||||
json.addProperty("defaultCustomLayout", this.properties.defaultCustomLayout());
|
||||
if(this.properties.forcedVideoCodec() != null) {
|
||||
if (this.properties.defaultRecordingProperties() != null) {
|
||||
json.add("defaultRecordingProperties", this.properties.defaultRecordingProperties().toJson());
|
||||
}
|
||||
if (this.properties.forcedVideoCodec() != null) {
|
||||
json.addProperty("forcedVideoCodec", this.properties.forcedVideoCodec().name());
|
||||
}
|
||||
if (this.properties.isTranscodingAllowed() != null) {
|
||||
|
|
|
@ -19,8 +19,6 @@ package io.openvidu.java.client;
|
|||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import io.openvidu.java.client.Recording.OutputMode;
|
||||
|
||||
/**
|
||||
* See {@link io.openvidu.java.client.OpenVidu#createSession(SessionProperties)}
|
||||
*/
|
||||
|
@ -28,9 +26,7 @@ public class SessionProperties {
|
|||
|
||||
private MediaMode mediaMode;
|
||||
private RecordingMode recordingMode;
|
||||
private OutputMode defaultOutputMode;
|
||||
private RecordingLayout defaultRecordingLayout;
|
||||
private String defaultCustomLayout;
|
||||
private RecordingProperties defaultRecordingProperties;
|
||||
private String customSessionId;
|
||||
private String mediaNode;
|
||||
private VideoCodec forcedVideoCodec;
|
||||
|
@ -43,30 +39,26 @@ public class SessionProperties {
|
|||
|
||||
private MediaMode mediaMode = MediaMode.ROUTED;
|
||||
private RecordingMode recordingMode = RecordingMode.MANUAL;
|
||||
private OutputMode defaultOutputMode = OutputMode.COMPOSED;
|
||||
private RecordingLayout defaultRecordingLayout = RecordingLayout.BEST_FIT;
|
||||
private String defaultCustomLayout = "";
|
||||
private RecordingProperties defaultRecordingProperties = new RecordingProperties.Builder().build();
|
||||
private String customSessionId = "";
|
||||
private String mediaNode;
|
||||
private VideoCodec forcedVideoCodec;
|
||||
private Boolean allowTranscoding;
|
||||
private VideoCodec forcedVideoCodec = VideoCodec.VP8;
|
||||
private Boolean allowTranscoding = false;
|
||||
|
||||
/**
|
||||
* Returns the {@link io.openvidu.java.client.SessionProperties} object properly
|
||||
* configured
|
||||
*/
|
||||
public SessionProperties build() {
|
||||
return new SessionProperties(this.mediaMode, this.recordingMode, this.defaultOutputMode,
|
||||
this.defaultRecordingLayout, this.defaultCustomLayout, this.customSessionId, this.mediaNode,
|
||||
this.forcedVideoCodec, this.allowTranscoding);
|
||||
return new SessionProperties(this.mediaMode, this.recordingMode, this.defaultRecordingProperties,
|
||||
this.customSessionId, this.mediaNode, this.forcedVideoCodec, this.allowTranscoding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to set how the media streams will be sent and received by
|
||||
* your clients: routed through OpenVidu Media Node
|
||||
* (<code>MediaMode.ROUTED</code>) or attempting direct p2p connections
|
||||
* (<code>MediaMode.RELAYED</code>, <i>not available yet</i>)
|
||||
*
|
||||
* (<code>MediaMode.RELAYED</code>, <i>not available yet</i>)<br>
|
||||
* Default value is <code>MediaMode.ROUTED</code>
|
||||
*/
|
||||
public SessionProperties.Builder mediaMode(MediaMode mediaMode) {
|
||||
|
@ -85,53 +77,14 @@ public class SessionProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Call this method to set the the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#outputMode()} of every
|
||||
* recording of this session. You can easily override this value later when
|
||||
* starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)}
|
||||
* with any other value.<br>
|
||||
* Default value is {@link Recording.OutputMode#COMPOSED}
|
||||
* Call this method to set the default recording properties of this session. You
|
||||
* can easily override this value later when starting a
|
||||
* {@link io.openvidu.java.client.Recording} by providing new
|
||||
* {@link RecordingProperties}<br>
|
||||
* Default values defined in {@link RecordingProperties} class.
|
||||
*/
|
||||
public SessionProperties.Builder defaultOutputMode(OutputMode outputMode) {
|
||||
this.defaultOutputMode = outputMode;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to set the the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#recordingLayout()} of
|
||||
* every recording of this session. You can easily override this value later
|
||||
* when starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#recordingLayout(RecordingLayout)}
|
||||
* with any other value.<br>
|
||||
* Default value is {@link RecordingLayout#BEST_FIT}<br>
|
||||
* <br>
|
||||
* Recording layouts are only applicable to recordings with OutputMode
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
*/
|
||||
public SessionProperties.Builder defaultRecordingLayout(RecordingLayout layout) {
|
||||
this.defaultRecordingLayout = layout;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to set the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#customLayout()} of every
|
||||
* recording of this session. You can easily override this value later when
|
||||
* starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#customLayout(String)}
|
||||
* with any other value.<br>
|
||||
* <br>
|
||||
*
|
||||
* Custom layouts are only applicable to recordings with OutputMode
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} (or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START})
|
||||
* and RecordingLayout {@link io.openvidu.java.client.RecordingLayout#CUSTOM}
|
||||
*/
|
||||
public SessionProperties.Builder defaultCustomLayout(String path) {
|
||||
this.defaultCustomLayout = path;
|
||||
public SessionProperties.Builder defaultRecordingProperties(RecordingProperties defaultRecordingProperties) {
|
||||
this.defaultRecordingProperties = defaultRecordingProperties;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -161,12 +114,13 @@ public class SessionProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Call this method to define which video codec do you want to be forcibly used for this session.
|
||||
* This allows browsers/clients to use the same codec avoiding transcoding in the media server.
|
||||
* If the browser/client is not compatible with the specified codec and {@link #allowTranscoding(Boolean)}
|
||||
* is <code>false</code> and exception will occur.
|
||||
*
|
||||
* If forcedVideoCodec is set to NONE, no codec will be forced.
|
||||
* Call this method to define which video codec do you want to be forcibly used
|
||||
* for this session. This allows browsers/clients to use the same codec avoiding
|
||||
* transcoding in the media server. If the browser/client is not compatible with
|
||||
* the specified codec and {@link #allowTranscoding(Boolean)} is
|
||||
* <code>false</code> and exception will occur. If forcedVideoCodec is set to
|
||||
* NONE, no codec will be forced.<br>
|
||||
* Default value is {@link VideoCodec#VP8}
|
||||
*/
|
||||
public SessionProperties.Builder forcedVideoCodec(VideoCodec forcedVideoCodec) {
|
||||
this.forcedVideoCodec = forcedVideoCodec;
|
||||
|
@ -174,8 +128,10 @@ public class SessionProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Call this method to define if you want to allow transcoding in the media server or not
|
||||
* when {@link #forcedVideoCodec(VideoCodec)} is not compatible with the browser/client.
|
||||
* Call this method to define if you want to allow transcoding in the media
|
||||
* server or not when {@link #forcedVideoCodec(VideoCodec)} is not compatible
|
||||
* with the browser/client.<br>
|
||||
* Default value is false
|
||||
*/
|
||||
public SessionProperties.Builder allowTranscoding(Boolean allowTranscoding) {
|
||||
this.allowTranscoding = allowTranscoding;
|
||||
|
@ -187,21 +143,17 @@ public class SessionProperties {
|
|||
protected SessionProperties() {
|
||||
this.mediaMode = MediaMode.ROUTED;
|
||||
this.recordingMode = RecordingMode.MANUAL;
|
||||
this.defaultOutputMode = OutputMode.COMPOSED;
|
||||
this.defaultRecordingLayout = RecordingLayout.BEST_FIT;
|
||||
this.defaultCustomLayout = "";
|
||||
this.defaultRecordingProperties = new RecordingProperties.Builder().build();
|
||||
this.customSessionId = "";
|
||||
this.mediaNode = "";
|
||||
}
|
||||
|
||||
private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, OutputMode outputMode,
|
||||
RecordingLayout layout, String defaultCustomLayout, String customSessionId, String mediaNode,
|
||||
private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode,
|
||||
RecordingProperties defaultRecordingProperties, String customSessionId, String mediaNode,
|
||||
VideoCodec forcedVideoCodec, Boolean allowTranscoding) {
|
||||
this.mediaMode = mediaMode;
|
||||
this.recordingMode = recordingMode;
|
||||
this.defaultOutputMode = outputMode;
|
||||
this.defaultRecordingLayout = layout;
|
||||
this.defaultCustomLayout = defaultCustomLayout;
|
||||
this.defaultRecordingProperties = defaultRecordingProperties;
|
||||
this.customSessionId = customSessionId;
|
||||
this.mediaNode = mediaNode;
|
||||
this.forcedVideoCodec = forcedVideoCodec;
|
||||
|
@ -227,46 +179,13 @@ public class SessionProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Defines the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#outputMode()} of every
|
||||
* recording of this session. You can easily override this value later when
|
||||
* starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#outputMode(Recording.OutputMode)}
|
||||
* with any other value
|
||||
* Defines the default recording properties of this session. You can easily
|
||||
* override this value later when starting a
|
||||
* {@link io.openvidu.java.client.Recording} by providing new
|
||||
* {@link RecordingProperties}
|
||||
*/
|
||||
public OutputMode defaultOutputMode() {
|
||||
return this.defaultOutputMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#recordingLayout()} of
|
||||
* every recording of this session. You can easily override this value later
|
||||
* when starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#recordingLayout(RecordingLayout)}
|
||||
* with any other value.<br>
|
||||
* Recording layouts are only applicable to recordings with OutputMode
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START}
|
||||
*/
|
||||
public RecordingLayout defaultRecordingLayout() {
|
||||
return this.defaultRecordingLayout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the default value used to initialize property
|
||||
* {@link io.openvidu.java.client.RecordingProperties#customLayout()} of every
|
||||
* recording of this session. You can easily override this value later when
|
||||
* starting a {@link io.openvidu.java.client.Recording} by calling
|
||||
* {@link io.openvidu.java.client.RecordingProperties.Builder#customLayout(String)}
|
||||
* with any other value.<br>
|
||||
* Custom layouts are only applicable to recordings with OutputMode
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED} (or
|
||||
* {@link io.openvidu.java.client.Recording.OutputMode#COMPOSED_QUICK_START})
|
||||
* and RecordingLayout {@link io.openvidu.java.client.RecordingLayout#CUSTOM}
|
||||
*/
|
||||
public String defaultCustomLayout() {
|
||||
return this.defaultCustomLayout;
|
||||
public RecordingProperties defaultRecordingProperties() {
|
||||
return this.defaultRecordingProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -301,8 +220,8 @@ public class SessionProperties {
|
|||
}
|
||||
|
||||
/**
|
||||
* Defines if transcoding is allowed or not when {@link #forcedVideoCodec}
|
||||
* is not a compatible codec with the browser/client.
|
||||
* Defines if transcoding is allowed or not when {@link #forcedVideoCodec} is
|
||||
* not a compatible codec with the browser/client.
|
||||
*/
|
||||
public Boolean isTranscodingAllowed() {
|
||||
return this.allowTranscoding;
|
||||
|
@ -312,10 +231,8 @@ public class SessionProperties {
|
|||
JsonObject json = new JsonObject();
|
||||
json.addProperty("mediaMode", mediaMode().name());
|
||||
json.addProperty("recordingMode", recordingMode().name());
|
||||
json.addProperty("defaultOutputMode", defaultOutputMode().name());
|
||||
json.addProperty("defaultRecordingLayout", defaultRecordingLayout().name());
|
||||
json.addProperty("defaultCustomLayout", defaultCustomLayout());
|
||||
json.addProperty("customSessionId", customSessionId());
|
||||
json.add("defaultRecordingProperties", defaultRecordingProperties.toJson());
|
||||
if (mediaNode() != null) {
|
||||
JsonObject mediaNodeJson = new JsonObject();
|
||||
mediaNodeJson.addProperty("id", mediaNode());
|
||||
|
|
|
@ -84,7 +84,7 @@ export class Recording {
|
|||
};
|
||||
if (this.properties.outputMode.toString() === Recording.OutputMode[Recording.OutputMode.COMPOSED]
|
||||
|| this.properties.outputMode.toString() === Recording.OutputMode[Recording.OutputMode.COMPOSED_QUICK_START]) {
|
||||
this.properties.resolution = !!(json['resolution']) ? json['resolution'] : '1920x1080';
|
||||
this.properties.resolution = !!(json['resolution']) ? json['resolution'] : '1280x720';
|
||||
this.properties.recordingLayout = !!(json['recordingLayout']) ? json['recordingLayout'] : RecordingLayout.BEST_FIT;
|
||||
if (this.properties.recordingLayout.toString() === RecordingLayout[RecordingLayout.CUSTOM]) {
|
||||
this.properties.customLayout = json['customLayout'];
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* See [[SessionProperties.defaultRecordingLayout]] and [[RecordingProperties.recordingLayout]]
|
||||
* See [[RecordingProperties.recordingLayout]]
|
||||
*/
|
||||
export enum RecordingLayout {
|
||||
|
||||
|
|
|
@ -32,45 +32,67 @@ export interface RecordingProperties {
|
|||
|
||||
/**
|
||||
* The mode of recording: COMPOSED for a single archive in a grid layout or INDIVIDUAL for one archive for each stream
|
||||
*
|
||||
* Default to [[Recording.OutputMode.COMPOSED]]
|
||||
*/
|
||||
outputMode?: Recording.OutputMode;
|
||||
|
||||
/**
|
||||
* The layout to be used in the recording.<br>
|
||||
* Will only have effect if [[RecordingProperties.outputMode]] is `COMPOSED` or `COMPOSED_QUICK_START`
|
||||
*
|
||||
* Default to [[RecordingLayout.BEST_FIT]]
|
||||
*/
|
||||
recordingLayout?: RecordingLayout;
|
||||
|
||||
/**
|
||||
* The relative path to the specific custom layout you want to use.<br>
|
||||
* Will only have effect if [[RecordingProperties.outputMode]] is `COMPOSED` (or `COMPOSED_QUICK_START`) and [[RecordingProperties.recordingLayout]] is `CUSTOM`<br>
|
||||
* See [Custom recording layouts](/en/stable/advanced-features/recording#custom-recording-layouts) to learn more
|
||||
* See [Custom recording layouts](/en/stable/advanced-features/recording#custom-recording-layouts) to learn more.
|
||||
*/
|
||||
customLayout?: string;
|
||||
|
||||
/**
|
||||
* Recording video file resolution. Must be a string with format "WIDTHxHEIGHT",
|
||||
* being both WIDTH and HEIGHT the number of pixels between 100 and 1999.<br>
|
||||
* Will only have effect if [[RecordingProperties.outputMode]]
|
||||
* is set to [[Recording.OutputMode.COMPOSED]] or [[Recording.OutputMode.COMPOSED_QUICK_START]].
|
||||
* For [[Recording.OutputMode.INDIVIDUAL]] all
|
||||
* individual video files will have the native resolution of the published stream
|
||||
* Will only have effect if [[RecordingProperties.outputMode]] is set to [[Recording.OutputMode.COMPOSED]] or [[Recording.OutputMode.COMPOSED_QUICK_START]]
|
||||
* and [[RecordingProperties.hasVideo]] is set to true. For [[Recording.OutputMode.INDIVIDUAL]] all individual video files will have the native resolution of the published stream.
|
||||
*
|
||||
* Default to "1280x720"
|
||||
*/
|
||||
resolution?: string;
|
||||
|
||||
/**
|
||||
* Recording video file frame rate.<br>
|
||||
* Will only have effect if [[RecordingProperties.outputMode]]
|
||||
* is set to [[Recording.OutputMode.COMPOSED]] or [[Recording.OutputMode.COMPOSED_QUICK_START]] and [[RecordingProperties.hasVideo]] is set to true.
|
||||
* For [[Recording.OutputMode.INDIVIDUAL]] all individual video files will have the native frame rate of the published stream.
|
||||
*
|
||||
* Default to 25
|
||||
*/
|
||||
frameRate?: number;
|
||||
|
||||
/**
|
||||
* Whether or not to record audio. Cannot be set to false at the same time as [[RecordingProperties.hasVideo]]
|
||||
*
|
||||
* Default to true
|
||||
*/
|
||||
hasAudio?: boolean;
|
||||
|
||||
/**
|
||||
* Whether or not to record video. Cannot be set to false at the same time as [[RecordingProperties.hasAudio]]
|
||||
*
|
||||
* Default to true
|
||||
*/
|
||||
hasVideo?: boolean;
|
||||
|
||||
/**
|
||||
* If COMPOSED recording, the amount of shared memory reserved for the recording process in bytes.
|
||||
* Minimum 134217728 (128MB). Property ignored if INDIVIDUAL recording. Default to 536870912 (512 MB)
|
||||
* The amount of shared memory reserved for the recording process in bytes.
|
||||
* Will only have effect if [[RecordingProperties.outputMode]] is set to [[Recording.OutputMode.COMPOSED]] or [[Recording.OutputMode.COMPOSED_QUICK_START]]
|
||||
* and [[RecordingProperties.hasVideo]] is set to true. Property ignored for INDIVIDUAL recordings and audio-only recordings.
|
||||
* Minimum 134217728 (128MB).
|
||||
*
|
||||
* Default to 536870912 (512 MB)
|
||||
*/
|
||||
shmSize?: number;
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
|
||||
import axios, { AxiosError } from 'axios';
|
||||
import { VideoCodec } from './VideoCodec';
|
||||
import { Connection } from './Connection';
|
||||
import { ConnectionProperties } from './ConnectionProperties';
|
||||
import { MediaMode } from './MediaMode';
|
||||
|
@ -90,12 +91,7 @@ export class Session {
|
|||
// Empty parameter
|
||||
this.properties = {};
|
||||
}
|
||||
this.properties.mediaMode = !!this.properties.mediaMode ? this.properties.mediaMode : MediaMode.ROUTED;
|
||||
this.properties.recordingMode = !!this.properties.recordingMode ? this.properties.recordingMode : RecordingMode.MANUAL;
|
||||
this.properties.defaultOutputMode = !!this.properties.defaultOutputMode ? this.properties.defaultOutputMode : Recording.OutputMode.COMPOSED;
|
||||
this.properties.defaultRecordingLayout = !!this.properties.defaultRecordingLayout ? this.properties.defaultRecordingLayout : RecordingLayout.BEST_FIT;
|
||||
this.properties.forcedVideoCodec = !!this.properties.forcedVideoCodec ? this.properties.forcedVideoCodec : undefined;
|
||||
this.properties.allowTranscoding = this.properties.allowTranscoding != null ? this.properties.allowTranscoding : undefined;
|
||||
this.initDefaultSessionProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,8 +185,8 @@ export class Session {
|
|||
*
|
||||
* @returns A Promise that is resolved if the session has been closed successfully and rejected with an Error object if not
|
||||
*/
|
||||
public close(): Promise<any> {
|
||||
return new Promise<any>((resolve, reject) => {
|
||||
public close(): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
axios.delete(
|
||||
this.ov.host + OpenVidu.API_SESSIONS + '/' + this.sessionId,
|
||||
{
|
||||
|
@ -272,8 +268,8 @@ export class Session {
|
|||
*
|
||||
* @returns A Promise that is resolved if the Connection was successfully removed from the Session and rejected with an Error object if not
|
||||
*/
|
||||
public forceDisconnect(connection: string | Connection): Promise<any> {
|
||||
return new Promise<any>((resolve, reject) => {
|
||||
public forceDisconnect(connection: string | Connection): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const connectionId: string = typeof connection === 'string' ? connection : (<Connection>connection).connectionId;
|
||||
axios.delete(
|
||||
this.ov.host + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/connection/' + connectionId,
|
||||
|
@ -344,8 +340,8 @@ export class Session {
|
|||
*
|
||||
* @returns A Promise that is resolved if the stream was successfully unpublished and rejected with an Error object if not
|
||||
*/
|
||||
public forceUnpublish(publisher: string | Publisher): Promise<any> {
|
||||
return new Promise<any>((resolve, reject) => {
|
||||
public forceUnpublish(publisher: string | Publisher): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const streamId: string = typeof publisher === 'string' ? publisher : (<Publisher>publisher).streamId;
|
||||
axios.delete(
|
||||
this.ov.host + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/stream/' + streamId,
|
||||
|
@ -466,20 +462,11 @@ export class Session {
|
|||
resolve(this.sessionId);
|
||||
}
|
||||
|
||||
const mediaMode = !!this.properties.mediaMode ? this.properties.mediaMode : MediaMode.ROUTED;
|
||||
const recordingMode = !!this.properties.recordingMode ? this.properties.recordingMode : RecordingMode.MANUAL;
|
||||
const defaultOutputMode = !!this.properties.defaultOutputMode ? this.properties.defaultOutputMode : Recording.OutputMode.COMPOSED;
|
||||
const defaultRecordingLayout = !!this.properties.defaultRecordingLayout ? this.properties.defaultRecordingLayout : RecordingLayout.BEST_FIT;
|
||||
const defaultCustomLayout = !!this.properties.defaultCustomLayout ? this.properties.defaultCustomLayout : '';
|
||||
const customSessionId = !!this.properties.customSessionId ? this.properties.customSessionId : '';
|
||||
const mediaNode = !!this.properties.mediaNode ? this.properties.mediaNode : undefined;
|
||||
const forcedVideoCodec = !!this.properties.forcedVideoCodec ? this.properties.forcedVideoCodec : undefined;
|
||||
const allowTranscoding = this.properties.allowTranscoding != null ? this.properties.allowTranscoding : undefined;
|
||||
this.initDefaultSessionProperties();
|
||||
|
||||
const data = JSON.stringify({
|
||||
mediaMode, recordingMode, defaultOutputMode, defaultRecordingLayout, defaultCustomLayout,
|
||||
customSessionId, mediaNode, forcedVideoCodec, allowTranscoding
|
||||
});
|
||||
const data = JSON.stringify(
|
||||
this.properties
|
||||
);
|
||||
|
||||
axios.post(
|
||||
this.ov.host + OpenVidu.API_SESSIONS,
|
||||
|
@ -496,13 +483,11 @@ export class Session {
|
|||
// SUCCESS response from openvidu-server. Resolve token
|
||||
this.sessionId = res.data.id;
|
||||
this.createdAt = res.data.createdAt;
|
||||
this.properties.mediaMode = mediaMode;
|
||||
this.properties.recordingMode = recordingMode;
|
||||
this.properties.defaultOutputMode = defaultOutputMode;
|
||||
this.properties.defaultRecordingLayout = defaultRecordingLayout;
|
||||
this.properties.defaultCustomLayout = defaultCustomLayout;
|
||||
this.properties.customSessionId = customSessionId;
|
||||
this.properties.mediaNode = mediaNode;
|
||||
this.properties.mediaMode = res.data.mediaMode;
|
||||
this.properties.recordingMode = res.data.recordingMode;
|
||||
this.properties.defaultRecordingProperties = res.data.defaultRecordingProperties;
|
||||
this.properties.customSessionId = res.data.customSessionId;
|
||||
this.properties.mediaNode = res.data.mediaNode;
|
||||
this.properties.forcedVideoCodec = res.data.forcedVideoCodec;
|
||||
this.properties.allowTranscoding = res.data.allowTranscoding;
|
||||
resolve(this.sessionId);
|
||||
|
@ -546,21 +531,17 @@ export class Session {
|
|||
customSessionId: json.customSessionId,
|
||||
mediaMode: json.mediaMode,
|
||||
recordingMode: json.recordingMode,
|
||||
defaultOutputMode: json.defaultOutputMode,
|
||||
defaultRecordingLayout: json.defaultRecordingLayout,
|
||||
defaultCustomLayout: json.defaultCustomLayout,
|
||||
defaultRecordingProperties: json.defaultRecordingProperties,
|
||||
forcedVideoCodec: json.forcedVideoCodec,
|
||||
allowTranscoding: json.allowTranscoding
|
||||
};
|
||||
if (json.defaultRecordingLayout == null) {
|
||||
delete this.properties.defaultRecordingLayout;
|
||||
this.initDefaultSessionProperties();
|
||||
if (json.defaultRecordingProperties == null) {
|
||||
delete this.properties.defaultRecordingProperties;
|
||||
}
|
||||
if (json.customSessionId == null) {
|
||||
delete this.properties.customSessionId;
|
||||
}
|
||||
if (json.defaultCustomLayout == null) {
|
||||
delete this.properties.defaultCustomLayout;
|
||||
}
|
||||
if (json.mediaNode == null) {
|
||||
delete this.properties.mediaNode;
|
||||
}
|
||||
|
@ -668,4 +649,28 @@ export class Session {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hidden
|
||||
*/
|
||||
private initDefaultSessionProperties() {
|
||||
this.properties.mediaMode = !!this.properties.mediaMode ? this.properties.mediaMode : MediaMode.ROUTED;
|
||||
this.properties.recordingMode = !!this.properties.recordingMode ? this.properties.recordingMode : RecordingMode.MANUAL;
|
||||
this.properties.defaultRecordingProperties = {
|
||||
name: !!this.properties.defaultRecordingProperties?.name ? this.properties.defaultRecordingProperties?.name : '',
|
||||
outputMode: !!this.properties.defaultRecordingProperties?.outputMode ? this.properties.defaultRecordingProperties?.outputMode : Recording.OutputMode.COMPOSED,
|
||||
recordingLayout: !!this.properties.defaultRecordingProperties?.recordingLayout ? this.properties.defaultRecordingProperties?.recordingLayout : RecordingLayout.BEST_FIT,
|
||||
customLayout: !!this.properties.defaultRecordingProperties?.customLayout ? this.properties.defaultRecordingProperties?.customLayout : '',
|
||||
resolution: !!this.properties.defaultRecordingProperties?.resolution ? this.properties.defaultRecordingProperties?.resolution : '1280x720',
|
||||
frameRate: !!this.properties.defaultRecordingProperties?.frameRate ? this.properties.defaultRecordingProperties?.frameRate : 25,
|
||||
hasAudio: !!this.properties.defaultRecordingProperties?.hasAudio ? this.properties.defaultRecordingProperties?.hasAudio : true,
|
||||
hasVideo: !!this.properties.defaultRecordingProperties?.hasVideo ? this.properties.defaultRecordingProperties?.hasVideo : true,
|
||||
shmSize: !!this.properties.defaultRecordingProperties?.shmSize ? this.properties.defaultRecordingProperties?.shmSize : 536870912,
|
||||
mediaNode: this.properties.defaultRecordingProperties?.mediaNode
|
||||
};
|
||||
this.properties.customSessionId = !!this.properties.customSessionId ? this.properties.customSessionId : '';
|
||||
this.properties.mediaNode = !!this.properties.mediaNode ? this.properties.mediaNode : undefined;
|
||||
this.properties.forcedVideoCodec = !!this.properties.forcedVideoCodec ? this.properties.forcedVideoCodec : VideoCodec.VP8;
|
||||
this.properties.allowTranscoding = this.properties.allowTranscoding != null ? this.properties.allowTranscoding : false;
|
||||
}
|
||||
|
||||
}
|
|
@ -16,9 +16,9 @@
|
|||
*/
|
||||
|
||||
import { MediaMode } from './MediaMode';
|
||||
import { Recording } from './Recording';
|
||||
import { RecordingLayout } from './RecordingLayout';
|
||||
import { RecordingProperties } from './RecordingProperties';
|
||||
import { RecordingMode } from './RecordingMode';
|
||||
import { VideoCodec } from './VideoCodec';
|
||||
|
||||
/**
|
||||
* See [[OpenVidu.createSession]]
|
||||
|
@ -28,35 +28,25 @@ export interface SessionProperties {
|
|||
/**
|
||||
* How the media streams will be sent and received by your clients: routed through OpenVidu Media Node
|
||||
* (`MediaMode.ROUTED`) or attempting direct p2p connections (`MediaMode.RELAYED`, _not available yet_)
|
||||
*
|
||||
* Default to [[MediaMode.ROUTED]]
|
||||
*/
|
||||
mediaMode?: MediaMode;
|
||||
|
||||
/**
|
||||
* Whether the Session will be automatically recorded (`RecordingMode.ALWAYS`) or not (`RecordingMode.MANUAL`)
|
||||
*
|
||||
* Default to [[RecordingMode.MANUAL]]
|
||||
*/
|
||||
recordingMode?: RecordingMode;
|
||||
|
||||
/**
|
||||
* Default value used to initialize property [[RecordingProperties.outputMode]] of every recording of this session.
|
||||
*
|
||||
* You can easily override this value later by setting [[RecordingProperties.outputMode]] to any other value
|
||||
* Default recording properties of this session. You can easily override this value later when starting a
|
||||
* [[Recording]] by providing new [[RecordingProperties]]
|
||||
*
|
||||
* Default values defined in [[RecordingProperties]] class
|
||||
*/
|
||||
defaultOutputMode?: Recording.OutputMode;
|
||||
|
||||
/**
|
||||
* Default value used to initialize property [[RecordingProperties.recordingLayout]] of every recording of this session.
|
||||
*
|
||||
* You can easily override this value later by setting [[RecordingProperties.recordingLayout]] to any other value
|
||||
*/
|
||||
defaultRecordingLayout?: RecordingLayout;
|
||||
|
||||
/**
|
||||
* Default value used to initialize property [[RecordingProperties.customLayout]] of every recording of this session.
|
||||
* This property can only be defined if [[SessionProperties.defaultRecordingLayout]] is set to [[RecordingLayout.CUSTOM]].
|
||||
*
|
||||
* You can easily override this value later by setting [[RecordingProperties.customLayout]] to any other value
|
||||
*/
|
||||
defaultCustomLayout?: string;
|
||||
defaultRecordingProperties?: RecordingProperties;
|
||||
|
||||
/**
|
||||
* Fix the sessionId that will be assigned to the session with this parameter. You can take advantage of this property
|
||||
|
@ -79,16 +69,18 @@ export interface SessionProperties {
|
|||
/**
|
||||
* It defines which video codec do you want to be forcibly used for this session.
|
||||
* This allows browsers/clients to use the same codec avoiding transcoding in the media server.
|
||||
* If the browser/client is not compatible with the specified codec and [[allowTranscoding]]
|
||||
* is <code>false</code> and exception will occur.
|
||||
*
|
||||
* If forcedVideoCodec is set to NONE, no codec will be forced.
|
||||
* If the browser/client is not compatible with the specified codec and [[allowTranscoding]] is <code>false</code>
|
||||
* and exception will occur. If forcedVideoCodec is set to [[VideoCodec.NONE]], no codec will be forced.
|
||||
*
|
||||
* Default to [[VideoCodec.VP8]]
|
||||
*/
|
||||
forcedVideoCodec?: string;
|
||||
forcedVideoCodec?: VideoCodec;
|
||||
|
||||
/**
|
||||
* It defines if you want to allow transcoding in the media server or not
|
||||
* when [[forcedVideoCodec]] is not compatible with the browser/client.
|
||||
*
|
||||
* Default to false
|
||||
*/
|
||||
allowTranscoding?: boolean;
|
||||
|
||||
|
|
Loading…
Reference in New Issue