diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/OpenVidu.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/OpenVidu.java index 09cf7b3e..5b065b4a 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/OpenVidu.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/OpenVidu.java @@ -209,6 +209,7 @@ public class OpenVidu { || (Recording.OutputMode.COMPOSED_QUICK_START.equals(properties.outputMode()))) && properties.hasVideo()) { json.addProperty("resolution", properties.resolution()); + json.addProperty("frameRate", properties.frameRate()); json.addProperty("recordingLayout", (properties.recordingLayout() != null) ? properties.recordingLayout().name() : ""); if (RecordingLayout.CUSTOM.equals(properties.recordingLayout())) { diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 42d06120..b852142d 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -126,6 +126,7 @@ export class OpenVidu { * * @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`) + * @param properties Custom RecordingProperties to apply to this Recording. This will override the global default values set to the Session with [[SessionProperties.defaultRecordingProperties]] * * @returns A Promise that is resolved to the [[Recording]] if it successfully started (the recording can be stopped with guarantees) and rejected with an Error * object if not. This Error object has as `message` property with the following values: @@ -141,32 +142,28 @@ export class OpenVidu { let data; - if (!!param2) { - if (!(typeof param2 === 'string')) { - const properties = param2; - data = { - session: sessionId, - name: !!properties.name ? properties.name : '', - outputMode: properties.outputMode, - hasAudio: properties.hasAudio != null ? properties.hasAudio : null, - hasVideo: properties.hasVideo != null ? properties.hasVideo : null, - shmSize: properties.shmSize, - mediaNode: properties.mediaNode - }; - if ((data.hasVideo == null || data.hasVideo) && (data.outputMode == null || data.outputMode.toString() === Recording.OutputMode[Recording.OutputMode.COMPOSED] - || data.outputMode.toString() === Recording.OutputMode[Recording.OutputMode.COMPOSED_QUICK_START])) { - data.resolution = properties.resolution; - data.recordingLayout = !!properties.recordingLayout ? properties.recordingLayout : ''; - if (data.recordingLayout.toString() === RecordingLayout[RecordingLayout.CUSTOM]) { - data.customLayout = !!properties.customLayout ? properties.customLayout : ''; - } - } - data = JSON.stringify(data); - } else { + if (param2 != null) { + if (typeof param2 === 'string') { data = JSON.stringify({ session: sessionId, name: param2 }); + } else { + const properties: RecordingProperties = param2 as RecordingProperties; + data = { + session: sessionId, + name: properties.name, + outputMode: properties.outputMode, + recordingLayout: properties.recordingLayout, + customLayout: properties.customLayout, + resolution: properties.resolution, + frameRate: properties.frameRate, + hasAudio: properties.hasAudio, + hasVideo: properties.hasVideo, + shmSize: properties.shmSize, + mediaNode: properties.mediaNode + }; + data = JSON.stringify(data); } } else { data = JSON.stringify({ diff --git a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html index ddd9bf27..6dc24762 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html +++ b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html @@ -90,6 +90,12 @@ + + + diff --git a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts index d5890f95..537ae291 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts +++ b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts @@ -64,6 +64,7 @@ export class SessionApiDialogComponent { recordingLayout: this.recordingProperties.recordingLayout, customLayout: this.recordingProperties.customLayout, resolution: this.recordingProperties.resolution, + frameRate: this.recordingProperties.frameRate, hasAudio: this.recordingProperties.hasAudio, hasVideo: this.recordingProperties.hasVideo, shmSize: this.recordingProperties.shmSize, diff --git a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html index 997dda60..1ff389c8 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html +++ b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html @@ -26,8 +26,8 @@ - - + {{ enumerator }} @@ -35,7 +35,7 @@ + *ngIf="this.sessionProperties.defaultOutputMode === 'COMPOSED' && this.sessionProperties.defaultRecordingProperties.recordingLayout === 'CUSTOM'"> diff --git a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts index dc8b0d32..3ef475ce 100644 --- a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts +++ b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts @@ -29,7 +29,7 @@ import { SessionPropertiesDialogComponent } from '../dialogs/session-properties- import { SessionApiDialogComponent } from '../dialogs/session-api-dialog/session-api-dialog.component'; import { PublisherPropertiesDialogComponent } from '../dialogs/publisher-properties-dialog/publisher-properties-dialog.component'; import { SessionInfoDialogComponent } from "../dialogs/session-info-dialog/session-info-dialog.component"; -import {ShowCodecDialogComponent} from "../dialogs/show-codec-dialog/show-codec-dialog.component"; +import { ShowCodecDialogComponent } from "../dialogs/show-codec-dialog/show-codec-dialog.component"; export interface SessionConf { @@ -92,9 +92,11 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { sessionProperties: SessionPropertiesAPI = { mediaMode: MediaMode.ROUTED, recordingMode: RecordingMode.MANUAL, - defaultOutputMode: Recording.OutputMode.COMPOSED, - defaultRecordingLayout: RecordingLayout.BEST_FIT, - defaultCustomLayout: '', + defaultRecordingProperties: { + outputMode: Recording.OutputMode.COMPOSED, + recordingLayout: RecordingLayout.BEST_FIT, + customLayout: '' + }, customSessionId: '', forcedVideoCodec: null, allowTranscoding: null @@ -627,10 +629,11 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { recordingProperties: !!this.recordingProperties ? this.recordingProperties : { name: '', - outputMode: this.sessionProperties.defaultOutputMode, - recordingLayout: this.sessionProperties.defaultRecordingLayout, - customLayout: this.sessionProperties.defaultCustomLayout, + outputMode: this.sessionProperties.defaultRecordingProperties.outputMode, + recordingLayout: this.sessionProperties.defaultRecordingProperties.recordingLayout, + customLayout: this.sessionProperties.defaultRecordingProperties.customLayout, resolution: '1920x1080', + frameRate: 25, hasAudio: true, hasVideo: true, mediaNode: { diff --git a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.ts b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.ts index d68deb9d..edba0d2d 100644 --- a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.ts +++ b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.ts @@ -75,8 +75,10 @@ export class TestApirestComponent implements OnInit, OnDestroy { this.openviduRestService.getSessionId(this.openviduUrl, this.openviduSecret, { recordingMode: RecordingMode[this.selectedRecordingMode], - defaultRecordingLayout: RecordingLayout[this.selectedDefaultRecordingLayout], - defaultCustomLayout: this.customLayout, + defaultRecordingProperties: { + recordingLayout: RecordingLayout[this.selectedDefaultRecordingLayout], + customLayout: this.customLayout + }, mediaMode: MediaMode[this.selectedMediaMode], customSessionId: this.customSessionId })