From 390ce2224e3eaebc8dbcdf2ee4936580696dee9b Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 17 Apr 2018 15:05:44 +0200 Subject: [PATCH 01/60] CDR refactoring: now all operations are recorded in a low-level context (not in SessionEventsHandler). Added 'videoFramerate', 'reason' and recording events. New property openvidu.recording.notification. Recordings stopped upon openvidu-server stopped. --- .../client/internal/ProtocolElements.java | 15 +- .../java/io/openvidu/server/cdr/CDREvent.java | 26 +- .../openvidu/server/cdr/CallDetailRecord.java | 112 +++++---- .../server/config/OpenviduConfig.java | 34 ++- .../server/config/SecurityConfig.java | 2 +- .../io/openvidu/server/core/MediaOptions.java | 4 +- .../io/openvidu/server/core/Participant.java | 9 + .../java/io/openvidu/server/core/Session.java | 4 +- .../server/core/SessionEventsHandler.java | 224 ++++++++++++------ .../openvidu/server/core/SessionManager.java | 41 +++- .../kurento/core/KurentoMediaOptions.java | 4 +- .../kurento/core/KurentoParticipant.java | 46 +++- .../server/kurento/core/KurentoSession.java | 35 ++- .../kurento/core/KurentoSessionManager.java | 100 ++++---- .../recording/ComposedRecordingService.java | 25 +- .../server/rest/SessionRestController.java | 25 +- .../io/openvidu/server/rpc/RpcHandler.java | 17 +- ...itional-spring-configuration-metadata.json | 11 +- .../src/main/resources/application.properties | 3 +- 19 files changed, 487 insertions(+), 250 deletions(-) diff --git a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java index d56e6cf7..1df8060d 100644 --- a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java +++ b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java @@ -44,6 +44,7 @@ public class ProtocolElements { public static final String JOINROOM_PEERSTREAMAUDIOACTIVE_PARAM = "audioActive"; public static final String JOINROOM_PEERSTREAMVIDEOACTIVE_PARAM = "videoActive"; public static final String JOINROOM_PEERSTREAMTYPEOFVIDEO_PARAM = "typeOfVideo"; + public static final String JOINROOM_PEERSTREAMFRAMERATE_PARAM = "frameRate"; public static final String PUBLISHVIDEO_METHOD = "publishVideo"; public static final String PUBLISHVIDEO_SDPOFFER_PARAM = "sdpOffer"; @@ -52,6 +53,7 @@ public class ProtocolElements { public static final String PUBLISHVIDEO_AUDIOACTIVE_PARAM = "audioActive"; public static final String PUBLISHVIDEO_VIDEOACTIVE_PARAM = "videoActive"; public static final String PUBLISHVIDEO_TYPEOFVIDEO_PARAM = "typeOfVideo"; + public static final String PUBLISHVIDEO_FRAMERATE_PARAM = "frameRate"; public static final String UNPUBLISHVIDEO_METHOD = "unpublishVideo"; @@ -79,6 +81,7 @@ public class ProtocolElements { public static final String PARTICIPANTLEFT_METHOD = "participantLeft"; public static final String PARTICIPANTLEFT_NAME_PARAM = "name"; + public static final String PARTICIPANTLEFT_REASON_PARAM = "reason"; public static final String PARTICIPANTEVICTED_METHOD = "participantEvicted"; @@ -89,9 +92,11 @@ public class ProtocolElements { public static final String PARTICIPANTPUBLISHED_AUDIOACTIVE_PARAM = "audioActive"; public static final String PARTICIPANTPUBLISHED_VIDEOACTIVE_PARAM = "videoActive"; public static final String PARTICIPANTPUBLISHED_TYPEOFVIDEO_PARAM = "typeOfVideo"; - + public static final String PARTICIPANTPUBLISHED_FRAMERATE_PARAM = "frameRate"; + public static final String PARTICIPANTUNPUBLISHED_METHOD = "participantUnpublished"; public static final String PARTICIPANTUNPUBLISHED_NAME_PARAM = "name"; + public static final String PARTICIPANTUNPUBLISHED_REASON_PARAM = "reason"; public static final String PARTICIPANTSENDMESSAGE_METHOD = "sendMessage"; public static final String PARTICIPANTSENDMESSAGE_DATA_PARAM = "data"; @@ -109,8 +114,14 @@ public class ProtocolElements { public static final String ICECANDIDATE_CANDIDATE_PARAM = "candidate"; public static final String ICECANDIDATE_SDPMID_PARAM = "sdpMid"; public static final String ICECANDIDATE_SDPMLINEINDEX_PARAM = "sdpMLineIndex"; + + public static final String RECORDINGSTARTED_METHOD = "recordingStarted"; + public static final String RECORDINGSTARTED_ID_PARAM = "id"; + + public static final String RECORDINGSTOPPED_METHOD = "recordingStopped"; + public static final String RECORDINGSTOPPED_ID_PARAM = "id"; public static final String CUSTOM_NOTIFICATION = "custonNotification"; - public static final String RECORDER_PARTICIPANT_ID_PUBLICID = "RECORDER"; + public static final String RECORDER_PARTICIPANT_PUBLICID = "RECORDER"; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java index 6b6093e8..2613469d 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java @@ -13,18 +13,26 @@ public class CDREvent implements Comparable { static final String PARTICIPANT_LEFT = "participantLeft"; static final String CONNECTION_CREATED = "webrtcConnectionCreated"; static final String CONNECTION_DESTROYED = "webrtcConnectionDestroyed"; + static final String RECORDING_STARTED = "recordingStarted"; + static final String RECORDING_STOPPED = "recordingStopped"; protected String eventName; protected String sessionId; + protected Long timeStamp; + private Long startTime; + private Integer duration; private Participant participant; private MediaOptions mediaOptions; private String receivingFrom; - private Long startTime; - private Integer duration; - protected Long timeStamp; + private String reason; public CDREvent(String eventName, CDREvent event) { - this(eventName, event.participant, event.sessionId, event.mediaOptions, event.receivingFrom, event.startTime); + this(eventName, event.participant, event.sessionId, event.mediaOptions, event.receivingFrom, event.startTime, event.reason); + this.duration = (int) (this.timeStamp - this.startTime / 1000); + } + + public CDREvent(String eventName, CDREvent event, String reason) { + this(eventName, event.participant, event.sessionId, event.mediaOptions, event.receivingFrom, event.startTime, reason); this.duration = (int) (this.timeStamp - this.startTime / 1000); } @@ -46,12 +54,13 @@ public class CDREvent implements Comparable { } public CDREvent(String eventName, Participant participant, String sessionId, MediaOptions mediaOptions, - String receivingFrom, Long startTime) { + String receivingFrom, Long startTime, String reason) { this(eventName, sessionId); this.participant = participant; this.mediaOptions = mediaOptions; this.receivingFrom = receivingFrom; this.startTime = startTime; + this.reason = reason; } public MediaOptions getMediaOptions() { @@ -82,6 +91,7 @@ public class CDREvent implements Comparable { json.put("videoEnabled", this.mediaOptions.videoActive); if (this.mediaOptions.videoActive) { json.put("videoSource", this.mediaOptions.typeOfVideo); + json.put("videoFramerate", this.mediaOptions.frameRate); } if (this.receivingFrom != null) { json.put("receivingFrom", this.receivingFrom); @@ -92,11 +102,15 @@ public class CDREvent implements Comparable { json.put("endTime", this.timeStamp); json.put("duration", (this.timeStamp - this.startTime) / 1000); } + + if (this.reason != null) { + json.put("reason", this.reason); + } JSONObject root = new JSONObject(); root.put(this.eventName, json); - return root.toString(); + return root.toJSONString(); } @Override diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java index abf8d3b4..46abf5de 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java @@ -13,78 +13,101 @@ import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; /** - * CDR logger to register all information of each WebRTC connection: + * CDR logger to register all information of a Session. * Enabled by property 'openvidu.cdr=true' * - * - Participant unique identifier - * - Session unique identifier - * - Inbound or Outbound WebRTC connection - * - Sender unique identifier - * - Audio media stream enabled - * - Video media stream enabled - * - Video source [CAMERA, SCREEN] - * - Time of start of the call - * - Time of end of the call - * - Total time duration + * - 'sessionCreated': {sessionId, timestamp} + * - 'sessionDestroyed': {sessionId, timestamp, startTime, endTime, duration } + * - 'participantJoined': {sessionId, timestamp, participantId} + * - 'participantLeft': {sessionId, timestamp, participantId, startTime, endTime, duration, reason} + * - 'webrtcConnectionCreated' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate] } + * - 'webrtcConnectionDestroyed' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate], reason } + * - 'recordingStarted' {sessionId, timestamp} + * - 'recordingStopped' {sessionId, timestamp} + * + * PROPERTIES VALUES: + * + * - sessionId: string + * - timestamp: number + * - startTime: number + * - endTime: number + * - duration: number + * - participantId: string + * - connection: "INBOUND", "OUTBOUND" + * - receivingFrom: string + * - audioEnabled: boolean + * - videoEnabled: boolean + * - videoSource: "CAMERA", "SCREEN" + * - videoFramerate: number + * - webrtcConnectionDestroyed.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "openviduServerDestroyed" + * - participantLeft.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "openviduServerDestroyed" + * - sessionDestroyed.reason: "lastParticipantLeft", "openviduServerDestroyed" + * + * [OPTIONAL_PROPERTIES]: + * - receivingFrom: only if connection = "INBOUND" + * - videoSource: only if videoEnabled = true + * - videoFramerate: only if videoEnabled = true * * @author Pablo Fuente (pablofuenteperez@gmail.com) */ public class CallDetailRecord { private Logger log = LoggerFactory.getLogger(CallDetailRecord.class); - + private Map sessions = new ConcurrentHashMap<>(); private Map participants = new ConcurrentHashMap<>(); private Map publications = new ConcurrentHashMap<>(); private Map> subscriptions = new ConcurrentHashMap<>(); - + public void recordSessionCreated(String sessionId) { CDREvent e = new CDREvent(CDREvent.SESSION_CREATED, sessionId); this.sessions.put(sessionId, e); log.info("{}", e); } - - public void recordSessionDestroyed(String sessionId) { + + public void recordSessionDestroyed(String sessionId, String reason) { CDREvent e = this.sessions.remove(sessionId); - log.info("{}", new CDREvent(CDREvent.SESSION_DESTROYED, e)); + log.info("{}", new CDREvent(CDREvent.SESSION_DESTROYED, e, reason)); } - + public void recordParticipantJoined(Participant participant, String sessionId) { CDREvent e = new CDREvent(CDREvent.PARTICIPANT_JOINED, participant, sessionId); this.participants.put(participant.getParticipantPublicId(), e); log.info("{}", e); } - - public void recordParticipantLeft(Participant participant, String sessionId) { + + public void recordParticipantLeft(Participant participant, String sessionId, String reason) { CDREvent e = this.participants.remove(participant.getParticipantPublicId()); - log.info("{}", new CDREvent(CDREvent.PARTICIPANT_LEFT, e)); + log.info("{}", new CDREvent(CDREvent.PARTICIPANT_LEFT, e, reason)); } - + public void recordNewPublisher(Participant participant, String sessionId, MediaOptions mediaOptions) { - CDREvent publisher = new CDREvent(CDREvent.CONNECTION_CREATED, participant, sessionId, mediaOptions, null, System.currentTimeMillis()); + CDREvent publisher = new CDREvent(CDREvent.CONNECTION_CREATED, participant, sessionId, mediaOptions, null, + System.currentTimeMillis(), null); this.publications.put(participant.getParticipantPublicId(), publisher); log.info("{}", publisher); } - public void recordNewSubscriber(Participant participant, String sessionId, String senderPublicId) { - CDREvent publisher = this.publications.get(senderPublicId); - CDREvent subscriber = new CDREvent(CDREvent.CONNECTION_CREATED, participant, sessionId, publisher.getMediaOptions(), publisher.getParticipantPublicId(), System.currentTimeMillis()); - this.subscriptions.putIfAbsent(participant.getParticipantPublicId(), new ConcurrentSkipListSet<>()); - this.subscriptions.get(participant.getParticipantPublicId()).add(subscriber); - log.info("{}", subscriber); - } - - public boolean stopPublisher(String participantPublicId) { + public boolean stopPublisher(String participantPublicId, String reason) { CDREvent publisher = this.publications.remove(participantPublicId); if (publisher != null) { - publisher = new CDREvent(CDREvent.CONNECTION_DESTROYED, publisher); + publisher = new CDREvent(CDREvent.CONNECTION_DESTROYED, publisher, reason); log.info("{}", publisher); return true; } return false; } - public boolean stopSubscriber(String participantPublicId, String senderPublicId) { + public void recordNewSubscriber(Participant participant, String sessionId, String senderPublicId) { + CDREvent publisher = this.publications.get(senderPublicId); + CDREvent subscriber = new CDREvent(CDREvent.CONNECTION_CREATED, participant, sessionId, + publisher.getMediaOptions(), publisher.getParticipantPublicId(), System.currentTimeMillis(), null); + this.subscriptions.putIfAbsent(participant.getParticipantPublicId(), new ConcurrentSkipListSet<>()); + this.subscriptions.get(participant.getParticipantPublicId()).add(subscriber); + log.info("{}", subscriber); + } + + public boolean stopSubscriber(String participantPublicId, String senderPublicId, String reason) { Set participantSubscriptions = this.subscriptions.get(participantPublicId); if (participantSubscriptions != null) { CDREvent subscription; @@ -92,7 +115,7 @@ public class CallDetailRecord { subscription = it.next(); if (subscription.getReceivingFrom().equals(senderPublicId)) { it.remove(); - subscription = new CDREvent(CDREvent.CONNECTION_DESTROYED, subscription); + subscription = new CDREvent(CDREvent.CONNECTION_DESTROYED, subscription, reason); log.info("{}", subscription); return true; } @@ -101,17 +124,14 @@ public class CallDetailRecord { return false; } - public void stopAllSubscriptions(String participantPublicId) { - Set participantSubscriptions = this.subscriptions.get(participantPublicId); - if (participantSubscriptions != null) { - CDREvent subscription; - for (Iterator it = participantSubscriptions.iterator(); it.hasNext();) { - subscription = it.next(); - subscription = new CDREvent(CDREvent.CONNECTION_DESTROYED, subscription); - log.info("{}", subscription); - } - this.subscriptions.remove(participantPublicId).clear(); - } + public void recordRecordingStarted(String sessionId) { + CDREvent recording = new CDREvent(CDREvent.RECORDING_STARTED, sessionId); + log.info("{}", recording); } - + + public void recordRecordingStopped(String sessionId) { + CDREvent recording = new CDREvent(CDREvent.RECORDING_STOPPED, sessionId); + log.info("{}", recording); + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java index 96285843..82299eb5 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java @@ -3,6 +3,8 @@ package io.openvidu.server.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import io.openvidu.server.core.ParticipantRole; + @Component public class OpenviduConfig { @@ -24,12 +26,15 @@ public class OpenviduConfig { @Value("${openvidu.recording.path}") private String openviduRecordingPath; - @Value("${openvidu.recording.free-access}") - boolean openviduRecordingFreeAccess; + @Value("${openvidu.recording.public-access}") + boolean openviduRecordingPublicAccess; + + @Value("${openvidu.recording.notification}") + String openviduRecordingNotification; @Value("${openvidu.recording.version}") String openviduRecordingVersion; - + @Value("#{'${spring.profiles.active:}'.length() > 0 ? '${spring.profiles.active:}'.split(',') : \"default\"}") private String springProfile; @@ -63,8 +68,8 @@ public class OpenviduConfig { return this.openviduRecordingPath; } - public boolean getOpenViduRecordingFreeAccess() { - return this.openviduRecordingFreeAccess; + public boolean getOpenViduRecordingPublicAccess() { + return this.openviduRecordingPublicAccess; } public void setOpenViduRecordingPath(String recordingPath) { @@ -87,4 +92,23 @@ public class OpenviduConfig { return springProfile; } + public ParticipantRole[] getRolesFromRecordingNotification() { + ParticipantRole[] roles; + switch (this.openviduRecordingNotification) { + case "none": + roles = new ParticipantRole[0]; + break; + case "publisher_moderator": + roles = new ParticipantRole[] { ParticipantRole.PUBLISHER, ParticipantRole.MODERATOR }; + break; + case "all": + roles = new ParticipantRole[] { ParticipantRole.SUBSCRIBER, ParticipantRole.PUBLISHER, + ParticipantRole.MODERATOR }; + break; + default: + roles = new ParticipantRole[] { ParticipantRole.PUBLISHER, ParticipantRole.MODERATOR }; + } + return roles; + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java index ac1b3f6d..5b8fbe6d 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java @@ -29,7 +29,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers(HttpMethod.GET, "/config/**").authenticated() .antMatchers("/").authenticated(); - if (openviduConf.getOpenViduRecordingFreeAccess()) { + if (openviduConf.getOpenViduRecordingPublicAccess()) { conf = conf.antMatchers("/recordings/*").permitAll(); } else { conf = conf.antMatchers("/recordings/*").authenticated(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/MediaOptions.java b/openvidu-server/src/main/java/io/openvidu/server/core/MediaOptions.java index ef1d9a1b..b488c8e7 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/MediaOptions.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/MediaOptions.java @@ -5,11 +5,13 @@ public class MediaOptions { public boolean audioActive; public boolean videoActive; public String typeOfVideo; + public int frameRate; - public MediaOptions(boolean audioActive, boolean videoActive, String typeOfVideo) { + public MediaOptions(boolean audioActive, boolean videoActive, String typeOfVideo, int frameRate) { this.audioActive = audioActive; this.videoActive = videoActive; this.typeOfVideo = typeOfVideo; + this.frameRate = frameRate; } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java index 91b445f6..c77ff5ad 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java @@ -11,6 +11,7 @@ public class Participant { protected boolean audioActive = true; protected boolean videoActive = true; protected String typeOfVideo; // CAMERA, SCREEN + protected int frameRate; protected boolean streaming = false; protected volatile boolean closed; @@ -101,6 +102,14 @@ public class Participant { public void setTypeOfVideo(String typeOfVideo) { this.typeOfVideo = typeOfVideo; } + + public int getFrameRate() { + return this.frameRate; + } + + public void setFrameRate(int frameRate) { + this.frameRate = frameRate; + } public String getFullMetadata() { String fullMetadata; diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java index 204784bd..51642969 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java @@ -12,9 +12,9 @@ public interface Session { void join(Participant participant); - void leave(String participantPrivateId); + void leave(String participantPrivateId, String reason); - boolean close(); + boolean close(String reason); boolean isClosed(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index 123226d4..02bfc99a 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -1,10 +1,15 @@ package io.openvidu.server.core; import java.util.HashSet; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.google.gson.JsonArray; @@ -17,10 +22,13 @@ import io.openvidu.client.internal.ProtocolElements; import io.openvidu.server.cdr.CallDetailRecord; import io.openvidu.server.config.InfoHandler; import io.openvidu.server.config.OpenviduConfig; +import io.openvidu.server.recording.Recording; import io.openvidu.server.rpc.RpcNotificationService; public class SessionEventsHandler { + private static final Logger log = LoggerFactory.getLogger(SessionEventsHandler.class); + @Autowired protected RpcNotificationService rpcNotificationService; @@ -29,24 +37,28 @@ public class SessionEventsHandler { @Autowired protected CallDetailRecord CDR; - + @Autowired protected OpenviduConfig openviduConfig; - + + Map recordingsStarted = new ConcurrentHashMap<>(); + + ReentrantLock lock = new ReentrantLock(); + public void onSessionCreated(String sessionId) { if (openviduConfig.isCdrEnabled()) { CDR.recordSessionCreated(sessionId); } } - public void onSessionClosed(String sessionId) { + public void onSessionClosed(String sessionId, String reason) { if (openviduConfig.isCdrEnabled()) { - CDR.recordSessionDestroyed(sessionId); + CDR.recordSessionDestroyed(sessionId, reason); } } - public void onParticipantJoined(Participant participant, String sessionId, - Set existingParticipants, Integer transactionId, OpenViduException error) { + public void onParticipantJoined(Participant participant, String sessionId, Set existingParticipants, + Integer transactionId, OpenViduException error) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; @@ -54,80 +66,92 @@ public class SessionEventsHandler { JsonObject result = new JsonObject(); JsonArray resultArray = new JsonArray(); - for (Participant p : existingParticipants) { + + for (Participant existingParticipant : existingParticipants) { JsonObject participantJson = new JsonObject(); - participantJson.addProperty(ProtocolElements.JOINROOM_PEERID_PARAM, p.getParticipantPublicId()); + participantJson.addProperty(ProtocolElements.JOINROOM_PEERID_PARAM, + existingParticipant.getParticipantPublicId()); // Metadata associated to each existing participant - participantJson.addProperty(ProtocolElements.JOINROOM_METADATA_PARAM, p.getFullMetadata()); + participantJson.addProperty(ProtocolElements.JOINROOM_METADATA_PARAM, + existingParticipant.getFullMetadata()); - if (p.isStreaming()) { + if (existingParticipant.isStreaming()) { String streamId = ""; - if ("SCREEN".equals(p.getTypeOfVideo())) { + if ("SCREEN".equals(existingParticipant.getTypeOfVideo())) { streamId = "SCREEN"; - } else if (p.isVideoActive()) { + } else if (existingParticipant.isVideoActive()) { streamId = "CAMERA"; - } else if (p.isAudioActive()) { + } else if (existingParticipant.isAudioActive()) { streamId = "MICRO"; } JsonObject stream = new JsonObject(); stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMID_PARAM, - p.getParticipantPublicId() + "_" + streamId); - stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMAUDIOACTIVE_PARAM, p.isAudioActive()); - stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMVIDEOACTIVE_PARAM, p.isVideoActive()); - stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMTYPEOFVIDEO_PARAM, p.getTypeOfVideo()); + existingParticipant.getParticipantPublicId() + "_" + streamId); + stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMAUDIOACTIVE_PARAM, + existingParticipant.isAudioActive()); + stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMVIDEOACTIVE_PARAM, + existingParticipant.isVideoActive()); + stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMTYPEOFVIDEO_PARAM, + existingParticipant.getTypeOfVideo()); + stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMFRAMERATE_PARAM, + existingParticipant.getFrameRate()); JsonArray streamsArray = new JsonArray(); streamsArray.add(stream); participantJson.add(ProtocolElements.JOINROOM_PEERSTREAMS_PARAM, streamsArray); } - resultArray.add(participantJson); - JsonObject notifParams = new JsonObject(); + // Avoid emitting 'connectionCreated' event of existing RECORDER participant in + // openvidu-browser in newly joined participants + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(existingParticipant.getParticipantPublicId())) { + resultArray.add(participantJson); + } - // Metadata associated to new participant - notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_USER_PARAM, - participant.getParticipantPublicId()); - notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_METADATA_PARAM, participant.getFullMetadata()); + // If RECORDER participant has joined do NOT send 'participantJoined' + // notification to existing participants. 'recordingStarted' will be sent to all + // existing participants when recorder first subscribe to a stream + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(participant.getParticipantPublicId())) { + JsonObject notifParams = new JsonObject(); - rpcNotificationService.sendNotification(p.getParticipantPrivateId(), - ProtocolElements.PARTICIPANTJOINED_METHOD, notifParams); + // Metadata associated to new participant + notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_USER_PARAM, + participant.getParticipantPublicId()); + notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_METADATA_PARAM, + participant.getFullMetadata()); + + rpcNotificationService.sendNotification(existingParticipant.getParticipantPrivateId(), + ProtocolElements.PARTICIPANTJOINED_METHOD, notifParams); + } } result.addProperty(ProtocolElements.PARTICIPANTJOINED_USER_PARAM, participant.getParticipantPublicId()); result.addProperty(ProtocolElements.PARTICIPANTJOINED_METADATA_PARAM, participant.getFullMetadata()); result.add("value", resultArray); rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, result); - - if (openviduConfig.isCdrEnabled()) { - CDR.recordParticipantJoined(participant, sessionId); - } } - public void onParticipantLeft(Participant participant, String sessionId, - Set remainingParticipants, Integer transactionId, OpenViduException error) { + public void onParticipantLeft(Participant participant, String sessionId, Set remainingParticipants, + Integer transactionId, OpenViduException error, String reason) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; } - - boolean isPublishing = false; - if (openviduConfig.isCdrEnabled()) { - isPublishing = CDR.stopPublisher(participant.getParticipantPublicId()); - CDR.stopAllSubscriptions(participant.getParticipantPublicId()); + + if (ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(participant.getParticipantPublicId())) { + // RECORDER participant + return; } JsonObject params = new JsonObject(); params.addProperty(ProtocolElements.PARTICIPANTLEFT_NAME_PARAM, participant.getParticipantPublicId()); + params.addProperty(ProtocolElements.PARTICIPANTLEFT_REASON_PARAM, reason); + for (Participant p : remainingParticipants) { rpcNotificationService.sendNotification(p.getParticipantPrivateId(), ProtocolElements.PARTICIPANTLEFT_METHOD, params); - - if (isPublishing && openviduConfig.isCdrEnabled()) { - CDR.stopSubscriber(p.getParticipantPublicId(), participant.getParticipantPublicId()); - } } if (transactionId != null) { @@ -135,16 +159,10 @@ public class SessionEventsHandler { // leaving the session rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, new JsonObject()); } - rpcNotificationService.closeRpcSession(participant.getParticipantPrivateId()); - - if (openviduConfig.isCdrEnabled()) { - CDR.recordParticipantLeft(participant, sessionId); - } - } - public void onPublishMedia(Participant participant, String sessionId, MediaOptions mediaOptions, - String sdpAnswer, Set participants, Integer transactionId, OpenViduException error) { + public void onPublishMedia(Participant participant, String sessionId, MediaOptions mediaOptions, String sdpAnswer, + Set participants, Integer transactionId, OpenViduException error) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; @@ -171,6 +189,7 @@ public class SessionEventsHandler { stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_AUDIOACTIVE_PARAM, mediaOptions.audioActive); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_VIDEOACTIVE_PARAM, mediaOptions.videoActive); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_TYPEOFVIDEO_PARAM, mediaOptions.typeOfVideo); + stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_FRAMERATE_PARAM, mediaOptions.frameRate); JsonArray streamsArray = new JsonArray(); streamsArray.add(stream); @@ -184,26 +203,19 @@ public class SessionEventsHandler { ProtocolElements.PARTICIPANTPUBLISHED_METHOD, params); } } - - if (openviduConfig.isCdrEnabled()) { - CDR.recordNewPublisher(participant, sessionId, mediaOptions); - } } public void onUnpublishMedia(Participant participant, Set participants, Integer transactionId, - OpenViduException error) { + OpenViduException error, String reason) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; } rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, new JsonObject()); - - if (openviduConfig.isCdrEnabled()) { - CDR.stopPublisher(participant.getParticipantPublicId()); - } JsonObject params = new JsonObject(); params.addProperty(ProtocolElements.PARTICIPANTUNPUBLISHED_NAME_PARAM, participant.getParticipantPublicId()); + params.addProperty(ProtocolElements.PARTICIPANTUNPUBLISHED_REASON_PARAM, reason); for (Participant p : participants) { if (p.getParticipantPrivateId().equals(participant.getParticipantPrivateId())) { @@ -211,15 +223,12 @@ public class SessionEventsHandler { } else { rpcNotificationService.sendNotification(p.getParticipantPrivateId(), ProtocolElements.PARTICIPANTUNPUBLISHED_METHOD, params); - if (openviduConfig.isCdrEnabled()) { - CDR.stopSubscriber(p.getParticipantPublicId(), participant.getParticipantPublicId()); - } } } } - public void onSubscribe(Participant participant, String sessionId, String senderName, String sdpAnswer, Integer transactionId, - OpenViduException error) { + public void onSubscribe(Participant participant, Session session, String senderName, String sdpAnswer, + Integer transactionId, OpenViduException error) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; @@ -228,21 +237,27 @@ public class SessionEventsHandler { result.addProperty(ProtocolElements.RECEIVEVIDEO_SDPANSWER_PARAM, sdpAnswer); rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, result); - if (openviduConfig.isCdrEnabled()) { - CDR.recordNewSubscriber(participant, sessionId, senderName); + if (ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(participant.getParticipantPublicId())) { + lock.lock(); + try { + Recording recording = this.recordingsStarted.remove(session.getSessionId()); + if (recording != null) { + // RECORDER participant is now receiving video from the first publisher + this.sendRecordingStartedNotification(session, recording); + } + } finally { + lock.unlock(); + } } } - public void onUnsubscribe(Participant participant, String senderName, Integer transactionId, OpenViduException error) { + public void onUnsubscribe(Participant participant, String senderName, Integer transactionId, + OpenViduException error) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; } rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, new JsonObject()); - - if (openviduConfig.isCdrEnabled()) { - CDR.stopSubscriber(participant.getParticipantPublicId(), senderName); - } } public void onSendMessage(Participant participant, JsonObject message, Set participants, @@ -308,7 +323,78 @@ public class SessionEventsHandler { ProtocolElements.PARTICIPANTEVICTED_METHOD, new JsonObject()); } + public void sendRecordingStartedNotification(Session session, Recording recording) { + + if (openviduConfig.isCdrEnabled()) { + CDR.recordRecordingStarted(session.getSessionId()); + } + + // Filter participants by roles according to "openvidu.recording.notification" + Set filteredParticipants = this.filterParticipantsByRole( + this.openviduConfig.getRolesFromRecordingNotification(), session.getParticipants()); + + JsonObject params = new JsonObject(); + params.addProperty(ProtocolElements.RECORDINGSTARTED_ID_PARAM, recording.getId()); + + for (Participant p : filteredParticipants) { + rpcNotificationService.sendNotification(p.getParticipantPrivateId(), + ProtocolElements.RECORDINGSTARTED_METHOD, params); + } + } + + public void sendRecordingStoppedNotification(Session session, Recording recording) { + + if (openviduConfig.isCdrEnabled()) { + CDR.recordRecordingStopped(session.getSessionId()); + } + + // Be sure to clean this map (this should return null) + this.recordingsStarted.remove(session.getSessionId()); + + // Filter participants by roles according to "openvidu.recording.notification" + Set existingParticipants; + try { + existingParticipants = session.getParticipants(); + } catch (OpenViduException exception) { + // Session is already closed. This happens when ArchiveMode.ALWAYS and last + // participant has left the session. No notification needs to be sent + log.warn("Session already closed when trying to send 'recordingStopped' notification"); + return; + } + Set filteredParticipants = this.filterParticipantsByRole( + this.openviduConfig.getRolesFromRecordingNotification(), existingParticipants); + + JsonObject params = new JsonObject(); + params.addProperty(ProtocolElements.RECORDINGSTOPPED_ID_PARAM, recording.getId()); + + for (Participant p : filteredParticipants) { + rpcNotificationService.sendNotification(p.getParticipantPrivateId(), + ProtocolElements.RECORDINGSTOPPED_METHOD, params); + } + } + + public void closeRpcSession(String participantPrivateId) { + this.rpcNotificationService.closeRpcSession(participantPrivateId); + } + + public void setRecordingStarted(String sessionId, Recording recording) { + this.recordingsStarted.put(sessionId, recording); + } + public InfoHandler getInfoHandler() { return this.infoHandler; } + + private Set filterParticipantsByRole(ParticipantRole[] roles, Set participants) { + return participants.stream().filter(part -> { + boolean isRole = false; + for (ParticipantRole role : roles) { + isRole = role.equals(part.getToken().getRole()); + if (isRole) + break; + } + return isRole; + }).collect(Collectors.toSet()); + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 5d0e23b9..03d30689 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -12,6 +12,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.kurento.jsonrpc.message.Request; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import com.google.gson.JsonObject; @@ -20,10 +21,25 @@ import io.openvidu.client.OpenViduException.Code; import io.openvidu.client.internal.ProtocolElements; import io.openvidu.java.client.SessionProperties; import io.openvidu.server.OpenViduServer; +import io.openvidu.server.cdr.CallDetailRecord; +import io.openvidu.server.config.OpenviduConfig; +import io.openvidu.server.recording.ComposedRecordingService; public abstract class SessionManager { private static final Logger log = LoggerFactory.getLogger(SessionManager.class); + + @Autowired + protected SessionEventsHandler sessionEventsHandler; + + @Autowired + protected ComposedRecordingService recordingService; + + @Autowired + protected CallDetailRecord CDR; + + @Autowired + protected OpenviduConfig openviduConfig; protected ConcurrentMap sessions = new ConcurrentHashMap<>(); protected ConcurrentMap sessionProperties = new ConcurrentHashMap<>(); @@ -35,11 +51,11 @@ public abstract class SessionManager { public abstract void joinRoom(Participant participant, String sessionId, Integer transactionId); - public abstract void leaveRoom(Participant participant, Integer transactionId); + public abstract void leaveRoom(Participant participant, Integer transactionId, String reason); public abstract void publishVideo(Participant participant, MediaOptions mediaOptions, Integer transactionId); - public abstract void unpublishVideo(Participant participant, Integer transactionId); + public abstract void unpublishVideo(Participant participant, Integer transactionId, String reason); public abstract void subscribe(Participant participant, String senderName, String sdpOffer, Integer transactionId); @@ -57,7 +73,7 @@ public abstract class SessionManager { * other participants about the one that's just been evicted. * */ - public void evictParticipant(String participantPrivateId) throws OpenViduException { + public void evictParticipant(String participantPrivateId, String reason) throws OpenViduException { } /** @@ -187,7 +203,7 @@ public abstract class SessionManager { } else { this.sessionidParticipantpublicidParticipant.putIfAbsent(sessionId, new ConcurrentHashMap<>()); this.sessionidTokenTokenobj.putIfAbsent(sessionId, new ConcurrentHashMap<>()); - this.sessionidTokenTokenobj.get(sessionId).putIfAbsent(token, new Token(token)); + this.sessionidTokenTokenobj.get(sessionId).putIfAbsent(token, new Token(token, ParticipantRole.PUBLISHER, "")); return true; } } @@ -252,7 +268,7 @@ public abstract class SessionManager { public Participant newRecorderParticipant(String sessionId, String participantPrivatetId, Token token, String clientMetadata) { if (this.sessionidParticipantpublicidParticipant.get(sessionId) != null) { - String participantPublicId = ProtocolElements.RECORDER_PARTICIPANT_ID_PUBLICID; + String participantPublicId = ProtocolElements.RECORDER_PARTICIPANT_PUBLICID; Participant p = new Participant(participantPrivatetId, participantPublicId, token, clientMetadata); this.sessionidParticipantpublicidParticipant.get(sessionId).put(participantPublicId, p); return p; @@ -305,7 +321,7 @@ public abstract class SessionManager { log.info("Closing all sessions"); for (String sessionId : sessions.keySet()) { try { - closeSession(sessionId); + closeSession(sessionId, "openviduServerDestroyed"); } catch (Exception e) { log.warn("Error closing session '{}'", sessionId, e); } @@ -328,7 +344,7 @@ public abstract class SessionManager { * @throws OpenViduException * in case the session doesn't exist or has been already closed */ - private Set closeSession(String sessionId) { + private Set closeSession(String sessionId, String reason) { Session session = sessions.get(sessionId); if (session == null) { throw new OpenViduException(Code.ROOM_NOT_FOUND_ERROR_CODE, "Session '" + sessionId + "' not found"); @@ -341,12 +357,14 @@ public abstract class SessionManager { Set pids = participants.stream().map(Participant::getParticipantPrivateId).collect(Collectors.toSet()); for (String pid : pids) { try { - session.leave(pid); + session.leave(pid, reason); } catch (OpenViduException e) { log.warn("Error evicting participant with id '{}' from session '{}'", pid, sessionId, e); } } - session.close(); + if (session.close(reason)) { + sessionEventsHandler.onSessionClosed(sessionId, reason); + } sessions.remove(sessionId); sessionProperties.remove(sessionId); @@ -354,6 +372,11 @@ public abstract class SessionManager { sessionidTokenTokenobj.remove(sessionId); log.warn("Session '{}' removed and closed", sessionId); + + if (recordingService.sessionIsBeingRecorded(session.getSessionId())) { + recordingService.stopRecording(session); + } + return participants; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoMediaOptions.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoMediaOptions.java index e8b8b19b..ecfd7bf3 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoMediaOptions.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoMediaOptions.java @@ -16,8 +16,8 @@ public class KurentoMediaOptions extends MediaOptions { public KurentoMediaOptions(boolean isOffer, String sdpOffer, MediaElement loopbackAlternativeSrc, MediaType loopbackConnectionType, boolean audioActive, boolean videoActive, String typeOfVideo, - boolean doLoopback, MediaElement... mediaElements) { - super(audioActive, videoActive, typeOfVideo); + int frameRate, boolean doLoopback, MediaElement... mediaElements) { + super(audioActive, videoActive, typeOfVideo, frameRate); this.isOffer = isOffer; this.sdpOffer = sdpOffer; this.loopbackAlternativeSrc = loopbackAlternativeSrc; diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoParticipant.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoParticipant.java index 4b73d083..8b5f8347 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoParticipant.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoParticipant.java @@ -21,7 +21,10 @@ import org.slf4j.LoggerFactory; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; +import io.openvidu.client.internal.ProtocolElements; +import io.openvidu.server.cdr.CallDetailRecord; import io.openvidu.server.config.InfoHandler; +import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; import io.openvidu.server.kurento.MutedMediaType; import io.openvidu.server.kurento.endpoint.MediaEndpoint; @@ -34,6 +37,7 @@ public class KurentoParticipant extends Participant { private static final Logger log = LoggerFactory.getLogger(KurentoParticipant.class); private InfoHandler infoHandler; + private CallDetailRecord CDR; private boolean webParticipant = true; @@ -46,7 +50,7 @@ public class KurentoParticipant extends Participant { private final ConcurrentMap filters = new ConcurrentHashMap<>(); private final ConcurrentMap subscribers = new ConcurrentHashMap(); - public KurentoParticipant(Participant participant, KurentoSession kurentoSession, MediaPipeline pipeline, InfoHandler infoHandler) { + public KurentoParticipant(Participant participant, KurentoSession kurentoSession, MediaPipeline pipeline, InfoHandler infoHandler, CallDetailRecord CDR) { super(participant.getParticipantPrivateId(), participant.getParticipantPublicId(), participant.getToken(), participant.getClientMetadata()); this.session = kurentoSession; @@ -60,9 +64,10 @@ public class KurentoParticipant extends Participant { } } this.infoHandler = infoHandler; + this.CDR = CDR; } - public void createPublishingEndpoint() { + public void createPublishingEndpoint(MediaOptions mediaOptions) { publisher.createEndpoint(endPointLatch); if (getPublisher().getEndpoint() == null) { throw new OpenViduException(Code.MEDIA_ENDPOINT_ERROR_CODE, "Unable to create publisher endpoint"); @@ -70,6 +75,10 @@ public class KurentoParticipant extends Participant { this.publisher.getEndpoint().addTag("name", "PUBLISHER " + this.getParticipantPublicId()); addEndpointListeners(this.publisher); + + + CDR.recordNewPublisher(this, this.session.getSessionId(), mediaOptions); + } public void shapePublisherMedia(MediaElement element, MediaType type) { @@ -194,10 +203,10 @@ public class KurentoParticipant extends Participant { return sdpResponse; } - public void unpublishMedia() { + public void unpublishMedia(String reason) { log.info("PARTICIPANT {}: unpublishing media stream from room {}", this.getParticipantPublicId(), this.session.getSessionId()); - releasePublisherEndpoint(); + releasePublisherEndpoint(reason); this.publisher = new PublisherEndpoint(webParticipant, this, this.getParticipantPublicId(), pipeline); log.info( @@ -269,6 +278,11 @@ public class KurentoParticipant extends Participant { log.trace("PARTICIPANT {}: Subscribing SdpAnswer is {}", this.getParticipantPublicId(), sdpAnswer); log.info("PARTICIPANT {}: Is now receiving video from {} in room {}", this.getParticipantPublicId(), senderName, this.session.getSessionId()); + + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(this.getParticipantPublicId())) { + CDR.recordNewSubscriber(this, this.session.getSessionId(), sender.getParticipantPublicId()); + } + return sdpAnswer; } catch (KurentoServerException e) { // TODO Check object status when KurentoClient sets this info in the object @@ -279,19 +293,19 @@ public class KurentoParticipant extends Participant { log.error("Exception connecting subscriber endpoint " + "to publisher endpoint", e); } this.subscribers.remove(senderName); - releaseSubscriberEndpoint(senderName, subscriber); + releaseSubscriberEndpoint(senderName, subscriber, ""); } return null; } - public void cancelReceivingMedia(String senderName) { + public void cancelReceivingMedia(String senderName, String reason) { log.info("PARTICIPANT {}: cancel receiving media from {}", this.getParticipantPublicId(), senderName); SubscriberEndpoint subscriberEndpoint = subscribers.remove(senderName); if (subscriberEndpoint == null || subscriberEndpoint.getEndpoint() == null) { log.warn("PARTICIPANT {}: Trying to cancel receiving video from user {}. " + "But there is no such subscriber endpoint.", this.getParticipantPublicId(), senderName); } else { - releaseSubscriberEndpoint(senderName, subscriberEndpoint); + releaseSubscriberEndpoint(senderName, subscriberEndpoint, reason); log.info("PARTICIPANT {}: stopped receiving media from {} in room {}", this.getParticipantPublicId(), senderName, this.session.getSessionId()); } @@ -347,7 +361,7 @@ public class KurentoParticipant extends Participant { } } - public void close() { + public void close(String reason) { log.debug("PARTICIPANT {}: Closing user", this.getParticipantPublicId()); if (isClosed()) { log.warn("PARTICIPANT {}: Already closed", this.getParticipantPublicId()); @@ -357,7 +371,7 @@ public class KurentoParticipant extends Participant { for (String remoteParticipantName : subscribers.keySet()) { SubscriberEndpoint subscriber = this.subscribers.get(remoteParticipantName); if (subscriber != null && subscriber.getEndpoint() != null) { - releaseSubscriberEndpoint(remoteParticipantName, subscriber); + releaseSubscriberEndpoint(remoteParticipantName, subscriber, reason); log.debug("PARTICIPANT {}: Released subscriber endpoint to {}", this.getParticipantPublicId(), remoteParticipantName); } else { @@ -367,7 +381,7 @@ public class KurentoParticipant extends Participant { this.getParticipantPublicId(), remoteParticipantName); } } - releasePublisherEndpoint(); + releasePublisherEndpoint(reason); } /** @@ -410,7 +424,7 @@ public class KurentoParticipant extends Participant { session.sendMediaError(this.getParticipantPrivateId(), desc); } - private void releasePublisherEndpoint() { + private void releasePublisherEndpoint(String reason) { if (publisher != null && publisher.getEndpoint() != null) { publisher.unregisterErrorListeners(); for (MediaElement el : publisher.getMediaElements()) { @@ -419,15 +433,23 @@ public class KurentoParticipant extends Participant { releaseElement(getParticipantPublicId(), publisher.getEndpoint()); this.streaming = false; publisher = null; + + CDR.stopPublisher(this.getParticipantPublicId(), reason); + } else { log.warn("PARTICIPANT {}: Trying to release publisher endpoint but is null", getParticipantPublicId()); } } - private void releaseSubscriberEndpoint(String senderName, SubscriberEndpoint subscriber) { + private void releaseSubscriberEndpoint(String senderName, SubscriberEndpoint subscriber, String reason) { if (subscriber != null) { subscriber.unregisterErrorListeners(); releaseElement(senderName, subscriber.getEndpoint()); + + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(this.getParticipantPublicId())) { + CDR.stopSubscriber(this.getParticipantPublicId(), senderName, reason); + } + } else { log.warn("PARTICIPANT {}: Trying to release subscriber endpoint for '{}' but is null", this.getParticipantPublicId(), senderName); diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java index e0dc7e61..84164576 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java @@ -19,7 +19,9 @@ import org.slf4j.LoggerFactory; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; +import io.openvidu.client.internal.ProtocolElements; import io.openvidu.java.client.SessionProperties; +import io.openvidu.server.cdr.CallDetailRecord; import io.openvidu.server.core.Participant; import io.openvidu.server.core.Session; @@ -50,14 +52,17 @@ public class KurentoSession implements Session { private Object pipelineReleaseLock = new Object(); private volatile boolean pipelineReleased = false; private boolean destroyKurentoClient; + + private CallDetailRecord CDR; public KurentoSession(String sessionId, SessionProperties sessionProperties, KurentoClient kurentoClient, KurentoSessionEventsHandler kurentoSessionHandler, - boolean destroyKurentoClient) { + boolean destroyKurentoClient, CallDetailRecord CDR) { this.sessionId = sessionId; this.sessionProperties = sessionProperties; this.kurentoClient = kurentoClient; this.destroyKurentoClient = destroyKurentoClient; this.kurentoSessionHandler = kurentoSessionHandler; + this.CDR = CDR; log.debug("New SESSION instance with id '{}'", sessionId); } @@ -76,7 +81,7 @@ public class KurentoSession implements Session { checkClosed(); createPipeline(); - KurentoParticipant kurentoParticipant = new KurentoParticipant(participant, this, getPipeline(), kurentoSessionHandler.getInfoHandler()); + KurentoParticipant kurentoParticipant = new KurentoParticipant(participant, this, getPipeline(), kurentoSessionHandler.getInfoHandler(), this.CDR); participants.put(participant.getParticipantPrivateId(), kurentoParticipant); filterStates.forEach((filterId, state) -> { @@ -85,6 +90,10 @@ public class KurentoSession implements Session { }); log.info("SESSION {}: Added participant {}", sessionId, participant); + + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(participant.getParticipantPublicId())) { + CDR.recordParticipantJoined(participant, sessionId); + } } public void newPublisher(Participant participant) { @@ -102,7 +111,7 @@ public class KurentoSession implements Session { participants.values(), participant.getParticipantPublicId()); } - public void cancelPublisher(Participant participant) { + public void cancelPublisher(Participant participant, String reason) { deregisterPublisher(); // cancel recv video from this publisher @@ -110,7 +119,7 @@ public class KurentoSession implements Session { if (participant.equals(subscriber)) { continue; } - subscriber.cancelReceivingMedia(participant.getParticipantPublicId()); + subscriber.cancelReceivingMedia(participant.getParticipantPublicId(), reason); } @@ -120,7 +129,7 @@ public class KurentoSession implements Session { } @Override - public void leave(String participantPrivateId) throws OpenViduException { + public void leave(String participantPrivateId, String reason) throws OpenViduException { checkClosed(); @@ -135,8 +144,12 @@ public class KurentoSession implements Session { if (participant.isStreaming()) { this.deregisterPublisher(); } - this.removeParticipant(participant); - participant.close(); + this.removeParticipant(participant, reason); + participant.close(reason); + + if (!ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(participant.getParticipantPublicId())) { + CDR.recordParticipantLeft(participant, participant.getSession().getSessionId(), reason); + } } @Override @@ -163,12 +176,12 @@ public class KurentoSession implements Session { } @Override - public boolean close() { + public boolean close(String reason) { if (!closed) { for (KurentoParticipant participant : participants.values()) { participant.releaseAllFilters(); - participant.close(); + participant.close(reason); } participants.clear(); @@ -208,7 +221,7 @@ public class KurentoSession implements Session { } } - private void removeParticipant(Participant participant) { + private void removeParticipant(Participant participant, String reason) { checkClosed(); @@ -216,7 +229,7 @@ public class KurentoSession implements Session { log.debug("SESSION {}: Cancel receiving media from participant '{}' for other participant", this.sessionId, participant.getParticipantPublicId()); for (KurentoParticipant other : participants.values()) { - other.cancelReceivingMedia(participant.getParticipantPublicId()); + other.cancelReceivingMedia(participant.getParticipantPublicId(), reason); } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index 9a215fa3..e4b80bb0 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -27,9 +27,7 @@ import io.openvidu.server.kurento.KurentoClientProvider; import io.openvidu.server.kurento.KurentoClientSessionInfo; import io.openvidu.server.kurento.OpenViduKurentoClientSessionInfo; import io.openvidu.server.kurento.endpoint.SdpType; -import io.openvidu.server.recording.ComposedRecordingService; import io.openvidu.server.rpc.RpcHandler; -import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; import io.openvidu.server.core.Session; @@ -42,13 +40,7 @@ public class KurentoSessionManager extends SessionManager { private KurentoClientProvider kcProvider; @Autowired - private KurentoSessionEventsHandler sessionHandler; - - @Autowired - private ComposedRecordingService recordingService; - - @Autowired - OpenviduConfig openviduConfig; + private KurentoSessionEventsHandler kurentoSessionEventsHandler; @Override public synchronized void joinRoom(Participant participant, String sessionId, Integer transactionId) { @@ -57,8 +49,8 @@ public class KurentoSessionManager extends SessionManager { KurentoClientSessionInfo kcSessionInfo = new OpenViduKurentoClientSessionInfo( participant.getParticipantPrivateId(), sessionId); - KurentoSession session = (KurentoSession) sessions.get(sessionId); + if (session == null && kcSessionInfo != null) { SessionProperties properties = sessionProperties.get(sessionId); if (properties == null && this.isInsecureParticipant(participant.getParticipantPrivateId())) { @@ -85,27 +77,30 @@ public class KurentoSessionManager extends SessionManager { } catch (OpenViduException e) { log.warn("PARTICIPANT {}: Error joining/creating session {}", participant.getParticipantPublicId(), sessionId, e); - sessionHandler.onParticipantJoined(participant, sessionId, null, transactionId, e); + sessionEventsHandler.onParticipantJoined(participant, sessionId, null, transactionId, e); } if (existingParticipants != null) { - sessionHandler.onParticipantJoined(participant, sessionId, existingParticipants, transactionId, null); + sessionEventsHandler.onParticipantJoined(participant, sessionId, existingParticipants, transactionId, null); } } @Override - public void leaveRoom(Participant participant, Integer transactionId) { + public void leaveRoom(Participant participant, Integer transactionId, String reason) { log.debug("Request [LEAVE_ROOM] ({})", participant.getParticipantPublicId()); KurentoParticipant kParticipant = (KurentoParticipant) participant; KurentoSession session = kParticipant.getSession(); String sessionId = session.getSessionId(); + if (session.isClosed()) { log.warn("'{}' is trying to leave from session '{}' but it is closing", participant.getParticipantPublicId(), sessionId); throw new OpenViduException(Code.ROOM_CLOSED_ERROR_CODE, "'" + participant.getParticipantPublicId() + "' is trying to leave from session '" + sessionId + "' but it is closing"); } - session.leave(participant.getParticipantPrivateId()); + session.leave(participant.getParticipantPrivateId(), reason); + + // Update control data structures if (sessionidParticipantpublicidParticipant.get(sessionId) != null) { Participant p = sessionidParticipantpublicidParticipant.get(sessionId) @@ -127,6 +122,8 @@ public class KurentoSessionManager extends SessionManager { showTokens(); + // Close Session if no more participants + Set remainingParticipants = null; try { remainingParticipants = getParticipants(sessionId); @@ -134,10 +131,15 @@ public class KurentoSessionManager extends SessionManager { log.debug("Possible collision when closing the session '{}' (not found)"); remainingParticipants = Collections.emptySet(); } + + sessionEventsHandler.onParticipantLeft(participant, sessionId, remainingParticipants, transactionId, null, + reason); + if (remainingParticipants.isEmpty()) { + log.info("No more participants in session '{}', removing it and closing it", sessionId); - if (session.close()) { - sessionHandler.onSessionClosed(sessionId); + if (session.close(reason)) { + sessionEventsHandler.onSessionClosed(sessionId, "lastParticipantLeft"); } sessions.remove(sessionId); @@ -148,17 +150,21 @@ public class KurentoSessionManager extends SessionManager { showTokens(); log.warn("Session '{}' removed and closed", sessionId); - } - if (remainingParticipants.size() == 1 && openviduConfig.isRecordingModuleEnabled() + + } else if (remainingParticipants.size() == 1 && openviduConfig.isRecordingModuleEnabled() && MediaMode.ROUTED.equals(session.getSessionProperties().mediaMode()) && ArchiveMode.ALWAYS.equals(session.getSessionProperties().archiveMode()) - && ProtocolElements.RECORDER_PARTICIPANT_ID_PUBLICID + && ProtocolElements.RECORDER_PARTICIPANT_PUBLICID .equals(remainingParticipants.iterator().next().getParticipantPublicId())) { + log.info("Last participant left. Stopping recording for session {}", sessionId); - evictParticipant(session.getParticipantByPublicId("RECORDER").getParticipantPrivateId()); recordingService.stopRecording(session); + evictParticipant(session.getParticipantByPublicId(ProtocolElements.RECORDER_PARTICIPANT_PUBLICID) + .getParticipantPrivateId(), "EVICT_RECORDER"); } - sessionHandler.onParticipantLeft(participant, sessionId, remainingParticipants, transactionId, null); + + // Finally close websocket session + sessionEventsHandler.closeRpcSession(participant.getParticipantPrivateId()); } /** @@ -205,7 +211,7 @@ public class KurentoSessionManager extends SessionManager { SdpType sdpType = kurentoOptions.isOffer ? SdpType.OFFER : SdpType.ANSWER; KurentoSession session = kurentoParticipant.getSession(); - kurentoParticipant.createPublishingEndpoint(); + kurentoParticipant.createPublishingEndpoint(mediaOptions); for (MediaElement elem : kurentoOptions.mediaElements) { kurentoParticipant.getPublisher().apply(elem); @@ -218,13 +224,14 @@ public class KurentoSessionManager extends SessionManager { OpenViduException e = new OpenViduException(Code.MEDIA_SDP_ERROR_CODE, "Error generating SDP response for publishing user " + participant.getParticipantPublicId()); log.error("PARTICIPANT {}: Error publishing media", participant.getParticipantPublicId(), e); - sessionHandler.onPublishMedia(participant, session.getSessionId(), mediaOptions, sdpAnswer, participants, - transactionId, e); + sessionEventsHandler.onPublishMedia(participant, session.getSessionId(), mediaOptions, sdpAnswer, + participants, transactionId, e); } if (this.openviduConfig.isRecordingModuleEnabled() && MediaMode.ROUTED.equals(session.getSessionProperties().mediaMode()) && ArchiveMode.ALWAYS.equals(session.getSessionProperties().archiveMode()) + && !recordingService.sessionIsBeingRecorded(session.getSessionId()) && session.getActivePublishers() == 0) { recordingService.startRecording(session); } @@ -234,17 +241,18 @@ public class KurentoSessionManager extends SessionManager { kurentoParticipant.setAudioActive(kurentoOptions.audioActive); kurentoParticipant.setVideoActive(kurentoOptions.videoActive); kurentoParticipant.setTypeOfVideo(kurentoOptions.typeOfVideo); + kurentoParticipant.setFrameRate(kurentoOptions.frameRate); participants = kurentoParticipant.getSession().getParticipants(); if (sdpAnswer != null) { - sessionHandler.onPublishMedia(participant, session.getSessionId(), mediaOptions, sdpAnswer, participants, - transactionId, null); + sessionEventsHandler.onPublishMedia(participant, session.getSessionId(), mediaOptions, sdpAnswer, + participants, transactionId, null); } } @Override - public void unpublishVideo(Participant participant, Integer transactionId) { + public void unpublishVideo(Participant participant, Integer transactionId, String reason) { try { KurentoParticipant kParticipant = (KurentoParticipant) participant; KurentoSession session = kParticipant.getSession(); @@ -254,16 +262,16 @@ public class KurentoSessionManager extends SessionManager { throw new OpenViduException(Code.USER_NOT_STREAMING_ERROR_CODE, "Participant '" + participant.getParticipantPublicId() + "' is not streaming media"); } - kParticipant.unpublishMedia(); - session.cancelPublisher(participant); + kParticipant.unpublishMedia(reason); + session.cancelPublisher(participant, reason); Set participants = session.getParticipants(); - sessionHandler.onUnpublishMedia(participant, participants, transactionId, null); + sessionEventsHandler.onUnpublishMedia(participant, participants, transactionId, null, reason); } catch (OpenViduException e) { log.warn("PARTICIPANT {}: Error unpublishing media", participant.getParticipantPublicId(), e); - sessionHandler.onUnpublishMedia(participant, null, transactionId, e); + sessionEventsHandler.onUnpublishMedia(participant, null, transactionId, e, ""); } } @@ -304,10 +312,10 @@ public class KurentoSessionManager extends SessionManager { } } catch (OpenViduException e) { log.error("PARTICIPANT {}: Error subscribing to {}", participant.getParticipantPublicId(), senderName, e); - sessionHandler.onSubscribe(participant, session.getSessionId(), senderName, null, transactionId, e); + sessionEventsHandler.onSubscribe(participant, session, senderName, null, transactionId, e); } if (sdpAnswer != null) { - sessionHandler.onSubscribe(participant, session.getSessionId(), senderName, sdpAnswer, transactionId, null); + sessionEventsHandler.onSubscribe(participant, session, senderName, sdpAnswer, transactionId, null); } } @@ -328,9 +336,9 @@ public class KurentoSessionManager extends SessionManager { "User " + senderName + " not found in room " + session.getSessionId()); } - kParticipant.cancelReceivingMedia(senderName); + kParticipant.cancelReceivingMedia(senderName, "unsubscribe"); - sessionHandler.onUnsubscribe(participant, senderName, transactionId, null); + sessionEventsHandler.onUnsubscribe(participant, senderName, transactionId, null); } @Override @@ -338,7 +346,7 @@ public class KurentoSessionManager extends SessionManager { try { JsonObject messageJSON = new JsonParser().parse(message).getAsJsonObject(); KurentoParticipant kParticipant = (KurentoParticipant) participant; - sessionHandler.onSendMessage(participant, messageJSON, + sessionEventsHandler.onSendMessage(participant, messageJSON, getParticipants(kParticipant.getSession().getSessionId()), transactionId, null); } catch (JsonSyntaxException | IllegalStateException e) { throw new OpenViduException(Code.SIGNAL_FORMAT_INVALID_ERROR_CODE, @@ -354,11 +362,11 @@ public class KurentoSessionManager extends SessionManager { log.debug("Request [ICE_CANDIDATE] endpoint={} candidate={} " + "sdpMLineIdx={} sdpMid={} ({})", endpointName, candidate, sdpMLineIndex, sdpMid, participant.getParticipantPublicId()); kParticipant.addIceCandidate(endpointName, new IceCandidate(candidate, sdpMid, sdpMLineIndex)); - sessionHandler.onRecvIceCandidate(participant, transactionId, null); + sessionEventsHandler.onRecvIceCandidate(participant, transactionId, null); } catch (OpenViduException e) { log.error("PARTICIPANT {}: Error receiving ICE " + "candidate (epName={}, candidate={})", participant.getParticipantPublicId(), endpointName, candidate, e); - sessionHandler.onRecvIceCandidate(participant, transactionId, e); + sessionEventsHandler.onRecvIceCandidate(participant, transactionId, e); } } @@ -382,8 +390,8 @@ public class KurentoSessionManager extends SessionManager { "Session '" + sessionId + "' already exists"); } KurentoClient kurentoClient = kcProvider.getKurentoClient(kcSessionInfo); - session = new KurentoSession(sessionId, sessionProperties, kurentoClient, sessionHandler, - kcProvider.destroyWhenUnused()); + session = new KurentoSession(sessionId, sessionProperties, kurentoClient, kurentoSessionEventsHandler, + kcProvider.destroyWhenUnused(), this.CDR); KurentoSession oldSession = (KurentoSession) sessions.putIfAbsent(sessionId, session); if (oldSession != null) { @@ -396,7 +404,7 @@ public class KurentoSessionManager extends SessionManager { } log.warn("No session '{}' exists yet. Created one using KurentoClient '{}'.", sessionId, kcName); - sessionHandler.onSessionCreated(sessionId); + sessionEventsHandler.onSessionCreated(sessionId); } /** @@ -407,10 +415,10 @@ public class KurentoSessionManager extends SessionManager { * */ @Override - public void evictParticipant(String participantPrivateId) throws OpenViduException { + public void evictParticipant(String participantPrivateId, String reason) throws OpenViduException { Participant participant = this.getParticipant(participantPrivateId); - this.leaveRoom(participant, null); - sessionHandler.onParticipantEvicted(participant); + this.leaveRoom(participant, null, reason); + sessionEventsHandler.onParticipantEvicted(participant); } @Override @@ -420,9 +428,11 @@ public class KurentoSessionManager extends SessionManager { boolean audioActive = RpcHandler.getBooleanParam(request, ProtocolElements.PUBLISHVIDEO_AUDIOACTIVE_PARAM); boolean videoActive = RpcHandler.getBooleanParam(request, ProtocolElements.PUBLISHVIDEO_VIDEOACTIVE_PARAM); String typeOfVideo = RpcHandler.getStringParam(request, ProtocolElements.PUBLISHVIDEO_TYPEOFVIDEO_PARAM); + int frameRate = RpcHandler.getIntParam(request, ProtocolElements.PUBLISHVIDEO_FRAMERATE_PARAM); boolean doLoopback = RpcHandler.getBooleanParam(request, ProtocolElements.PUBLISHVIDEO_DOLOOPBACK_PARAM); - return new KurentoMediaOptions(true, sdpOffer, null, null, audioActive, videoActive, typeOfVideo, doLoopback); + return new KurentoMediaOptions(true, sdpOffer, null, null, audioActive, videoActive, typeOfVideo, frameRate, + doLoopback); } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index a79d44e4..637f8354 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -51,6 +51,7 @@ import io.openvidu.server.CommandExecutor; import io.openvidu.server.OpenViduServer; import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.core.Session; +import io.openvidu.server.core.SessionEventsHandler; @Service public class ComposedRecordingService { @@ -59,6 +60,9 @@ public class ComposedRecordingService { @Autowired OpenviduConfig openviduConfig; + + @Autowired + private SessionEventsHandler sessionHandler; private Map containers = new ConcurrentHashMap<>(); private Map sessionsContainers = new ConcurrentHashMap<>(); @@ -81,12 +85,13 @@ public class ComposedRecordingService { List envs = new ArrayList<>(); String shortSessionId = session.getSessionId().substring(session.getSessionId().lastIndexOf('/') + 1, session.getSessionId().length()); - String videoId = this.getFreeRecordingId(session.getSessionId(), shortSessionId); + String recordingId = this.getFreeRecordingId(session.getSessionId(), shortSessionId); String secret = openviduConfig.getOpenViduSecret(); - Recording recording = new Recording(session.getSessionId(), videoId, videoId); + Recording recording = new Recording(session.getSessionId(), recordingId, recordingId); this.sessionsRecordings.put(session.getSessionId(), recording); + this.sessionHandler.setRecordingStarted(session.getSessionId(), recording); this.startingRecordings.put(recording.getId(), recording); String uid = null; @@ -106,7 +111,7 @@ public class ComposedRecordingService { + "/" + secret); envs.add("RESOLUTION=1920x1080"); envs.add("FRAMERATE=30"); - envs.add("VIDEO_NAME=" + videoId); + envs.add("VIDEO_NAME=" + recordingId); envs.add("VIDEO_FORMAT=mp4"); envs.add("USER_ID=" + uid); envs.add("RECORDING_JSON=" + recording.toJson().toJSONString()); @@ -115,9 +120,9 @@ public class ComposedRecordingService { log.debug("Recorder connecting to url {}", "https://OPENVIDUAPP:" + secret + "@localhost:8443/#/layout-best-fit/" + shortSessionId + "/" + secret); - String containerId = this.runRecordingContainer(envs, "recording_" + videoId); + String containerId = this.runRecordingContainer(envs, "recording_" + recordingId); - this.waitForVideoFileNotEmpty(videoId); + this.waitForVideoFileNotEmpty(recordingId); this.sessionsContainers.put(session.getSessionId(), containerId); @@ -171,7 +176,7 @@ public class ComposedRecordingService { RecordingInfoUtils infoUtils = new RecordingInfoUtils( this.openviduConfig.getOpenViduRecordingPath() + recording.getName() + ".info"); - if (openviduConfig.getOpenViduRecordingFreeAccess()) { + if (openviduConfig.getOpenViduRecordingPublicAccess()) { recording.setStatus(Recording.Status.available); } else { recording.setStatus(Recording.Status.stopped); @@ -181,7 +186,7 @@ public class ComposedRecordingService { recording.setHasAudio(infoUtils.hasAudio()); recording.setHasVideo(infoUtils.hasVideo()); - if (openviduConfig.getOpenViduRecordingFreeAccess()) { + if (openviduConfig.getOpenViduRecordingPublicAccess()) { recording.setUrl(this.openviduConfig.getFinalUrl() + "recordings/" + recording.getName() + ".mp4"); } @@ -189,7 +194,9 @@ public class ComposedRecordingService { throw new OpenViduException(Code.RECORDING_REPORT_ERROR_CODE, "There was an error generating the metadata report file for the recording"); } - + + this.sessionHandler.sendRecordingStoppedNotification(session, recording); + return recording; } @@ -341,7 +348,7 @@ public class ComposedRecordingService { for (int i = 0; i < files.length; i++) { Recording recording = this.getRecordingFromFile(files[i]); if (recording != null) { - if (openviduConfig.getOpenViduRecordingFreeAccess()) { + if (openviduConfig.getOpenViduRecordingPublicAccess()) { if (Recording.Status.stopped.equals(recording.getStatus())) { recording.setStatus(Recording.Status.available); recording.setUrl( diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 80548235..fa0dbded 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -16,8 +16,6 @@ */ package io.openvidu.server.rest; -import static org.kurento.commons.PropertiesManager.getProperty; - import java.util.Collection; import java.util.Map; import java.util.NoSuchElementException; @@ -36,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import io.openvidu.client.OpenViduException; +import io.openvidu.client.internal.ProtocolElements; import io.openvidu.java.client.ArchiveLayout; import io.openvidu.java.client.ArchiveMode; import io.openvidu.java.client.MediaMode; @@ -55,9 +54,6 @@ import io.openvidu.server.recording.ComposedRecordingService; @RequestMapping("/api") public class SessionRestController { - private static final int UPDATE_SPEAKER_INTERVAL_DEFAULT = 1800; - private static final int THRESHOLD_SPEAKER_DEFAULT = -50; - @Autowired private SessionManager sessionManager; @@ -69,16 +65,6 @@ public class SessionRestController { return sessionManager.getSessions(); } - @RequestMapping("/getUpdateSpeakerInterval") - public Integer getUpdateSpeakerInterval() { - return Integer.valueOf(getProperty("updateSpeakerInterval", UPDATE_SPEAKER_INTERVAL_DEFAULT)); - } - - @RequestMapping("/getThresholdSpeaker") - public Integer getThresholdSpeaker() { - return Integer.valueOf(getProperty("thresholdSpeaker", THRESHOLD_SPEAKER_DEFAULT)); - } - @SuppressWarnings("unchecked") @RequestMapping(value = "/sessions", method = RequestMethod.POST) public ResponseEntity getSessionId(@RequestBody(required = false) Map params) { @@ -197,9 +183,14 @@ public class SessionRestController { // Session is not being recorded return new ResponseEntity(HttpStatus.CONFLICT); } - + + Session session = sessionManager.getSession(recording.getSessionId()); + Recording stoppedRecording = this.recordingService - .stopRecording(sessionManager.getSession(recording.getSessionId())); + .stopRecording(session); + + sessionManager.evictParticipant(session.getParticipantByPublicId(ProtocolElements.RECORDER_PARTICIPANT_PUBLICID).getParticipantPrivateId(), "EVICT_RECORDER"); + return new ResponseEntity<>(stoppedRecording.toJson(), HttpStatus.OK); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java index 0e44c76d..005b2ab8 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java @@ -21,7 +21,6 @@ import io.openvidu.client.internal.ProtocolElements; import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; -import io.openvidu.server.core.ParticipantRole; import io.openvidu.server.core.SessionManager; import io.openvidu.server.core.Token; @@ -176,18 +175,18 @@ public class RpcHandler extends DefaultJsonRpcHandler { if (sessionId == null) { // null when afterConnectionClosed log.warn("No session information found for participant with privateId {}. " + "Using the admin method to evict the user.", participantPrivateId); - leaveRoomAfterConnClosed(participantPrivateId); + leaveRoomAfterConnClosed(participantPrivateId, ""); } else { // Sanity check: don't call leaveRoom unless the id checks out Participant participant = sessionManager.getParticipant(sessionId, participantPrivateId); if (participant != null) { log.info("Participant {} is leaving session {}", participant.getParticipantPublicId(), sessionId); - sessionManager.leaveRoom(participant, request.getId()); + sessionManager.leaveRoom(participant, request.getId(), "disconnect"); log.info("Participant {} has left session {}", participant.getParticipantPublicId(), sessionId); } else { log.warn("Participant with private id {} not found in session {}. " + "Using the admin method to evict the user.", participantPrivateId, sessionId); - leaveRoomAfterConnClosed(participantPrivateId); + leaveRoomAfterConnClosed(participantPrivateId, ""); } } } @@ -263,12 +262,12 @@ public class RpcHandler extends DefaultJsonRpcHandler { String sessionId = rpcConnection.getSessionId(); Participant participant = sessionManager.getParticipant(sessionId, participantPrivateId); - sessionManager.unpublishVideo(participant, request.getId()); + sessionManager.unpublishVideo(participant, request.getId(), "unpublish"); } - public void leaveRoomAfterConnClosed(String participantPrivateId) { + public void leaveRoomAfterConnClosed(String participantPrivateId, String reason) { try { - sessionManager.evictParticipant(participantPrivateId); + sessionManager.evictParticipant(participantPrivateId, reason); log.info("Evicted participant with privateId {}", participantPrivateId); } catch (OpenViduException e) { log.warn("Unable to evict: {}", e.getMessage()); @@ -290,7 +289,7 @@ public class RpcHandler extends DefaultJsonRpcHandler { if (rpc != null && rpc.getSessionId() != null) { io.openvidu.server.core.Session session = this.sessionManager.getSession(rpc.getSessionId()); if (session != null && session.getParticipantByPrivateId(rpc.getParticipantPrivateId()) != null) { - leaveRoomAfterConnClosed(rpc.getParticipantPrivateId()); + leaveRoomAfterConnClosed(rpc.getParticipantPrivateId(), "networkDisconnect"); } } @@ -300,7 +299,7 @@ public class RpcHandler extends DefaultJsonRpcHandler { log.warn( "Evicting participant with private id {} because a transport error took place and its web socket connection is now closed", rpcSession.getSessionId()); - this.leaveRoomAfterConnClosed(rpcSessionId); + this.leaveRoomAfterConnClosed(rpcSessionId, "networkDisconnect"); this.webSocketTransportError.remove(rpcSessionId); } } diff --git a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b6c66709..ccd5b5c1 100644 --- a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -30,11 +30,16 @@ "description": "Where to store the recorded video files" }, { - "name": "openvidu.recording.free-access", + "name": "openvidu.recording.public-access", "type": "java.lang.Boolean", - "description": "'true' to allow free access to the video files specified in 'openviu.recording.path'. 'false' to only allow access to authenticated users" + "description": "'true' to allow public access to the video files specified in 'openviu.recording.path'. 'false' to only allow access to authenticated users" }, - { + { + "name": "openvidu.recording.notification", + "type": "java.lang.String", + "description": "Which users will receive a notfication (client events 'recordingStarted' and 'recordingStopped') when recording starts and stops: 'none', 'publisher_moderator', 'all'" + }, + { "name": "openvidu.recording.version", "type": "java.lang.String", "description": "Tag for openvidu/openvidu-recording Docker image" diff --git a/openvidu-server/src/main/resources/application.properties b/openvidu-server/src/main/resources/application.properties index 754683f0..60eabdc1 100644 --- a/openvidu-server/src/main/resources/application.properties +++ b/openvidu-server/src/main/resources/application.properties @@ -16,4 +16,5 @@ openvidu.publicurl: local openvidu.cdr: false openvidu.recording: false openvidu.recording.path: /opt/openvidu/recordings -openvidu.recording.free-access: false \ No newline at end of file +openvidu.recording.public-access: false +openvidu.recording.notification: publisher_moderator \ No newline at end of file From d5eda724c52aa51d6d186cd89dfef8bfb9f6d1fc Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 17 Apr 2018 15:08:02 +0200 Subject: [PATCH 02/60] openvidu-testapp: API REST page with SessionProperties. New API for openvidu-browser 2.0.0 --- openvidu-testapp/package.json | 2 +- .../openvidu-instance.component.ts | 322 ++++++++++++++---- .../test-apirest/test-apirest.component.html | 50 ++- .../test-apirest/test-apirest.component.ts | 21 +- .../src/app/services/openvidu-rest.service.ts | 7 +- 5 files changed, 324 insertions(+), 78 deletions(-) diff --git a/openvidu-testapp/package.json b/openvidu-testapp/package.json index 6c6d17a3..afc781f4 100644 --- a/openvidu-testapp/package.json +++ b/openvidu-testapp/package.json @@ -16,7 +16,7 @@ "core-js": "^2.4.1", "hammerjs": "^2.0.8", "openvidu-browser": "1.9.0-beta-1", - "openvidu-node-client": "1.7.0", + "openvidu-node-client": "1.8.0", "rxjs": "^5.4.2", "zone.js": "^0.8.14" }, 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 e613086e..188f2b62 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 @@ -209,37 +209,8 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.sendAudioChange = this.sendAudio; this.sendVideoChange = this.sendVideo; - this.publisher = this.OV.initPublisher( - 'local-vid-' + this.session.connection.connectionId, - { - audio: this.sendAudio, - video: this.sendVideo, - audioActive: this.activeAudio, - videoActive: this.activeVideo, - quality: 'MEDIUM', - screen: this.optionsVideo === 'screen' ? true : false - }, - (err) => { - if (err) { - console.warn(err); - this.openviduError = err; - if (err.name === 'SCREEN_EXTENSION_NOT_INSTALLED') { - this.extensionDialog.open(ExtensionDialogComponent, { - data: { url: err.message }, - disableClose: true, - width: '250px' - }); - } - } - }); - - this.addPublisherEvents(this.publisher); - - if (this.subscribeToRemote) { - this.publisher.subscribeToRemote(); - } - - this.session.publish(this.publisher); + // this.asyncInitPublisher(); + this.syncInitPublisher(); } } else { @@ -439,6 +410,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { console.log('Message succesfully sent'); } }); + // this.initGrayVideo(); } recordPublisher(): void { @@ -533,7 +505,13 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { publishUnpublish(): void { if (this.unpublished) { - this.session.publish(this.publisher); + this.session.publish(this.publisher) + .then(() => { + console.log(this.publisher); + }) + .catch(e => { + console.error(e); + }); } else { this.session.unpublish(this.publisher); this.removeUserData(this.session.connection.connectionId); @@ -585,12 +563,13 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.publisher = this.OV.initPublisher( 'local-vid-' + this.session.connection.connectionId, { - audio: this.sendAudioChange, - video: this.sendVideoChange, - audioActive: (!this.publisherChanged) ? true : !this.audioMuted, - videoActive: (!this.publisherChanged) ? true : !this.videoMuted, - quality: 'MEDIUM', - screen: screenChange + audioSource: this.sendAudioChange ? undefined : false, + videoSource: this.sendVideoChange ? (screenChange ? 'screen' : undefined) : false, + publishAudio: (!this.publisherChanged) ? true : !this.audioMuted, + publishVideo: (!this.publisherChanged) ? true : !this.videoMuted, + resolution: '640x480', + frameRate: 30, + insertMode: 'APPEND' }, (err) => { if (err) { @@ -621,10 +600,35 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { document.getElementById('record-btn-' + this.session.connection.connectionId + '-' + connectionId).remove(); document.getElementById('pause-btn-' + this.session.connection.connectionId + '-' + connectionId).remove(); } else { - subscriber = this.session.subscribe(subscriber.stream, 'remote-vid-' + this.session.connection.connectionId); + + + this.session.subscribeAsync(subscriber.stream, 'remote-vid-' + this.session.connection.connectionId) + .then(sub => { + subscriber = sub; + this.subscribers[connectionId].subscriber = subscriber; + subscriber.on('videoElementCreated', (e) => { + if (!subscriber.stream.hasVideo) { + $(e.element).css({ 'background-color': '#4d4d4d' }); + $(e.element).attr('poster', 'assets/images/volume.png'); + } + this.subscribers[connectionId].videoElement = e.element; + this.updateEventList('videoElementCreated', e.element.id); + }); + subscriber.on('videoPlaying', (e) => { + this.removeUserData(connectionId); + this.appendSubscriberData(e.element, subscriber.stream.connection); + this.updateEventList('videoPlaying', e.element.id); + }); + }) + .catch(err => { + console.error(err); + }); + + + /*subscriber = this.session.subscribe(subscriber.stream, 'remote-vid-' + this.session.connection.connectionId); this.subscribers[connectionId].subscriber = subscriber; subscriber.on('videoElementCreated', (e) => { - if (!subscriber.stream.getRecvVideo()) { + if (!subscriber.stream.hasVideo) { $(e.element).css({ 'background-color': '#4d4d4d' }); $(e.element).attr('poster', 'assets/images/volume.png'); } @@ -635,7 +639,9 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.removeUserData(connectionId); this.appendSubscriberData(e.element, subscriber.stream.connection); this.updateEventList('videoPlaying', e.element.id); - }); + });*/ + + } this.subscribers[connectionId].subbed = !this.subscribers[connectionId].subbed; } @@ -646,30 +652,8 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.changeDetector.detectChanges(); if (this.subscribeTo) { - const subscriber: Subscriber = session.subscribe(event.stream, 'remote-vid-' + session.connection.connectionId); - this.subscribers[subscriber.stream.connection.connectionId] = { - 'subscriber': subscriber, - 'subbed': true, - 'recorder': undefined, - 'recording': false, - 'paused': false, - 'videoElement': undefined - }; - subscriber.on('videoElementCreated', (e) => { - if (!event.stream.getRecvVideo()) { - $(e.element).css({ 'background-color': '#4d4d4d' }); - $(e.element).attr('poster', 'assets/images/volume.png'); - } - this.subscribers[subscriber.stream.connection.connectionId].videoElement = e.element; - this.updateEventList('videoElementCreated', e.element.id); - }); - subscriber.on('videoPlaying', (e) => { - this.appendSubscriberData(e.element, subscriber.stream.connection); - this.updateEventList('videoPlaying', e.element.id); - }); - subscriber.on('videoElementDestroyed', (e) => { - this.updateEventList('videoElementDestroyed', '(Subscriber)'); - }); + // this.syncSubscribe(session, event); + this.asyncSubscribe(session, event); } this.updateEventList('streamCreated', event.stream.connection.connectionId); }); @@ -686,11 +670,23 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { }); session.on('sessionDisconnected', (event) => { this.updateEventList('sessionDisconnected', 'No data'); + if (event.reason === 'networkDisconnect') { + this.session = null; + this.OV = null; + } }); session.on('signal', (event) => { this.updateEventList('signal', event.from.connectionId + '-' + event.data); }); + session.on('recordingStarted', (event) => { + this.updateEventList('recordingStarted', event.id); + }); + + session.on('recordingStopped', (event) => { + this.updateEventList('recordingStopped', event.id); + }); + /*session.on('publisherStartSpeaking', (event) => { console.log('Publisher start speaking'); console.log(event); @@ -724,6 +720,14 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.updateEventList('accessDenied', ''); }); + publisher.on('accessDialogOpened', (e) => { + this.updateEventList('accessDialogOpened', ''); + }); + + publisher.on('accessDialogClosed', (e) => { + this.updateEventList('accessDialogClosed', ''); + }); + publisher.on('videoPlaying', (e) => { this.appendPublisherData(e.element); this.updateEventList('videoPlaying', e.element.id); @@ -806,4 +810,192 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { } } + syncInitPublisher() { + this.publisher = this.OV.initPublisher( + 'local-vid-' + this.session.connection.connectionId, + { + audioSource: this.sendAudio ? undefined : false, + videoSource: this.sendVideo ? (this.optionsVideo === 'screen' ? 'screen' : undefined) : false, + publishAudio: this.activeAudio, + publishVideo: this.activeVideo, + resolution: '640x480', + frameRate: 30, + insertMode: 'APPEND' + }, + (err) => { + if (err) { + console.warn(err); + this.openviduError = err; + if (err.name === 'SCREEN_EXTENSION_NOT_INSTALLED') { + this.extensionDialog.open(ExtensionDialogComponent, { + data: { url: err.message }, + disableClose: true, + width: '250px' + }); + } + } + }); + + this.addPublisherEvents(this.publisher); + + if (this.subscribeToRemote) { + this.publisher.subscribeToRemote(); + } + + this.session.publish(this.publisher); + } + + asyncInitPublisher() { + this.OV.initPublisherAsync( + 'local-vid-' + this.session.connection.connectionId, + { + audioSource: this.sendAudio ? undefined : false, + videoSource: this.sendVideo ? (this.optionsVideo === 'screen' ? 'screen' : undefined) : false, + publishAudio: this.activeAudio, + publishVideo: this.activeVideo, + resolution: '640x480', + frameRate: 30, + insertMode: 'APPEND' + }) + .then(publisher => { + this.publisher = publisher; + this.addPublisherEvents(this.publisher); + if (this.subscribeToRemote) { + this.publisher.subscribeToRemote(); + } + this.session.publish(this.publisher) + .then(() => { + console.log(this.publisher); + }) + .catch(e => { + console.error(e); + }); + }) + .catch(err => { + if (err) { + console.error(err); + this.openviduError = err; + if (err.name === 'SCREEN_EXTENSION_NOT_INSTALLED') { + this.extensionDialog.open(ExtensionDialogComponent, { + data: { url: err.message }, + disableClose: true, + width: '250px' + }); + } + } + }); + } + + syncSubscribe(session: Session, event) { + const subscriber: Subscriber = session.subscribe(event.stream, 'remote-vid-' + session.connection.connectionId); + this.subscribers[subscriber.stream.connection.connectionId] = { + 'subscriber': subscriber, + 'subbed': true, + 'recorder': undefined, + 'recording': false, + 'paused': false, + 'videoElement': undefined + }; + subscriber.on('videoElementCreated', (e) => { + if (!event.stream.hasVideo) { + $(e.element).css({ 'background-color': '#4d4d4d' }); + $(e.element).attr('poster', 'assets/images/volume.png'); + } + this.subscribers[subscriber.stream.connection.connectionId].videoElement = e.element; + this.updateEventList('videoElementCreated', e.element.id); + }); + subscriber.on('videoPlaying', (e) => { + this.appendSubscriberData(e.element, subscriber.stream.connection); + this.updateEventList('videoPlaying', e.element.id); + }); + subscriber.on('videoElementDestroyed', (e) => { + this.updateEventList('videoElementDestroyed', '(Subscriber)'); + }); + } + + asyncSubscribe(session: Session, event) { + session.subscribeAsync(event.stream, 'remote-vid-' + session.connection.connectionId) + .then(subscriber => { + this.subscribers[subscriber.stream.connection.connectionId] = { + 'subscriber': subscriber, + 'subbed': true, + 'recorder': undefined, + 'recording': false, + 'paused': false, + 'videoElement': undefined + }; + subscriber.on('videoElementCreated', (e) => { + if (!event.stream.hasVideo) { + $(e.element).css({ 'background-color': '#4d4d4d' }); + $(e.element).attr('poster', 'assets/images/volume.png'); + } + this.subscribers[subscriber.stream.connection.connectionId].videoElement = e.element; + this.updateEventList('videoElementCreated', e.element.id); + }); + subscriber.on('videoPlaying', (e) => { + this.appendSubscriberData(e.element, subscriber.stream.connection); + this.updateEventList('videoPlaying', e.element.id); + }); + subscriber.on('videoElementDestroyed', (e) => { + this.updateEventList('videoElementDestroyed', '(Subscriber)'); + }); + }) + .catch(err => { + console.error(err); + }); + } + + enableSpeakingEvents() { + this.session.on('publisherStartSpeaking', (event) => { + }); + + this.session.on('publisherStopSpeaking', (event) => { + }); + } + + disableSpeakingEvents() { + this.session.off('publisherStartSpeaking'); + this.session.off('publisherStopSpeaking'); + } + + initGrayVideo(): void { + this.OV.getUserMedia( + { + videoSource: undefined, + resolution: '1280x720', + frameRate: 10, + } + ) + .then((mediaStream: MediaStream) => { + const videoStreamTrack = mediaStream.getVideoTracks()[0]; + const video = document.createElement('video'); + video.srcObject = new MediaStream([videoStreamTrack]); + video.play(); + const canvas = document.createElement('canvas') as any; + const ctx = canvas.getContext('2d'); + ctx.filter = 'grayscale(100%)'; + + video.addEventListener('play', () => { + const loop = () => { + if (!video.paused && !video.ended) { + ctx.drawImage(video, 0, 0, 300, 170); + setTimeout(loop, 100); // Drawing at 10fps + } + }; + loop(); + }); + const grayVideoTrack = canvas.captureStream(30).getVideoTracks()[0]; + this.OV.initPublisher( + document.body, + { + audioSource: false, + videoSource: grayVideoTrack, + insertMode: 'APPEND' + }); + }) + .catch(error => { + console.error(error); + }); + } + } diff --git a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html index 247b3592..f968fa5b 100644 --- a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html +++ b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html @@ -11,15 +11,54 @@ +
+

Session Properties

+ + + + + + + + + + + +
Archive ModeArchive LayoutMedia Mode
+ + + {{ archiveMode }} + + + + + + {{ archiveLayout }} + + + + + + {{ mediaMode }} + + +
+
+ +
+
- - - + + + + @@ -28,9 +67,6 @@

{{token}}

-
sessionIdstokensSessionSelectionSession IDsTokens
+ + {{sid[0]}} - -
@@ -57,4 +93,4 @@
- \ No newline at end of file + 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 e7465080..ad578d39 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 @@ -2,6 +2,7 @@ import { Component, Input, OnInit, OnDestroy } from '@angular/core'; import { Subscription } from 'rxjs/Subscription'; import { OpenviduRestService } from '../../services/openvidu-rest.service'; import { OpenviduParamsService } from '../../services/openvidu-params.service'; +import { SessionProperties, ArchiveMode, ArchiveLayout, MediaMode } from 'openvidu-node-client'; import * as colormap from 'colormap'; const numColors = 64; @@ -21,8 +22,19 @@ export class TestApirestComponent implements OnInit, OnDestroy { // API REST params serverData = 'data_test'; selectedRadioIndex = 0; - selectedRole = 'PUBLISHER'; + openViduRoles = ['SUBSCRIBER', 'PUBLISHER', 'MODERATOR']; + selectedRole = 'PUBLISHER'; + + archiveModes = ['ALWAYS', 'MANUAL']; + selectedArchiveMode = 'MANUAL'; + + archiveLayouts = ['BEST_FIT']; + selectedArchiveLayout = 'BEST_FIT'; + + mediaModes = ['ROUTED']; + selectedMediaMode = 'ROUTED'; + // API REST data collected data = []; @@ -57,7 +69,12 @@ export class TestApirestComponent implements OnInit, OnDestroy { } private getSessionId() { - this.openviduRestService.getSessionId(this.openviduUrl, this.openviduSecret) + this.openviduRestService.getSessionId(this.openviduUrl, this.openviduSecret, + new SessionProperties.Builder() + .archiveMode(ArchiveMode[this.selectedArchiveMode]) + .archiveLayout(ArchiveLayout[this.selectedArchiveLayout]) + .mediaMode(MediaMode[this.selectedMediaMode]) + .build()) .then((sessionId) => { this.updateData(); }) diff --git a/openvidu-testapp/src/app/services/openvidu-rest.service.ts b/openvidu-testapp/src/app/services/openvidu-rest.service.ts index 9e42ae95..ac16f37a 100644 --- a/openvidu-testapp/src/app/services/openvidu-rest.service.ts +++ b/openvidu-testapp/src/app/services/openvidu-rest.service.ts @@ -3,7 +3,8 @@ import { OpenVidu as OpenViduAPI, Session as SessionAPI, TokenOptions as TokenOptionsAPI, - OpenViduRole as OpenViduRoleAPI + OpenViduRole as OpenViduRoleAPI, + SessionProperties as SessionPropertiesAPI } from 'openvidu-node-client'; import { environment } from '../../environments/environment'; @@ -15,9 +16,9 @@ export class OpenviduRestService { constructor() { } - getSessionId(openviduURL: string, openviduSecret: string): Promise { + getSessionId(openviduURL: string, openviduSecret: string, sessionProperties: SessionPropertiesAPI): Promise { const OV = new OpenViduAPI(openviduURL, openviduSecret); - const session = OV.createSession(); + const session = OV.createSession(sessionProperties); return new Promise(resolve => { session.getSessionId((sessionId) => { From 9971e6394bb3edf14c1df4a2bd659fc0f3f4efd0 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 17 Apr 2018 16:02:27 +0200 Subject: [PATCH 03/60] CDR recording events extended (id, hasAudio, hasVideo, size) --- .../java/io/openvidu/server/cdr/CDREvent.java | 33 +++++++++++++++++++ .../openvidu/server/cdr/CallDetailRecord.java | 25 +++++++------- .../server/core/SessionEventsHandler.java | 4 +-- 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java index 2613469d..c3ec97be 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java @@ -4,6 +4,7 @@ import org.json.simple.JSONObject; import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; +import io.openvidu.server.recording.Recording; public class CDREvent implements Comparable { @@ -25,6 +26,12 @@ public class CDREvent implements Comparable { private MediaOptions mediaOptions; private String receivingFrom; private String reason; + + // Recording events + private Long size; + private String id; + private Boolean hasAudio; + private Boolean hasVideo; public CDREvent(String eventName, CDREvent event) { this(eventName, event.participant, event.sessionId, event.mediaOptions, event.receivingFrom, event.startTime, event.reason); @@ -46,6 +53,20 @@ public class CDREvent implements Comparable { this.timeStamp = System.currentTimeMillis(); this.startTime = this.timeStamp; } + + public CDREvent(String eventName, String sessionId, Recording recording) { + this.eventName = eventName; + if ((sessionId.indexOf('/')) != -1) { + this.sessionId = sessionId.substring(sessionId.lastIndexOf('/') + 1, sessionId.length()); + } else { + this.sessionId = sessionId; + } + this.timeStamp = System.currentTimeMillis(); + this.id = recording.getId(); + this.size = recording.getSize(); + this.hasAudio = recording.hasAudio(); + this.hasVideo = recording.hasVideo(); + } public CDREvent(String eventName, Participant participant, String sessionId) { this(eventName, sessionId); @@ -106,6 +127,18 @@ public class CDREvent implements Comparable { if (this.reason != null) { json.put("reason", this.reason); } + if (this.id != null) { + json.put("id", this.id); + } + if (this.size != null) { + json.put("size", this.size); + } + if (this.hasAudio != null) { + json.put("hasAudio", this.hasAudio); + } + if (this.hasVideo != null) { + json.put("hasVideo", this.hasVideo); + } JSONObject root = new JSONObject(); root.put(this.eventName, json); diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java index 46abf5de..4d6576ac 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java @@ -11,19 +11,20 @@ import org.slf4j.LoggerFactory; import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; +import io.openvidu.server.recording.Recording; /** * CDR logger to register all information of a Session. * Enabled by property 'openvidu.cdr=true' * * - 'sessionCreated': {sessionId, timestamp} - * - 'sessionDestroyed': {sessionId, timestamp, startTime, endTime, duration } + * - 'sessionDestroyed': {sessionId, timestamp, startTime, endTime, duration, reason} * - 'participantJoined': {sessionId, timestamp, participantId} * - 'participantLeft': {sessionId, timestamp, participantId, startTime, endTime, duration, reason} - * - 'webrtcConnectionCreated' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate] } - * - 'webrtcConnectionDestroyed' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate], reason } - * - 'recordingStarted' {sessionId, timestamp} - * - 'recordingStopped' {sessionId, timestamp} + * - 'webrtcConnectionCreated' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate]} + * - 'webrtcConnectionDestroyed' {sessionId, timestamp, participantId, startTime, endTime, duration, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate], reason} + * - 'recordingStarted' {sessionId, timestamp, id, hasAudio, hasVideo, size} + * - 'recordingStopped' {sessionId, timestamp, id, hasAudio, hasVideo, size} * * PROPERTIES VALUES: * @@ -39,6 +40,10 @@ import io.openvidu.server.core.Participant; * - videoEnabled: boolean * - videoSource: "CAMERA", "SCREEN" * - videoFramerate: number + * - id: string + * - hasAudio: boolean + * - hasVideo: boolean + * - size: number * - webrtcConnectionDestroyed.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "openviduServerDestroyed" * - participantLeft.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "openviduServerDestroyed" * - sessionDestroyed.reason: "lastParticipantLeft", "openviduServerDestroyed" @@ -124,14 +129,12 @@ public class CallDetailRecord { return false; } - public void recordRecordingStarted(String sessionId) { - CDREvent recording = new CDREvent(CDREvent.RECORDING_STARTED, sessionId); - log.info("{}", recording); + public void recordRecordingStarted(String sessionId, Recording recording) { + log.info("{}", new CDREvent(CDREvent.RECORDING_STARTED, sessionId, recording)); } - public void recordRecordingStopped(String sessionId) { - CDREvent recording = new CDREvent(CDREvent.RECORDING_STOPPED, sessionId); - log.info("{}", recording); + public void recordRecordingStopped(String sessionId, Recording recording) { + log.info("{}", new CDREvent(CDREvent.RECORDING_STOPPED, sessionId, recording)); } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index 02bfc99a..d15cf16f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -326,7 +326,7 @@ public class SessionEventsHandler { public void sendRecordingStartedNotification(Session session, Recording recording) { if (openviduConfig.isCdrEnabled()) { - CDR.recordRecordingStarted(session.getSessionId()); + CDR.recordRecordingStarted(session.getSessionId(), recording); } // Filter participants by roles according to "openvidu.recording.notification" @@ -345,7 +345,7 @@ public class SessionEventsHandler { public void sendRecordingStoppedNotification(Session session, Recording recording) { if (openviduConfig.isCdrEnabled()) { - CDR.recordRecordingStopped(session.getSessionId()); + CDR.recordRecordingStopped(session.getSessionId(), recording); } // Be sure to clean this map (this should return null) From 2926c64a4e69cb101c6bfbdf7a53c9f9220db7c9 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 17 Apr 2018 16:16:53 +0200 Subject: [PATCH 04/60] Recording CDR events new property 'duration' --- .../src/main/java/io/openvidu/server/cdr/CDREvent.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java index c3ec97be..e33e1e42 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java @@ -63,6 +63,7 @@ public class CDREvent implements Comparable { } this.timeStamp = System.currentTimeMillis(); this.id = recording.getId(); + this.duration = (int) recording.getDuration(); this.size = recording.getSize(); this.hasAudio = recording.hasAudio(); this.hasVideo = recording.hasVideo(); @@ -118,12 +119,13 @@ public class CDREvent implements Comparable { json.put("receivingFrom", this.receivingFrom); } } - if (this.duration != null) { + if (this.startTime != null && this.duration != null) { json.put("startTime", this.startTime); json.put("endTime", this.timeStamp); json.put("duration", (this.timeStamp - this.startTime) / 1000); + } else if (this.duration != null) { + json.put("duration", duration); } - if (this.reason != null) { json.put("reason", this.reason); } From 14c246f00fb0bc77bb23316a834ea72023528cb3 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 10:39:39 +0200 Subject: [PATCH 05/60] "Archive" to "Recording" in openvidu-server, openvidu-java-client and openvidu-node-client --- .../io/openvidu/java/client/ArchiveMode.java | 7 ---- .../io/openvidu/java/client/OpenVidu.java | 20 +++++----- .../client/{Archive.java => Recording.java} | 10 ++--- ...rchiveLayout.java => RecordingLayout.java} | 2 +- .../openvidu/java/client/RecordingMode.java | 6 +++ .../java/io/openvidu/java/client/Session.java | 4 +- .../java/client/SessionProperties.java | 36 +++++++++--------- openvidu-node-client/lib/OpenVidu.d.ts | 10 ++--- openvidu-node-client/lib/OpenVidu.js | 22 +++++------ openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/Session.js | 4 +- openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/lib/index.d.ts | 6 +-- openvidu-node-client/lib/index.js | 6 +-- openvidu-node-client/lib/index.js.map | 2 +- openvidu-node-client/src/ArchiveMode.ts | 4 -- openvidu-node-client/src/OpenVidu.ts | 38 +++++++++---------- .../src/{Archive.ts => Recording.ts} | 8 ++-- .../{ArchiveLayout.ts => RecordingLayout.ts} | 2 +- openvidu-node-client/src/RecordingMode.ts | 4 ++ openvidu-node-client/src/Session.ts | 4 +- openvidu-node-client/src/SessionProperties.ts | 28 +++++++------- openvidu-node-client/src/index.ts | 6 +-- .../server/core/SessionEventsHandler.java | 2 +- .../kurento/core/KurentoSessionManager.java | 10 ++--- .../recording/ComposedRecordingService.java | 2 +- .../server/rest/SessionRestController.java | 24 ++++++------ .../openvidu-instance.component.ts | 2 - .../test-apirest/test-apirest.component.html | 16 ++++---- .../test-apirest/test-apirest.component.ts | 14 +++---- 30 files changed, 150 insertions(+), 153 deletions(-) delete mode 100644 openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveMode.java rename openvidu-java-client/src/main/java/io/openvidu/java/client/{Archive.java => Recording.java} (88%) rename openvidu-java-client/src/main/java/io/openvidu/java/client/{ArchiveLayout.java => RecordingLayout.java} (86%) create mode 100644 openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingMode.java delete mode 100644 openvidu-node-client/src/ArchiveMode.ts rename openvidu-node-client/src/{Archive.ts => Recording.ts} (92%) rename openvidu-node-client/src/{ArchiveLayout.ts => RecordingLayout.ts} (89%) create mode 100644 openvidu-node-client/src/RecordingMode.ts diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveMode.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveMode.java deleted file mode 100644 index 46ceae49..00000000 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.openvidu.java.client; - -public enum ArchiveMode { - ALWAYS, // The session is archived automatically (as soon as there are clients publishing streams to the session) - MANUAL; // The session is not archived automatically. To archive the session, you can call the OpenVidu.StartArchive() method -} - 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 46a4dcaa..520307fd 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 @@ -89,7 +89,7 @@ public class OpenVidu { } @SuppressWarnings("unchecked") - public Archive startRecording(String sessionId) throws OpenViduException { + public Recording startRecording(String sessionId) throws OpenViduException { try { HttpPost request = new HttpPost(this.urlOpenViduServer + API_RECORDINGS + API_RECORDINGS_START); @@ -104,7 +104,7 @@ public class OpenVidu { int statusCode = response.getStatusLine().getStatusCode(); if ((statusCode == org.apache.http.HttpStatus.SC_OK)) { - return new Archive(OpenVidu.httpResponseToJson(response)); + return new Recording(OpenVidu.httpResponseToJson(response)); } else { throw new OpenViduException(Code.RECORDING_START_ERROR_CODE, Integer.toString(statusCode)); } @@ -114,7 +114,7 @@ public class OpenVidu { } } - public Archive stopRecording(String recordingId) throws OpenViduException { + public Recording stopRecording(String recordingId) throws OpenViduException { try { HttpPost request = new HttpPost( this.urlOpenViduServer + API_RECORDINGS + API_RECORDINGS_STOP + "/" + recordingId); @@ -122,7 +122,7 @@ public class OpenVidu { int statusCode = response.getStatusLine().getStatusCode(); if ((statusCode == org.apache.http.HttpStatus.SC_OK)) { - return new Archive(OpenVidu.httpResponseToJson(response)); + return new Recording(OpenVidu.httpResponseToJson(response)); } else { throw new OpenViduException(Code.RECORDING_STOP_ERROR_CODE, Integer.toString(statusCode)); } @@ -132,14 +132,14 @@ public class OpenVidu { } } - public Archive getRecording(String recordingId) throws OpenViduException { + public Recording getRecording(String recordingId) throws OpenViduException { try { HttpGet request = new HttpGet(this.urlOpenViduServer + API_RECORDINGS + "/" + recordingId); HttpResponse response = myHttpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if ((statusCode == org.apache.http.HttpStatus.SC_OK)) { - return new Archive(OpenVidu.httpResponseToJson(response)); + return new Recording(OpenVidu.httpResponseToJson(response)); } else { throw new OpenViduException(Code.RECORDING_LIST_ERROR_CODE, Integer.toString(statusCode)); } @@ -149,20 +149,20 @@ public class OpenVidu { } @SuppressWarnings("unchecked") - public List listRecordings() throws OpenViduException { + public List listRecordings() throws OpenViduException { try { HttpGet request = new HttpGet(this.urlOpenViduServer + API_RECORDINGS); HttpResponse response = myHttpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if ((statusCode == org.apache.http.HttpStatus.SC_OK)) { - List archives = new ArrayList<>(); + List recordings = new ArrayList<>(); JSONObject json = OpenVidu.httpResponseToJson(response); JSONArray array = (JSONArray) json.get("items"); array.forEach(item -> { - archives.add(new Archive((JSONObject) item)); + recordings.add(new Recording((JSONObject) item)); }); - return archives; + return recordings; } else { throw new OpenViduException(Code.RECORDING_LIST_ERROR_CODE, Integer.toString(statusCode)); } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Archive.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java similarity index 88% rename from openvidu-java-client/src/main/java/io/openvidu/java/client/Archive.java rename to openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java index 8eb316c3..bfddc6f7 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Archive.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java @@ -2,7 +2,7 @@ package io.openvidu.java.client; import org.json.simple.JSONObject; -public class Archive { +public class Recording { public enum Status { starting, // The recording is starting (cannot be stopped) @@ -13,7 +13,7 @@ public class Archive { failed; // The recording has failed } - private Archive.Status status; + private Recording.Status status; private String id; private String name; @@ -25,7 +25,7 @@ public class Archive { private boolean hasAudio = true; private boolean hasVideo = true; - public Archive(JSONObject json) { + public Recording(JSONObject json) { this.id = (String) json.get("id"); this.name = (String) json.get("name"); this.sessionId = (String) json.get("sessionId"); @@ -35,10 +35,10 @@ public class Archive { this.url = (String) json.get("url"); this.hasAudio = (boolean) json.get("hasAudio"); this.hasVideo = (boolean) json.get("hasVideo"); - this.status = Archive.Status.valueOf((String) json.get("status")); + this.status = Recording.Status.valueOf((String) json.get("status")); } - public Archive.Status getStatus() { + public Recording.Status getStatus() { return status; } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveLayout.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java similarity index 86% rename from openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveLayout.java rename to openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java index 02b944e1..d66402f2 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/ArchiveLayout.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java @@ -1,6 +1,6 @@ package io.openvidu.java.client; -public enum ArchiveLayout { +public enum RecordingLayout { BEST_FIT, // All the videos are evenly distributed, taking up as much space as possible PICTURE_IN_PICTURE, VERTICAL_PRESENTATION, diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingMode.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingMode.java new file mode 100644 index 00000000..d4f48d09 --- /dev/null +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingMode.java @@ -0,0 +1,6 @@ +package io.openvidu.java.client; + +public enum RecordingMode { + ALWAYS, // The session is recorded automatically (as soon as there are clients publishing streams to the session) + MANUAL; // The session is not recorded automatically. To record the session, you can call the OpenVidu.startRecording() method +} diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java index 48576048..3617bdc8 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java @@ -44,8 +44,8 @@ public class Session { HttpPost request = new HttpPost(this.urlOpenViduServer + API_SESSIONS); JSONObject json = new JSONObject(); - json.put("archiveLayout", properties.archiveLayout().name()); - json.put("archiveMode", properties.archiveMode().name()); + json.put("recordingLayout", properties.recordingLayout().name()); + json.put("recordingMode", properties.recordingMode().name()); json.put("mediaMode", properties.mediaMode().name()); StringEntity params = new StringEntity(json.toString()); diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java index d493e421..98ddcc49 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java @@ -3,17 +3,17 @@ package io.openvidu.java.client; public class SessionProperties { private MediaMode mediaMode; - private ArchiveMode archiveMode; - private ArchiveLayout archiveLayout; + private RecordingMode recordingMode; + private RecordingLayout recordingLayout; public static class Builder { private MediaMode mediaMode = MediaMode.ROUTED; - private ArchiveMode archiveMode = ArchiveMode.MANUAL; - private ArchiveLayout archiveLayout = ArchiveLayout.BEST_FIT; + private RecordingMode recordingMode = RecordingMode.MANUAL; + private RecordingLayout recordingLayout = RecordingLayout.BEST_FIT; public SessionProperties build() { - return new SessionProperties(this.mediaMode, this.archiveMode, this.archiveLayout); + return new SessionProperties(this.mediaMode, this.recordingMode, this.recordingLayout); } public SessionProperties.Builder mediaMode(MediaMode mediaMode) { @@ -21,13 +21,13 @@ public class SessionProperties { return this; } - public SessionProperties.Builder archiveMode(ArchiveMode archiveMode) { - this.archiveMode = archiveMode; + public SessionProperties.Builder recordingMode(RecordingMode recordingMode) { + this.recordingMode = recordingMode; return this; } - public SessionProperties.Builder archiveLayout(ArchiveLayout archiveLayout) { - this.archiveLayout = archiveLayout; + public SessionProperties.Builder recordingLayout(RecordingLayout recordingLayout) { + this.recordingLayout = recordingLayout; return this; } @@ -35,26 +35,26 @@ public class SessionProperties { protected SessionProperties() { this.mediaMode = MediaMode.ROUTED; - this.archiveMode = ArchiveMode.MANUAL; - this.archiveLayout = ArchiveLayout.BEST_FIT; + this.recordingMode = RecordingMode.MANUAL; + this.recordingLayout = RecordingLayout.BEST_FIT; } - private SessionProperties(MediaMode mediaMode, ArchiveMode archiveMode, ArchiveLayout archiveLayout) { + private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, RecordingLayout recordingLayout) { this.mediaMode = mediaMode; - this.archiveMode = archiveMode; - this.archiveLayout = archiveLayout; + this.recordingMode = recordingMode; + this.recordingLayout = recordingLayout; } - public ArchiveMode archiveMode() { - return this.archiveMode; + public RecordingMode recordingMode() { + return this.recordingMode; } public MediaMode mediaMode() { return this.mediaMode; } - public ArchiveLayout archiveLayout() { - return this.archiveLayout; + public RecordingLayout recordingLayout() { + return this.recordingLayout; } } \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenVidu.d.ts b/openvidu-node-client/lib/OpenVidu.d.ts index 00e23861..353e719d 100644 --- a/openvidu-node-client/lib/OpenVidu.d.ts +++ b/openvidu-node-client/lib/OpenVidu.d.ts @@ -1,6 +1,6 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; -import { Archive } from "./Archive"; +import { Recording } from "./Recording"; export declare class OpenVidu { private urlOpenViduServer; private static readonly API_RECORDINGS; @@ -11,10 +11,10 @@ export declare class OpenVidu { private basicAuth; constructor(urlOpenViduServer: string, secret: string); createSession(properties?: SessionProperties): Session; - startRecording(sessionId: string): Promise; - stopRecording(recordingId: string): Promise; - getRecording(recordingId: string): Promise; - listRecordings(): Promise; + startRecording(sessionId: string): Promise; + stopRecording(recordingId: string): Promise; + getRecording(recordingId: string): Promise; + listRecordings(): Promise; deleteRecording(recordingId: string): Promise; private getBasicAuth(secret); private setHostnameAndPort(); diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index 6abb7b67..69f26808 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Session_1 = require("./Session"); -var Archive_1 = require("./Archive"); +var Recording_1 = require("./Recording"); var https = require('https'); var OpenVidu = /** @class */ (function () { function OpenVidu(urlOpenViduServer, secret) { @@ -37,8 +37,8 @@ var OpenVidu = /** @class */ (function () { }); res.on('end', function () { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive_1.Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording_1.Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status @@ -74,8 +74,8 @@ var OpenVidu = /** @class */ (function () { }); res.on('end', function () { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive_1.Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording_1.Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status @@ -111,8 +111,8 @@ var OpenVidu = /** @class */ (function () { }); res.on('end', function () { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive_1.Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording_1.Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status @@ -148,13 +148,13 @@ var OpenVidu = /** @class */ (function () { }); res.on('end', function () { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (JSON arrays of Archives in JSON format). Resolve list of new Archives - var archiveArray = []; + // SUCCESS response from openvidu-server (JSON arrays of recordings in JSON format). Resolve list of new recordings + var recordingArray = []; var responseItems = JSON.parse(body)['items']; for (var i = 0; i < responseItems.length; i++) { - archiveArray.push(new Archive_1.Archive(responseItems[i])); + recordingArray.push(new Recording_1.Recording(responseItems[i])); } - resolve(archiveArray); + resolve(recordingArray); } else { // ERROR response from openvidu-server. Resolve HTTP status diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index b3440988..12321e4b 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index 7873eec9..3e8e1863 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -23,8 +23,8 @@ var Session = /** @class */ (function () { return; } var requestBody = JSON.stringify({ - 'archiveLayout': this.properties.archiveLayout(), - 'archiveMode': this.properties.archiveMode(), + 'recordingLayout': this.properties.recordingLayout(), + 'recordingMode': this.properties.recordingMode(), 'mediaMode': this.properties.mediaMode() }); var options = { diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 6cb8dc1d..d5bef794 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/index.d.ts b/openvidu-node-client/lib/index.d.ts index c00244e2..5836b2ec 100644 --- a/openvidu-node-client/lib/index.d.ts +++ b/openvidu-node-client/lib/index.d.ts @@ -4,6 +4,6 @@ export * from './Session'; export * from './SessionProperties'; export * from './TokenOptions'; export * from './MediaMode'; -export * from './ArchiveLayout'; -export * from './ArchiveMode'; -export * from './Archive'; +export * from './RecordingLayout'; +export * from './RecordingMode'; +export * from './Recording'; diff --git a/openvidu-node-client/lib/index.js b/openvidu-node-client/lib/index.js index 754f12e6..e10bfdc1 100644 --- a/openvidu-node-client/lib/index.js +++ b/openvidu-node-client/lib/index.js @@ -9,7 +9,7 @@ __export(require("./Session")); __export(require("./SessionProperties")); __export(require("./TokenOptions")); __export(require("./MediaMode")); -__export(require("./ArchiveLayout")); -__export(require("./ArchiveMode")); -__export(require("./Archive")); +__export(require("./RecordingLayout")); +__export(require("./RecordingMode")); +__export(require("./Recording")); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/index.js.map b/openvidu-node-client/lib/index.js.map index 596dd115..72787873 100644 --- a/openvidu-node-client/lib/index.js.map +++ b/openvidu-node-client/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,yCAAoC;AACpC,oCAA+B;AAC/B,iCAA4B;AAC5B,qCAAgC;AAChC,mCAA8B;AAC9B,+BAA0B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,yCAAoC;AACpC,oCAA+B;AAC/B,iCAA4B;AAC5B,uCAAkC;AAClC,qCAAgC;AAChC,iCAA4B"} \ No newline at end of file diff --git a/openvidu-node-client/src/ArchiveMode.ts b/openvidu-node-client/src/ArchiveMode.ts deleted file mode 100644 index 41a12bf3..00000000 --- a/openvidu-node-client/src/ArchiveMode.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum ArchiveMode { - ALWAYS = 'ALWAYS', // The session is archived automatically (as soon as there are clients publishing streams to the session) - MANUAL = 'MANUAL' // The session is not archived automatically. To archive the session, you can call the OpenVidu.StartArchive() method -} diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index a450a046..453dc4c5 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -1,6 +1,6 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; -import { Archive } from "./Archive"; +import { Recording } from "./Recording"; declare const Buffer; let https = require('https'); @@ -24,8 +24,8 @@ export class OpenVidu { return new Session(this.hostname, this.port, this.basicAuth, properties); } - public startRecording(sessionId: string): Promise { - return new Promise((resolve, reject) => { + public startRecording(sessionId: string): Promise { + return new Promise((resolve, reject) => { let requestBody = JSON.stringify({ 'session': sessionId @@ -50,8 +50,8 @@ export class OpenVidu { }); res.on('end', () => { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status reject(new Error(res.statusCode)); @@ -68,8 +68,8 @@ export class OpenVidu { }); } - public stopRecording(recordingId: string): Promise { - return new Promise((resolve, reject) => { + public stopRecording(recordingId: string): Promise { + return new Promise((resolve, reject) => { let options = { hostname: this.hostname, @@ -89,8 +89,8 @@ export class OpenVidu { }); res.on('end', () => { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status reject(new Error(res.statusCode)); @@ -107,8 +107,8 @@ export class OpenVidu { }); } - public getRecording(recordingId: string): Promise { - return new Promise((resolve, reject) => { + public getRecording(recordingId: string): Promise { + return new Promise((resolve, reject) => { let options = { hostname: this.hostname, @@ -128,8 +128,8 @@ export class OpenVidu { }); res.on('end', () => { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (Archive in JSON format). Resolve new Archive - resolve(new Archive(JSON.parse(body))); + // SUCCESS response from openvidu-server (Recording in JSON format). Resolve new Recording + resolve(new Recording(JSON.parse(body))); } else { // ERROR response from openvidu-server. Resolve HTTP status reject(new Error(res.statusCode)); @@ -146,8 +146,8 @@ export class OpenVidu { }); } - public listRecordings(): Promise { - return new Promise((resolve, reject) => { + public listRecordings(): Promise { + return new Promise((resolve, reject) => { let options = { hostname: this.hostname, @@ -167,13 +167,13 @@ export class OpenVidu { }); res.on('end', () => { if (res.statusCode === 200) { - // SUCCESS response from openvidu-server (JSON arrays of Archives in JSON format). Resolve list of new Archives - let archiveArray: Archive[] = []; + // SUCCESS response from openvidu-server (JSON arrays of recordings in JSON format). Resolve list of new recordings + let recordingArray: Recording[] = []; let responseItems = JSON.parse(body)['items']; for (let i = 0; i < responseItems.length; i++) { - archiveArray.push(new Archive(responseItems[i])); + recordingArray.push(new Recording(responseItems[i])); } - resolve(archiveArray); + resolve(recordingArray); } else { // ERROR response from openvidu-server. Resolve HTTP status reject(new Error(res.statusCode)); diff --git a/openvidu-node-client/src/Archive.ts b/openvidu-node-client/src/Recording.ts similarity index 92% rename from openvidu-node-client/src/Archive.ts rename to openvidu-node-client/src/Recording.ts index 804c17ff..686852c7 100644 --- a/openvidu-node-client/src/Archive.ts +++ b/openvidu-node-client/src/Recording.ts @@ -1,4 +1,4 @@ -export class Archive { +export class Recording { private id: string; private name: string; @@ -9,7 +9,7 @@ export class Archive { private url: string; private hasaudio: boolean = true; private hasvideo: boolean = true; - private status: Archive.Status; + private status: Recording.Status; constructor(json: JSON) { this.id = json['id']; @@ -24,7 +24,7 @@ export class Archive { this.status = json['status']; } - public getStatus(): Archive.Status { + public getStatus(): Recording.Status { return this.status; } @@ -65,7 +65,7 @@ export class Archive { } } -export namespace Archive { +export namespace Recording { export enum Status { starting, // The recording is starting (cannot be stopped) started, // The recording has started and is going on diff --git a/openvidu-node-client/src/ArchiveLayout.ts b/openvidu-node-client/src/RecordingLayout.ts similarity index 89% rename from openvidu-node-client/src/ArchiveLayout.ts rename to openvidu-node-client/src/RecordingLayout.ts index 0b2525d1..999ae867 100644 --- a/openvidu-node-client/src/ArchiveLayout.ts +++ b/openvidu-node-client/src/RecordingLayout.ts @@ -1,4 +1,4 @@ -export enum ArchiveLayout { +export enum RecordingLayout { BEST_FIT = 'BEST_FIT', // All the videos are evenly distributed, taking up as much space as possible PICTURE_IN_PICTURE = 'PICTURE_IN_PICTURE', VERTICAL_PRESENTATION = 'VERTICAL_PRESENTATION', diff --git a/openvidu-node-client/src/RecordingMode.ts b/openvidu-node-client/src/RecordingMode.ts new file mode 100644 index 00000000..5085fd21 --- /dev/null +++ b/openvidu-node-client/src/RecordingMode.ts @@ -0,0 +1,4 @@ +export enum RecordingMode { + ALWAYS = 'ALWAYS', // The session is recorded automatically (as soon as there are clients publishing streams to the session) + MANUAL = 'MANUAL' // The session is not recorded automatically. To record the session, you can call the OpenVidu.startRecording() method +} diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index 5ddbe3fd..cf97cae0 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -31,8 +31,8 @@ export class Session { } let requestBody = JSON.stringify({ - 'archiveLayout': this.properties.archiveLayout(), - 'archiveMode': this.properties.archiveMode(), + 'recordingLayout': this.properties.recordingLayout(), + 'recordingMode': this.properties.recordingMode(), 'mediaMode': this.properties.mediaMode() }); diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts index 0982dbfb..610ff52f 100644 --- a/openvidu-node-client/src/SessionProperties.ts +++ b/openvidu-node-client/src/SessionProperties.ts @@ -1,21 +1,21 @@ import { MediaMode } from "./MediaMode"; -import { ArchiveMode } from "./ArchiveMode"; -import { ArchiveLayout } from "./ArchiveLayout"; +import { RecordingMode } from "./RecordingMode"; +import { RecordingLayout } from "./RecordingLayout"; export class SessionProperties { - constructor(private mediaModeProp: MediaMode, private archiveModeProp: ArchiveMode, private archiveLayoutProp: ArchiveLayout) { } + constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private recordingLayoutProp: RecordingLayout) { } mediaMode(): string { return this.mediaModeProp; } - archiveMode(): ArchiveMode { - return this.archiveModeProp; + recordingMode(): RecordingMode { + return this.recordingModeProp; } - archiveLayout(): ArchiveLayout { - return this.archiveLayoutProp; + recordingLayout(): RecordingLayout { + return this.recordingLayoutProp; } } @@ -23,11 +23,11 @@ export namespace SessionProperties { export class Builder { private mediaModeProp: MediaMode = MediaMode.ROUTED; - private archiveModeProp: ArchiveMode = ArchiveMode.MANUAL; - private archiveLayoutProp: ArchiveLayout = ArchiveLayout.BEST_FIT; + private recordingModeProp: RecordingMode = RecordingMode.MANUAL; + private recordingLayoutProp: RecordingLayout = RecordingLayout.BEST_FIT; build(): SessionProperties { - return new SessionProperties(this.mediaModeProp, this.archiveModeProp, this.archiveLayoutProp); + return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.recordingLayoutProp); } mediaMode(mediaMode: MediaMode): Builder { @@ -35,13 +35,13 @@ export namespace SessionProperties { return this; } - archiveMode(archiveMode: ArchiveMode): Builder { - this.archiveModeProp = archiveMode; + recordingMode(recordingMode: RecordingMode): Builder { + this.recordingModeProp = recordingMode; return this; } - archiveLayout(archiveLayout: ArchiveLayout): Builder { - this.archiveLayoutProp = archiveLayout; + recordingLayout(recordingLayout: RecordingLayout): Builder { + this.recordingLayoutProp = recordingLayout; return this; } }; diff --git a/openvidu-node-client/src/index.ts b/openvidu-node-client/src/index.ts index da5f1d6d..0a5ed785 100644 --- a/openvidu-node-client/src/index.ts +++ b/openvidu-node-client/src/index.ts @@ -4,6 +4,6 @@ export * from './Session'; export * from './SessionProperties'; export * from './TokenOptions'; export * from './MediaMode'; -export * from './ArchiveLayout'; -export * from './ArchiveMode'; -export * from './Archive'; \ No newline at end of file +export * from './RecordingLayout'; +export * from './RecordingMode'; +export * from './Recording'; \ No newline at end of file diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index d15cf16f..1306bf5d 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -356,7 +356,7 @@ public class SessionEventsHandler { try { existingParticipants = session.getParticipants(); } catch (OpenViduException exception) { - // Session is already closed. This happens when ArchiveMode.ALWAYS and last + // Session is already closed. This happens when RecordingMode.ALWAYS and last // participant has left the session. No notification needs to be sent log.warn("Session already closed when trying to send 'recordingStopped' notification"); return; diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index e4b80bb0..dab9c44c 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -18,8 +18,8 @@ import com.google.gson.JsonSyntaxException; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; import io.openvidu.client.internal.ProtocolElements; -import io.openvidu.java.client.ArchiveLayout; -import io.openvidu.java.client.ArchiveMode; +import io.openvidu.java.client.RecordingLayout; +import io.openvidu.java.client.RecordingMode; import io.openvidu.java.client.MediaMode; import io.openvidu.java.client.SessionProperties; import io.openvidu.server.core.SessionManager; @@ -55,7 +55,7 @@ public class KurentoSessionManager extends SessionManager { SessionProperties properties = sessionProperties.get(sessionId); if (properties == null && this.isInsecureParticipant(participant.getParticipantPrivateId())) { properties = new SessionProperties.Builder().mediaMode(MediaMode.ROUTED) - .archiveMode(ArchiveMode.ALWAYS).archiveLayout(ArchiveLayout.BEST_FIT).build(); + .recordingMode(RecordingMode.ALWAYS).recordingLayout(RecordingLayout.BEST_FIT).build(); } createSession(kcSessionInfo, properties); } @@ -153,7 +153,7 @@ public class KurentoSessionManager extends SessionManager { } else if (remainingParticipants.size() == 1 && openviduConfig.isRecordingModuleEnabled() && MediaMode.ROUTED.equals(session.getSessionProperties().mediaMode()) - && ArchiveMode.ALWAYS.equals(session.getSessionProperties().archiveMode()) + && RecordingMode.ALWAYS.equals(session.getSessionProperties().recordingMode()) && ProtocolElements.RECORDER_PARTICIPANT_PUBLICID .equals(remainingParticipants.iterator().next().getParticipantPublicId())) { @@ -230,7 +230,7 @@ public class KurentoSessionManager extends SessionManager { if (this.openviduConfig.isRecordingModuleEnabled() && MediaMode.ROUTED.equals(session.getSessionProperties().mediaMode()) - && ArchiveMode.ALWAYS.equals(session.getSessionProperties().archiveMode()) + && RecordingMode.ALWAYS.equals(session.getSessionProperties().recordingMode()) && !recordingService.sessionIsBeingRecorded(session.getSessionId()) && session.getActivePublishers() == 0) { recordingService.startRecording(session); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index 637f8354..e9d4556a 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -105,7 +105,7 @@ public class ComposedRecordingService { } String location = OpenViduServer.publicUrl.replaceFirst("wss://", ""); - String layoutUrl = session.getSessionProperties().archiveLayout().name().toLowerCase().replaceAll("_", "-"); + String layoutUrl = session.getSessionProperties().recordingLayout().name().toLowerCase().replaceAll("_", "-"); envs.add("URL=https://OPENVIDUAPP:" + secret + "@" + location + "/#/layout-" + layoutUrl + "/" + shortSessionId + "/" + secret); diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index fa0dbded..3637be28 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -35,8 +35,8 @@ import org.springframework.web.bind.annotation.RestController; import io.openvidu.client.OpenViduException; import io.openvidu.client.internal.ProtocolElements; -import io.openvidu.java.client.ArchiveLayout; -import io.openvidu.java.client.ArchiveMode; +import io.openvidu.java.client.RecordingLayout; +import io.openvidu.java.client.RecordingMode; import io.openvidu.java.client.MediaMode; import io.openvidu.java.client.SessionProperties; import io.openvidu.server.core.ParticipantRole; @@ -71,26 +71,26 @@ public class SessionRestController { SessionProperties.Builder builder = new SessionProperties.Builder(); if (params != null) { - String archiveModeString = (String) params.get("archiveMode"); - String archiveLayoutString = (String) params.get("archiveLayout"); + String recordingModeString = (String) params.get("recordingMode"); + String recordingLayoutString = (String) params.get("recordingLayout"); String mediaModeString = (String) params.get("mediaMode"); try { - if (archiveModeString != null) { - ArchiveMode archiveMode = ArchiveMode.valueOf(archiveModeString); - builder = builder.archiveMode(archiveMode); + if (recordingModeString != null) { + RecordingMode recordingMode = RecordingMode.valueOf(recordingModeString); + builder = builder.recordingMode(recordingMode); } - if (archiveLayoutString != null) { - ArchiveLayout archiveLayout = ArchiveLayout.valueOf(archiveLayoutString); - builder = builder.archiveLayout(archiveLayout); + if (recordingLayoutString != null) { + RecordingLayout recordingLayout = RecordingLayout.valueOf(recordingLayoutString); + builder = builder.recordingLayout(recordingLayout); } if (mediaModeString != null) { MediaMode mediaMode = MediaMode.valueOf(mediaModeString); builder = builder.mediaMode(mediaMode); } } catch (IllegalArgumentException e) { - return this.generateErrorResponse("ArchiveMode " + params.get("archiveMode") + " | " + "ArchiveLayout " - + params.get("archiveLayout") + " | " + "MediaMode " + params.get("mediaMode") + return this.generateErrorResponse("RecordingMode " + params.get("recordingMode") + " | " + "RecordingLayout " + + params.get("recordingLayout") + " | " + "MediaMode " + params.get("mediaMode") + " are not defined", "/api/tokens", HttpStatus.BAD_REQUEST); } } 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 188f2b62..1b1252f2 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 @@ -689,12 +689,10 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { /*session.on('publisherStartSpeaking', (event) => { console.log('Publisher start speaking'); - console.log(event); }); session.on('publisherStopSpeaking', (event) => { console.log('Publisher stop speaking'); - console.log(event); });*/ } diff --git a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html index f968fa5b..7ba4644d 100644 --- a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html +++ b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html @@ -15,22 +15,22 @@

Session Properties

- - + + 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 ad578d39..cc80c540 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 @@ -2,7 +2,7 @@ import { Component, Input, OnInit, OnDestroy } from '@angular/core'; import { Subscription } from 'rxjs/Subscription'; import { OpenviduRestService } from '../../services/openvidu-rest.service'; import { OpenviduParamsService } from '../../services/openvidu-params.service'; -import { SessionProperties, ArchiveMode, ArchiveLayout, MediaMode } from 'openvidu-node-client'; +import { SessionProperties, RecordingMode, RecordingLayout, MediaMode } from 'openvidu-node-client'; import * as colormap from 'colormap'; const numColors = 64; @@ -26,11 +26,11 @@ export class TestApirestComponent implements OnInit, OnDestroy { openViduRoles = ['SUBSCRIBER', 'PUBLISHER', 'MODERATOR']; selectedRole = 'PUBLISHER'; - archiveModes = ['ALWAYS', 'MANUAL']; - selectedArchiveMode = 'MANUAL'; + recordingModes = ['ALWAYS', 'MANUAL']; + selectedRecordingMode = 'MANUAL'; - archiveLayouts = ['BEST_FIT']; - selectedArchiveLayout = 'BEST_FIT'; + recordingLayouts = ['BEST_FIT']; + selectedRecordingLayout = 'BEST_FIT'; mediaModes = ['ROUTED']; selectedMediaMode = 'ROUTED'; @@ -71,8 +71,8 @@ export class TestApirestComponent implements OnInit, OnDestroy { private getSessionId() { this.openviduRestService.getSessionId(this.openviduUrl, this.openviduSecret, new SessionProperties.Builder() - .archiveMode(ArchiveMode[this.selectedArchiveMode]) - .archiveLayout(ArchiveLayout[this.selectedArchiveLayout]) + .recordingMode(RecordingMode[this.selectedRecordingMode]) + .recordingLayout(RecordingLayout[this.selectedRecordingLayout]) .mediaMode(MediaMode[this.selectedMediaMode]) .build()) .then((sessionId) => { From a34e6db9021974fbdb03f4a6f3be9ac392afdb32 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 10:56:28 +0200 Subject: [PATCH 06/60] openvidu-node.client promisified (Session.getSessionId, Session.generateToken) --- openvidu-node-client/lib/Session.d.ts | 5 +- openvidu-node-client/lib/Session.js | 177 +++++++++-------- openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/src/Session.ts | 188 +++++++++--------- .../src/app/services/openvidu-rest.service.ts | 28 ++- 5 files changed, 204 insertions(+), 196 deletions(-) diff --git a/openvidu-node-client/lib/Session.d.ts b/openvidu-node-client/lib/Session.d.ts index 4494ea68..8b35c511 100644 --- a/openvidu-node-client/lib/Session.d.ts +++ b/openvidu-node-client/lib/Session.d.ts @@ -9,8 +9,7 @@ export declare class Session { private sessionId; private properties; constructor(hostname: string, port: number, basicAuth: string, properties?: SessionProperties); - getSessionId(callback: Function): void; - generateToken(callback: Function): any; - generateToken(tokenOptions: TokenOptions, callback: Function): any; + getSessionId(): Promise; + generateToken(tokenOptions?: TokenOptions): Promise; getProperties(): SessionProperties; } diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index 3e8e1863..fc1b66d8 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -16,104 +16,107 @@ var Session = /** @class */ (function () { this.properties = properties; } } - Session.prototype.getSessionId = function (callback) { + Session.prototype.getSessionId = function () { var _this = this; - if (this.sessionId) { - callback(this.sessionId); - return; - } - var requestBody = JSON.stringify({ - 'recordingLayout': this.properties.recordingLayout(), - 'recordingMode': this.properties.recordingMode(), - 'mediaMode': this.properties.mediaMode() - }); - var options = { - hostname: this.hostname, - port: this.port, - path: Session.API_SESSIONS, - method: 'POST', - headers: { - 'Authorization': this.basicAuth, - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(requestBody) + return new Promise(function (resolve, reject) { + if (_this.sessionId) { + resolve(_this.sessionId); } - }; - var req = https.request(options, function (res) { - var body = ''; - res.on('data', function (d) { - // Continuously update stream with data - body += d; + var requestBody = JSON.stringify({ + 'recordingLayout': _this.properties.recordingLayout(), + 'recordingMode': _this.properties.recordingMode(), + 'mediaMode': _this.properties.mediaMode() }); - res.on('end', function () { - if (res.statusCode === 200) { - // SUCCESS response from openvidu-server. Resolve sessionId - var parsed = JSON.parse(body); - _this.sessionId = parsed.id; - callback(parsed.id); - } - else { - // ERROR response from openvidu-server. Resolve HTTP status - console.error(res.statusCode); + var options = { + hostname: _this.hostname, + port: _this.port, + path: Session.API_SESSIONS, + method: 'POST', + headers: { + 'Authorization': _this.basicAuth, + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) } + }; + var req = https.request(options, function (res) { + var body = ''; + res.on('data', function (d) { + // Continuously update stream with data + body += d; + }); + res.on('end', function () { + if (res.statusCode === 200) { + // SUCCESS response from openvidu-server. Resolve sessionId + var parsed = JSON.parse(body); + _this.sessionId = parsed.id; + resolve(parsed.id); + } + else { + // ERROR response from openvidu-server. Resolve HTTP status + reject(new Error(res.statusCode)); + } + }); }); + req.on('error', function (e) { + reject(e); + }); + req.write(requestBody); + req.end(); }); - req.on('error', function (e) { - console.error(e); - }); - req.write(requestBody); - req.end(); }; - Session.prototype.generateToken = function (tokenOptions, callback) { - var requestBody; - if (callback) { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': tokenOptions.getRole(), - 'data': tokenOptions.getData() - }); - } - else { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': OpenViduRole_1.OpenViduRole.PUBLISHER, - 'data': '' - }); - callback = tokenOptions; - } - var options = { - hostname: this.hostname, - port: this.port, - path: Session.API_TOKENS, - method: 'POST', - headers: { - 'Authorization': this.basicAuth, - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(requestBody) + Session.prototype.generateToken = function (tokenOptions) { + var _this = this; + return new Promise(function (resolve, reject) { + var requestBody; + if (!!tokenOptions) { + requestBody = JSON.stringify({ + 'session': _this.sessionId, + 'role': tokenOptions.getRole(), + 'data': tokenOptions.getData() + }); } - }; - var req = https.request(options, function (res) { - var body = ''; - res.on('data', function (d) { - // Continuously update stream with data - body += d; - }); - res.on('end', function () { - if (res.statusCode === 200) { - // SUCCESS response from openvidu-server. Resolve token - var parsed = JSON.parse(body); - callback(parsed.id); - } - else { - // ERROR response from openvidu-server. Resolve HTTP status - console.error(res.statusCode); + else { + requestBody = JSON.stringify({ + 'session': _this.sessionId, + 'role': OpenViduRole_1.OpenViduRole.PUBLISHER, + 'data': '' + }); + } + var options = { + hostname: _this.hostname, + port: _this.port, + path: Session.API_TOKENS, + method: 'POST', + headers: { + 'Authorization': _this.basicAuth, + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) } + }; + var req = https.request(options, function (res) { + var body = ''; + res.on('data', function (d) { + // Continuously update stream with data + body += d; + }); + res.on('end', function () { + if (res.statusCode === 200) { + // SUCCESS response from openvidu-server. Resolve token + var parsed = JSON.parse(body); + resolve(parsed.id); + } + else { + // ERROR response from openvidu-server. Resolve HTTP status + reject(new Error(res.statusCode)); + } + }); }); + req.on('error', function (e) { + reject(e); + }); + req.write(requestBody); + req.end(); }); - req.on('error', function (e) { - console.error(e); - }); - req.write(requestBody); - req.end(); }; Session.prototype.getProperties = function () { return this.properties; diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index d5bef794..44cce3c3 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":";;AACA,+CAA8C;AAC9C,yDAAwD;AAKxD,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7B;IAQI,iBAAoB,QAAgB,EAAU,IAAY,EAAU,SAAiB,EAAE,UAA8B;QAAjG,aAAQ,GAAR,QAAQ,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAAU,cAAS,GAAT,SAAS,CAAQ;QAH7E,cAAS,GAAW,EAAE,CAAC;QAI3B,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,qCAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9D,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;IACL,CAAC;IAEM,8BAAY,GAAnB,UAAoB,QAAkB;QAAtC,iBAgDC;QA9CG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,CAAC;QACX,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;YACpD,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;YAChD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;SAC3C,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,OAAO,CAAC,YAAY;YAC1B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,eAAe,EAAE,IAAI,CAAC,SAAS;gBAC/B,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;aACnD;SACJ,CAAA;QACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;YACnC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;gBACb,uCAAuC;gBACvC,IAAI,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;gBACV,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;oBACzB,2DAA2D;oBAC3D,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,KAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACJ,2DAA2D;oBAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACvB,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC;IAKM,+BAAa,GAApB,UAAqB,YAAiB,EAAE,QAAc;QAClD,IAAI,WAAW,CAAC;QAEhB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACX,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE;gBAC9B,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE;aACjC,CAAC,CAAC;QACP,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,2BAAY,CAAC,SAAS;gBAC9B,MAAM,EAAE,EAAE;aACb,CAAC,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,GAAG;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,eAAe,EAAE,IAAI,CAAC,SAAS;gBAC/B,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;aACnD;SACJ,CAAC;QACF,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;YACnC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;gBACb,uCAAuC;gBACvC,IAAI,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;gBACV,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;oBACzB,uDAAuD;oBACvD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACJ,2DAA2D;oBAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACvB,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC;IAEM,+BAAa,GAApB;QACI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IA3HuB,oBAAY,GAAW,eAAe,CAAC;IACvC,kBAAU,GAAW,aAAa,CAAC;IA4H/D,cAAC;CAAA,AA/HD,IA+HC;AA/HY,0BAAO"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index cf97cae0..7316e42a 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -23,111 +23,111 @@ export class Session { } } - public getSessionId(callback: Function) { + public getSessionId(): Promise { + return new Promise((resolve, reject) => { - if (this.sessionId) { - callback(this.sessionId); - return; - } - - let requestBody = JSON.stringify({ - 'recordingLayout': this.properties.recordingLayout(), - 'recordingMode': this.properties.recordingMode(), - 'mediaMode': this.properties.mediaMode() - }); - - let options = { - hostname: this.hostname, - port: this.port, - path: Session.API_SESSIONS, - method: 'POST', - headers: { - 'Authorization': this.basicAuth, - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(requestBody) + if (this.sessionId) { + resolve(this.sessionId); } - } - const req = https.request(options, (res) => { - let body = ''; - res.on('data', (d) => { - // Continuously update stream with data - body += d; - }); - res.on('end', () => { - if (res.statusCode === 200) { - // SUCCESS response from openvidu-server. Resolve sessionId - let parsed = JSON.parse(body); - this.sessionId = parsed.id; - callback(parsed.id); - } else { - // ERROR response from openvidu-server. Resolve HTTP status - console.error(res.statusCode); - } - }); - }); - req.on('error', (e) => { - console.error(e); + let requestBody = JSON.stringify({ + 'recordingLayout': this.properties.recordingLayout(), + 'recordingMode': this.properties.recordingMode(), + 'mediaMode': this.properties.mediaMode() + }); + + let options = { + hostname: this.hostname, + port: this.port, + path: Session.API_SESSIONS, + method: 'POST', + headers: { + 'Authorization': this.basicAuth, + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) + } + } + const req = https.request(options, (res) => { + let body = ''; + res.on('data', (d) => { + // Continuously update stream with data + body += d; + }); + res.on('end', () => { + if (res.statusCode === 200) { + // SUCCESS response from openvidu-server. Resolve sessionId + let parsed = JSON.parse(body); + this.sessionId = parsed.id; + resolve(parsed.id); + } else { + // ERROR response from openvidu-server. Resolve HTTP status + reject(new Error(res.statusCode)); + } + }); + }); + + req.on('error', (e) => { + reject(e); + }); + req.write(requestBody); + req.end(); }); - req.write(requestBody); - req.end(); } - public generateToken(callback: Function); - public generateToken(tokenOptions: TokenOptions, callback: Function); + public generateToken(tokenOptions?: TokenOptions): Promise { + return new Promise((resolve, reject) => { - public generateToken(tokenOptions: any, callback?: any) { - let requestBody; + let requestBody; - if (callback) { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': tokenOptions.getRole(), - 'data': tokenOptions.getData() - }); - } else { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': OpenViduRole.PUBLISHER, - 'data': '' - }); - callback = tokenOptions; - } - - let options = { - hostname: this.hostname, - port: this.port, - path: Session.API_TOKENS, - method: 'POST', - headers: { - 'Authorization': this.basicAuth, - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(requestBody) + if (!!tokenOptions) { + requestBody = JSON.stringify({ + 'session': this.sessionId, + 'role': tokenOptions.getRole(), + 'data': tokenOptions.getData() + }); + } else { + requestBody = JSON.stringify({ + 'session': this.sessionId, + 'role': OpenViduRole.PUBLISHER, + 'data': '' + }); } - }; - const req = https.request(options, (res) => { - let body = ''; - res.on('data', (d) => { - // Continuously update stream with data - body += d; - }); - res.on('end', () => { - if (res.statusCode === 200) { - // SUCCESS response from openvidu-server. Resolve token - let parsed = JSON.parse(body); - callback(parsed.id); - } else { - // ERROR response from openvidu-server. Resolve HTTP status - console.error(res.statusCode); - } - }); - }); - req.on('error', (e) => { - console.error(e); + let options = { + hostname: this.hostname, + port: this.port, + path: Session.API_TOKENS, + method: 'POST', + headers: { + 'Authorization': this.basicAuth, + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) + } + }; + const req = https.request(options, (res) => { + let body = ''; + res.on('data', (d) => { + // Continuously update stream with data + body += d; + }); + res.on('end', () => { + if (res.statusCode === 200) { + // SUCCESS response from openvidu-server. Resolve token + let parsed = JSON.parse(body); + resolve(parsed.id); + } else { + // ERROR response from openvidu-server. Resolve HTTP status + reject(new Error(res.statusCode)); + } + }); + }); + + req.on('error', (e) => { + reject(e); + }); + req.write(requestBody); + req.end(); }); - req.write(requestBody); - req.end(); } public getProperties(): SessionProperties { diff --git a/openvidu-testapp/src/app/services/openvidu-rest.service.ts b/openvidu-testapp/src/app/services/openvidu-rest.service.ts index ac16f37a..56a2ebb5 100644 --- a/openvidu-testapp/src/app/services/openvidu-rest.service.ts +++ b/openvidu-testapp/src/app/services/openvidu-rest.service.ts @@ -20,12 +20,15 @@ export class OpenviduRestService { const OV = new OpenViduAPI(openviduURL, openviduSecret); const session = OV.createSession(sessionProperties); - return new Promise(resolve => { - session.getSessionId((sessionId) => { - this.sessionIdSession.set(sessionId, session); - this.sessionIdTokenOpenViduRole.set(sessionId, new Map()); - resolve(sessionId); - }); + return new Promise((resolve, reject) => { + session.getSessionId() + .then(sessionId => { + this.sessionIdSession.set(sessionId, session); + this.sessionIdTokenOpenViduRole.set(sessionId, new Map()); + resolve(sessionId); + }).catch(error => { + reject(error); + }); }); } @@ -33,15 +36,18 @@ export class OpenviduRestService { const session: SessionAPI = this.sessionIdSession.get(sessionId); const OVRole: OpenViduRoleAPI = OpenViduRoleAPI[role]; - return new Promise(resolve => { + return new Promise((resolve, reject) => { const tokenOptions: TokenOptionsAPI = new TokenOptionsAPI.Builder() .role(OVRole) .data(serverData) .build(); - session.generateToken(tokenOptions, (token) => { - this.sessionIdTokenOpenViduRole.get(sessionId).set(token, OVRole); - resolve(token); - }); + session.generateToken(tokenOptions) + .then(token => { + this.sessionIdTokenOpenViduRole.get(sessionId).set(token, OVRole); + resolve(token); + }).catch(error => { + reject(error); + }); }); } From 766f8e961e0c5e57ea460e0bfc70c46081423c88 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 14:21:43 +0200 Subject: [PATCH 07/60] openvidu-server Recording.name --- .../docker/openvidu-recording/entrypoint.sh | 21 ++-- .../java/io/openvidu/server/cdr/CDREvent.java | 5 + .../openvidu/server/cdr/CallDetailRecord.java | 5 +- .../server/core/SessionEventsHandler.java | 2 + .../kurento/core/KurentoSessionManager.java | 2 +- .../recording/ComposedRecordingService.java | 98 +++++++++++-------- .../openvidu/server/recording/Recording.java | 2 +- .../server/rest/SessionRestController.java | 3 +- 8 files changed, 81 insertions(+), 57 deletions(-) diff --git a/openvidu-server/docker/openvidu-recording/entrypoint.sh b/openvidu-server/docker/openvidu-recording/entrypoint.sh index 8fcc45ab..df3cc40c 100755 --- a/openvidu-server/docker/openvidu-recording/entrypoint.sh +++ b/openvidu-server/docker/openvidu-recording/entrypoint.sh @@ -13,6 +13,7 @@ RESOLUTION="${RESOLUTION:-1920x1080}" FRAMERATE="${FRAMERATE:-24}" VIDEO_SIZE="$RESOLUTION" ARRAY=(${VIDEO_SIZE//x/ }) +VIDEO_ID="${VIDEO_ID:-video}" VIDEO_NAME="${VIDEO_NAME:-video}" VIDEO_FORMAT="${VIDEO_FORMAT:-mp4}" RECORDING_JSON="'${RECORDING_JSON}'" @@ -21,9 +22,9 @@ RECORDING_JSON="'${RECORDING_JSON}'" ### Store Recording json data ### if [[ $CURRENT_UID != $USER_ID ]]; then - su myuser -c "echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_NAME}" + su myuser -c "echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_ID}" else - echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_NAME} + echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_ID} fi @@ -87,9 +88,9 @@ fi ### Generate video report file ### if [[ $CURRENT_UID != $USER_ID ]]; then - su myuser -c "ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_NAME}.info" + su myuser -c "ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_ID}.info" else - ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_NAME}.info + ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_ID}.info fi @@ -97,8 +98,8 @@ fi if [[ $CURRENT_UID != $USER_ID ]]; then - TMP=$(su myuser -c "mktemp /recordings/.${VIDEO_NAME}.XXXXXXXXXXXXXXXXXXXXXXX.if.json") - INFO=$(su myuser -c "cat /recordings/${VIDEO_NAME}.info | jq '.'") + TMP=$(su myuser -c "mktemp /recordings/.${VIDEO_ID}.XXXXXXXXXXXXXXXXXXXXXXX.if.json") + INFO=$(su myuser -c "cat /recordings/${VIDEO_ID}.info | jq '.'") HAS_AUDIO_AUX=$(su myuser -c "echo '$INFO' | jq '.streams[] | select(.codec_type == \"audio\")'") if [ -z "$HAS_AUDIO_AUX" ]; then HAS_AUDIO=false; else HAS_AUDIO=true; fi HAS_VIDEO_AUX=$(su myuser -c "echo '$INFO' | jq '.streams[] | select(.codec_type == \"video\")'") @@ -107,12 +108,12 @@ if [[ $CURRENT_UID != $USER_ID ]]; then DURATION=$(su myuser -c "echo '$INFO' | jq '.format.duration | tonumber'") STATUS="stopped" - su myuser -c "jq -c -r \".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\\\"${STATUS}\\\"\" \"/recordings/.recording.${VIDEO_NAME}\" > ${TMP} && mv ${TMP} \"/recordings/.recording.${VIDEO_NAME}\"" + su myuser -c "jq -c -r \".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\\\"${STATUS}\\\"\" \"/recordings/.recording.${VIDEO_ID}\" > ${TMP} && mv ${TMP} \"/recordings/.recording.${VIDEO_ID}\"" else - TMP=$(mktemp /recordings/.${VIDEO_NAME}.XXXXXXXXXXXXXXXXXXXXXXX.else.json) - INFO=$(cat /recordings/${VIDEO_NAME}.info | jq '.') + TMP=$(mktemp /recordings/.${VIDEO_ID}.XXXXXXXXXXXXXXXXXXXXXXX.else.json) + INFO=$(cat /recordings/${VIDEO_ID}.info | jq '.') HAS_AUDIO_AUX=$(echo "$INFO" | jq '.streams[] | select(.codec_type == "audio")') if [ -z "$HAS_AUDIO_AUX" ]; then HAS_AUDIO=false; else HAS_AUDIO=true; fi HAS_VIDEO_AUX=$(echo "$INFO" | jq '.streams[] | select(.codec_type == "video")') @@ -121,7 +122,7 @@ else DURATION=$(echo "$INFO" | jq '.format.duration | tonumber') STATUS="stopped" - jq -c -r ".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\"${STATUS}\"" "/recordings/.recording.${VIDEO_NAME}" > ${TMP} && mv ${TMP} "/recordings/.recording.${VIDEO_NAME}" + jq -c -r ".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\"${STATUS}\"" "/recordings/.recording.${VIDEO_ID}" > ${TMP} && mv ${TMP} "/recordings/.recording.${VIDEO_ID}" fi diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java index e33e1e42..2fbd2212 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java @@ -30,6 +30,7 @@ public class CDREvent implements Comparable { // Recording events private Long size; private String id; + private String name; private Boolean hasAudio; private Boolean hasVideo; @@ -63,6 +64,7 @@ public class CDREvent implements Comparable { } this.timeStamp = System.currentTimeMillis(); this.id = recording.getId(); + this.name = recording.getName(); this.duration = (int) recording.getDuration(); this.size = recording.getSize(); this.hasAudio = recording.hasAudio(); @@ -132,6 +134,9 @@ public class CDREvent implements Comparable { if (this.id != null) { json.put("id", this.id); } + if (this.name != null) { + json.put("name", this.name); + } if (this.size != null) { json.put("size", this.size); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java index 4d6576ac..2a9a62a9 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java @@ -23,8 +23,8 @@ import io.openvidu.server.recording.Recording; * - 'participantLeft': {sessionId, timestamp, participantId, startTime, endTime, duration, reason} * - 'webrtcConnectionCreated' {sessionId, timestamp, participantId, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate]} * - 'webrtcConnectionDestroyed' {sessionId, timestamp, participantId, startTime, endTime, duration, connection, [receivingFrom], audioEnabled, videoEnabled, [videoSource], [videoFramerate], reason} - * - 'recordingStarted' {sessionId, timestamp, id, hasAudio, hasVideo, size} - * - 'recordingStopped' {sessionId, timestamp, id, hasAudio, hasVideo, size} + * - 'recordingStarted' {sessionId, timestamp, id, name, hasAudio, hasVideo, size} + * - 'recordingStopped' {sessionId, timestamp, id, name, hasAudio, hasVideo, size} * * PROPERTIES VALUES: * @@ -41,6 +41,7 @@ import io.openvidu.server.recording.Recording; * - videoSource: "CAMERA", "SCREEN" * - videoFramerate: number * - id: string + * - name: string * - hasAudio: boolean * - hasVideo: boolean * - size: number diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index 1306bf5d..55fb79b6 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -335,6 +335,7 @@ public class SessionEventsHandler { JsonObject params = new JsonObject(); params.addProperty(ProtocolElements.RECORDINGSTARTED_ID_PARAM, recording.getId()); + params.addProperty(ProtocolElements.RECORDINGSTARTED_NAME_PARAM, recording.getName()); for (Participant p : filteredParticipants) { rpcNotificationService.sendNotification(p.getParticipantPrivateId(), @@ -366,6 +367,7 @@ public class SessionEventsHandler { JsonObject params = new JsonObject(); params.addProperty(ProtocolElements.RECORDINGSTOPPED_ID_PARAM, recording.getId()); + params.addProperty(ProtocolElements.RECORDINGSTARTED_NAME_PARAM, recording.getName()); for (Participant p : filteredParticipants) { rpcNotificationService.sendNotification(p.getParticipantPrivateId(), diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index dab9c44c..483df48a 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -233,7 +233,7 @@ public class KurentoSessionManager extends SessionManager { && RecordingMode.ALWAYS.equals(session.getSessionProperties().recordingMode()) && !recordingService.sessionIsBeingRecorded(session.getSessionId()) && session.getActivePublishers() == 0) { - recordingService.startRecording(session); + recordingService.startRecording(session, null); } session.newPublisher(participant); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index e9d4556a..bb196ff6 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -60,7 +60,7 @@ public class ComposedRecordingService { @Autowired OpenviduConfig openviduConfig; - + @Autowired private SessionEventsHandler sessionHandler; @@ -81,14 +81,19 @@ public class ComposedRecordingService { this.dockerClient = DockerClientBuilder.getInstance(config).build(); } - public Recording startRecording(Session session) { + public Recording startRecording(Session session, String name) { List envs = new ArrayList<>(); String shortSessionId = session.getSessionId().substring(session.getSessionId().lastIndexOf('/') + 1, session.getSessionId().length()); String recordingId = this.getFreeRecordingId(session.getSessionId(), shortSessionId); String secret = openviduConfig.getOpenViduSecret(); - Recording recording = new Recording(session.getSessionId(), recordingId, recordingId); + if (name == null || name.isEmpty()) { + // No name provided for the recording file + name = recordingId; + } + + Recording recording = new Recording(session.getSessionId(), recordingId, name); this.sessionsRecordings.put(session.getSessionId(), recording); this.sessionHandler.setRecordingStarted(session.getSessionId(), recording); @@ -111,7 +116,8 @@ public class ComposedRecordingService { + "/" + secret); envs.add("RESOLUTION=1920x1080"); envs.add("FRAMERATE=30"); - envs.add("VIDEO_NAME=" + recordingId); + envs.add("VIDEO_ID=" + recordingId); + envs.add("VIDEO_NAME=" + name); envs.add("VIDEO_FORMAT=mp4"); envs.add("USER_ID=" + uid); envs.add("RECORDING_JSON=" + recording.toJson().toJSONString()); @@ -122,7 +128,7 @@ public class ComposedRecordingService { String containerId = this.runRecordingContainer(envs, "recording_" + recordingId); - this.waitForVideoFileNotEmpty(recordingId); + this.waitForVideoFileNotEmpty(name); this.sessionsContainers.put(session.getSessionId(), containerId); @@ -174,7 +180,7 @@ public class ComposedRecordingService { // Update recording attributes reading from video report file try { RecordingInfoUtils infoUtils = new RecordingInfoUtils( - this.openviduConfig.getOpenViduRecordingPath() + recording.getName() + ".info"); + this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + ".info"); if (openviduConfig.getOpenViduRecordingPublicAccess()) { recording.setStatus(Recording.Status.available); @@ -194,9 +200,9 @@ public class ComposedRecordingService { throw new OpenViduException(Code.RECORDING_REPORT_ERROR_CODE, "There was an error generating the metadata report file for the recording"); } - + this.sessionHandler.sendRecordingStoppedNotification(session, recording); - + return recording; } @@ -282,7 +288,7 @@ public class ComposedRecordingService { } public Collection getAllRecordings() { - return this.getRecordingEntitiesFromHost(); + return this.getAllRecordingsFromHost(); } public Collection getStartingRecordings() { @@ -294,7 +300,7 @@ public class ComposedRecordingService { } public Collection getFinishedRecordings() { - return this.getRecordingEntitiesFromHost().stream() + return this.getAllRecordingsFromHost().stream() .filter(recording -> (recording.getStatus().equals(Recording.Status.stopped) || recording.getStatus().equals(Recording.Status.available))) .collect(Collectors.toSet()); @@ -319,6 +325,36 @@ public class ComposedRecordingService { } } + private Recording getRecordingFromHost(String recordingId) { + File file = new File(this.openviduConfig.getOpenViduRecordingPath() + RECORDING_ENTITY_FILE + recordingId); + return this.getRecordingFromEntityFile(file); + } + + private Set getAllRecordingsFromHost() { + File folder = new File(this.openviduConfig.getOpenViduRecordingPath()); + File[] files = folder.listFiles(); + + if (files == null) { + files = initRecordingPath().listFiles(); + } + + Set recordingEntities = new HashSet<>(); + for (int i = 0; i < files.length; i++) { + Recording recording = this.getRecordingFromEntityFile(files[i]); + if (recording != null) { + if (openviduConfig.getOpenViduRecordingPublicAccess()) { + if (Recording.Status.stopped.equals(recording.getStatus())) { + recording.setStatus(Recording.Status.available); + recording.setUrl( + this.openviduConfig.getFinalUrl() + "recordings/" + recording.getName() + ".mp4"); + } + } + recordingEntities.add(recording); + } + } + return recordingEntities; + } + private Set getRecordingIdsFromHost() { File folder = new File(this.openviduConfig.getOpenViduRecordingPath()); File[] files = folder.listFiles(); @@ -336,43 +372,20 @@ public class ComposedRecordingService { return fileNamesNoExtension; } - private Set getRecordingEntitiesFromHost() { - File folder = new File(this.openviduConfig.getOpenViduRecordingPath()); - File[] files = folder.listFiles(); - - if (files == null) { - files = initRecordingPath().listFiles(); - } - - Set recordingEntities = new HashSet<>(); - for (int i = 0; i < files.length; i++) { - Recording recording = this.getRecordingFromFile(files[i]); - if (recording != null) { - if (openviduConfig.getOpenViduRecordingPublicAccess()) { - if (Recording.Status.stopped.equals(recording.getStatus())) { - recording.setStatus(Recording.Status.available); - recording.setUrl( - this.openviduConfig.getFinalUrl() + "recordings/" + recording.getName() + ".mp4"); - } - } - recordingEntities.add(recording); - } - } - return recordingEntities; - } - public HttpStatus deleteRecordingFromHost(String recordingId) { if (this.startedRecordings.containsKey(recordingId) || this.startingRecordings.containsKey(recordingId)) { // Cannot delete an active recording return HttpStatus.CONFLICT; } + + String name = getRecordingFromHost(recordingId).getName(); File folder = new File(this.openviduConfig.getOpenViduRecordingPath()); File[] files = folder.listFiles(); int numFilesDeleted = 0; for (int i = 0; i < files.length; i++) { - if (files[i].isFile() && isFileFromRecording(files[i], recordingId)) { + if (files[i].isFile() && isFileFromRecording(files[i], recordingId, name)) { files[i].delete(); numFilesDeleted++; } @@ -387,7 +400,7 @@ public class ComposedRecordingService { return status; } - private Recording getRecordingFromFile(File file) { + private Recording getRecordingFromEntityFile(File file) { if (file.isFile() && file.getName().startsWith(RECORDING_ENTITY_FILE)) { JSONParser parser = new JSONParser(); JSONObject json = null; @@ -401,9 +414,10 @@ public class ComposedRecordingService { return null; } - private boolean isFileFromRecording(File file, String recordingId) { - return (((recordingId + ".info").equals(file.getName())) || ((recordingId + ".mp4").equals(file.getName())) - || ((".recording." + recordingId).equals(file.getName()))); + private boolean isFileFromRecording(File file, String recordingId, String recordingName) { + return (((recordingId + ".info").equals(file.getName())) + || ((RECORDING_ENTITY_FILE + recordingId).equals(file.getName())) + || (file.getName().equals(recordingName + ".mp4"))); } private String getFreeRecordingId(String sessionId, String shortSessionId) { @@ -421,12 +435,12 @@ public class ComposedRecordingService { return recordingId; } - private void waitForVideoFileNotEmpty(String recordingId) { + private void waitForVideoFileNotEmpty(String videoName) { boolean isPresent = false; while (!isPresent) { try { Thread.sleep(150); - File f = new File(this.openviduConfig.getOpenViduRecordingPath() + recordingId + ".mp4"); + File f = new File(this.openviduConfig.getOpenViduRecordingPath() + videoName + ".mp4"); isPresent = ((f.isFile()) && (f.length() > 0)); } catch (InterruptedException e) { e.printStackTrace(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java index 9fa07cbd..47038181 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java @@ -29,7 +29,7 @@ public class Recording { this.sessionId = sessionId; this.createdAt = System.currentTimeMillis(); this.id = id; - this.name = id; // For now the name of the recording file is the same as its id + this.name = name; this.status = Status.started; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 3637be28..f5a64834 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -135,6 +135,7 @@ public class SessionRestController { public ResponseEntity startRecordingSession(@RequestBody Map params) { String sessionId = (String) params.get("session"); + String name = (String) params.get("name"); if (sessionId == null) { // "session" parameter not found @@ -157,7 +158,7 @@ public class SessionRestController { return new ResponseEntity(HttpStatus.CONFLICT); } - Recording startedRecording = this.recordingService.startRecording(session); + Recording startedRecording = this.recordingService.startRecording(session, name); return new ResponseEntity<>(startedRecording.toJson(), HttpStatus.OK); } From 6a057f28e621bc3e42698db431cba47d79939392 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 14:22:19 +0200 Subject: [PATCH 08/60] openvidu-client Recording.name --- .../main/java/io/openvidu/client/internal/ProtocolElements.java | 1 + 1 file changed, 1 insertion(+) diff --git a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java index 1df8060d..ac9b6469 100644 --- a/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java +++ b/openvidu-client/src/main/java/io/openvidu/client/internal/ProtocolElements.java @@ -117,6 +117,7 @@ public class ProtocolElements { public static final String RECORDINGSTARTED_METHOD = "recordingStarted"; public static final String RECORDINGSTARTED_ID_PARAM = "id"; + public static final String RECORDINGSTARTED_NAME_PARAM = "name"; public static final String RECORDINGSTOPPED_METHOD = "recordingStopped"; public static final String RECORDINGSTOPPED_ID_PARAM = "id"; From 84045f82d4d2b3ccbaa35dfae13b687543b34e20 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 14:22:49 +0200 Subject: [PATCH 09/60] openvidu-java-client Recording.name --- .../io/openvidu/java/client/OpenVidu.java | 19 ++++++++++-- .../java/client/RecordingProperties.java | 30 +++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java 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 520307fd..4caf12ec 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 @@ -75,7 +75,7 @@ public class OpenVidu { this.myHttpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .setSSLContext(sslContext).setDefaultCredentialsProvider(provider).build(); - + } public Session createSession() throws OpenViduException { @@ -89,12 +89,13 @@ public class OpenVidu { } @SuppressWarnings("unchecked") - public Recording startRecording(String sessionId) throws OpenViduException { + public Recording startRecording(String sessionId, RecordingProperties properties) throws OpenViduException { try { HttpPost request = new HttpPost(this.urlOpenViduServer + API_RECORDINGS + API_RECORDINGS_START); JSONObject json = new JSONObject(); json.put("session", sessionId); + json.put("name", properties.name()); StringEntity params = new StringEntity(json.toString()); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); @@ -114,6 +115,17 @@ public class OpenVidu { } } + public Recording startRecording(String sessionId, String name) throws OpenViduException { + if (name == null) { + name = ""; + } + return this.startRecording(sessionId, new RecordingProperties.Builder().name(name).build()); + } + + public Recording startRecording(String sessionId) throws OpenViduException { + return this.startRecording(sessionId, ""); + } + public Recording stopRecording(String recordingId) throws OpenViduException { try { HttpPost request = new HttpPost( @@ -144,7 +156,8 @@ public class OpenVidu { throw new OpenViduException(Code.RECORDING_LIST_ERROR_CODE, Integer.toString(statusCode)); } } catch (Exception e) { - throw new OpenViduException(Code.RECORDING_LIST_ERROR_CODE, "Unable to get recording '" + recordingId + "': " + e.getMessage()); + throw new OpenViduException(Code.RECORDING_LIST_ERROR_CODE, + "Unable to get recording '" + recordingId + "': " + e.getMessage()); } } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java new file mode 100644 index 00000000..340c745c --- /dev/null +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java @@ -0,0 +1,30 @@ +package io.openvidu.java.client; + +public class RecordingProperties { + + private String name; + + public static class Builder { + + private String name = ""; + + public RecordingProperties build() { + return new RecordingProperties(this.name); + } + + public RecordingProperties.Builder name(String name) { + this.name = name; + return this; + } + + } + + protected RecordingProperties(String name) { + this.name = name; + } + + public String name() { + return this.name; + } + +} From a93f88c66b83cdab522dbdc5330d96f8f1905167 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 14:23:16 +0200 Subject: [PATCH 10/60] openvidu-node-client Recording.name --- openvidu-node-client/lib/OpenVidu.d.ts | 3 ++ openvidu-node-client/lib/OpenVidu.js | 26 +++++++++++++--- openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/src/OpenVidu.ts | 30 ++++++++++++++++--- .../src/RecordingProperties.ts | 25 ++++++++++++++++ 5 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 openvidu-node-client/src/RecordingProperties.ts diff --git a/openvidu-node-client/lib/OpenVidu.d.ts b/openvidu-node-client/lib/OpenVidu.d.ts index 353e719d..a2c00a49 100644 --- a/openvidu-node-client/lib/OpenVidu.d.ts +++ b/openvidu-node-client/lib/OpenVidu.d.ts @@ -1,6 +1,7 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; +import { RecordingProperties } from "RecordingProperties"; export declare class OpenVidu { private urlOpenViduServer; private static readonly API_RECORDINGS; @@ -12,6 +13,8 @@ export declare class OpenVidu { constructor(urlOpenViduServer: string, secret: string); createSession(properties?: SessionProperties): Session; startRecording(sessionId: string): Promise; + startRecording(sessionId: string, name: string): Promise; + startRecording(sessionId: string, properties: RecordingProperties): Promise; stopRecording(recordingId: string): Promise; getRecording(recordingId: string): Promise; listRecordings(): Promise; diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index 69f26808..d114ff8d 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -12,12 +12,30 @@ var OpenVidu = /** @class */ (function () { OpenVidu.prototype.createSession = function (properties) { return new Session_1.Session(this.hostname, this.port, this.basicAuth, properties); }; - OpenVidu.prototype.startRecording = function (sessionId) { + OpenVidu.prototype.startRecording = function (sessionId, param2) { var _this = this; return new Promise(function (resolve, reject) { - var requestBody = JSON.stringify({ - 'session': sessionId - }); + var requestBody; + if (!!param2) { + if (!(typeof param2 === 'string')) { + requestBody = JSON.stringify({ + session: sessionId, + name: param2.name() + }); + } + else { + requestBody = JSON.stringify({ + session: sessionId, + name: param2 + }); + } + } + else { + requestBody = JSON.stringify({ + session: sessionId, + name: '' + }); + } var options = { hostname: _this.hostname, port: _this.port, diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index 12321e4b..a2ba29a3 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 453dc4c5..02b32dd5 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -1,6 +1,7 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; +import { RecordingProperties } from "RecordingProperties"; declare const Buffer; let https = require('https'); @@ -24,12 +25,33 @@ export class OpenVidu { return new Session(this.hostname, this.port, this.basicAuth, properties); } - public startRecording(sessionId: string): Promise { + public startRecording(sessionId: string): Promise; + public startRecording(sessionId: string, name: string): Promise; + public startRecording(sessionId: string, properties: RecordingProperties): Promise; + + public startRecording(sessionId: string, param2?: string | RecordingProperties): Promise { return new Promise((resolve, reject) => { - let requestBody = JSON.stringify({ - 'session': sessionId - }); + let requestBody; + + if (!!param2) { + if (!(typeof param2 === 'string')) { + requestBody = JSON.stringify({ + session: sessionId, + name: (param2).name() + }); + } else { + requestBody = JSON.stringify({ + session: sessionId, + name: param2 + }); + } + } else { + requestBody = JSON.stringify({ + session: sessionId, + name: '' + }); + } let options = { hostname: this.hostname, diff --git a/openvidu-node-client/src/RecordingProperties.ts b/openvidu-node-client/src/RecordingProperties.ts new file mode 100644 index 00000000..d892461b --- /dev/null +++ b/openvidu-node-client/src/RecordingProperties.ts @@ -0,0 +1,25 @@ +export class RecordingProperties { + + constructor(private rName: string) { } + + name(): string { + return this.rName; + } + +} + +export namespace RecordingProperties { + export class Builder { + + private rName: string = ''; + + build(): RecordingProperties { + return new RecordingProperties(this.rName); + } + + name(name: string): Builder { + this.rName = name; + return this; + } + }; +} \ No newline at end of file From d26db5a01c3de23aa729f4f14b6c3a90f6d62201 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 14:29:07 +0200 Subject: [PATCH 11/60] openvidu-node-client: OpenVidu header in all TS files --- openvidu-node-client/lib/OpenVidu.js | 16 ++++++++++++++++ openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/OpenViduRole.js | 16 ++++++++++++++++ openvidu-node-client/lib/OpenViduRole.js.map | 2 +- openvidu-node-client/lib/Session.js | 16 ++++++++++++++++ openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/lib/TokenOptions.js | 16 ++++++++++++++++ openvidu-node-client/lib/TokenOptions.js.map | 2 +- openvidu-node-client/src/MediaMode.ts | 17 +++++++++++++++++ openvidu-node-client/src/OpenVidu.ts | 17 +++++++++++++++++ openvidu-node-client/src/OpenViduRole.ts | 17 +++++++++++++++++ openvidu-node-client/src/Recording.ts | 17 +++++++++++++++++ openvidu-node-client/src/RecordingLayout.ts | 17 +++++++++++++++++ openvidu-node-client/src/RecordingMode.ts | 17 +++++++++++++++++ openvidu-node-client/src/RecordingProperties.ts | 17 +++++++++++++++++ openvidu-node-client/src/Session.ts | 17 +++++++++++++++++ openvidu-node-client/src/SessionProperties.ts | 17 +++++++++++++++++ openvidu-node-client/src/TokenOptions.ts | 17 +++++++++++++++++ 18 files changed, 238 insertions(+), 4 deletions(-) diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index d114ff8d..0901d958 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -1,4 +1,20 @@ "use strict"; +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ Object.defineProperty(exports, "__esModule", { value: true }); var Session_1 = require("./Session"); var Recording_1 = require("./Recording"); diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index a2ba29a3..8f28d561 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":";;AAAA,qCAAoC;AAEpC,yCAAwC;AAIxC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7B;IAUE,kBAAoB,iBAAyB,EAAE,MAAc;QAAzC,sBAAiB,GAAjB,iBAAiB,CAAQ;QAC3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEM,gCAAa,GAApB,UAAqB,UAA8B;QACjD,MAAM,CAAC,IAAI,iBAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAMM,iCAAc,GAArB,UAAsB,SAAiB,EAAE,MAAqC;QAA9E,iBA2DC;QA1DC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,WAAW,CAAC;YAEhB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACb,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAwB,MAAO,CAAC,IAAI,EAAE;qBAC3C,CAAC,CAAC;gBACL,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAE,MAAM;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,oBAAoB;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;iBACjD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvB,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,gCAAa,GAApB,UAAqB,WAAmB;QAAxC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,mBAAmB,GAAG,GAAG,GAAG,WAAW;gBAChF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,+BAAY,GAAnB,UAAoB,WAAmB;QAAvC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,iCAAc,GAArB;QAAA,iBA0CC;QAzCC,MAAM,CAAC,IAAI,OAAO,CAAc,UAAC,OAAO,EAAE,MAAM;YAE9C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,mHAAmH;wBACnH,IAAI,cAAc,GAAgB,EAAE,CAAC;wBACrC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC9C,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,cAAc,CAAC,IAAI,CAAC,IAAI,qBAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvD,CAAC;wBACD,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1B,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,kCAAe,GAAtB,UAAuB,WAAmB;QAA1C,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAQ,UAAC,OAAO,EAAE,MAAM;YAExC,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,2DAA2D;wBAC3D,OAAO,CAAC,SAAS,CAAC,CAAC;oBACrB,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAAY,GAApB,UAAqB,MAAc;QACjC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,qCAAkB,GAA1B;QACE,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2EAA2E,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAlQuB,uBAAc,GAAW,iBAAiB,CAAC;IAC3C,6BAAoB,GAAW,QAAQ,CAAC;IACxC,4BAAmB,GAAW,OAAO,CAAC;IAkQhE,eAAC;CAAA,AAtQD,IAsQC;AAtQY,4BAAQ"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenViduRole.js b/openvidu-node-client/lib/OpenViduRole.js index 1c0a4465..4f9418c9 100644 --- a/openvidu-node-client/lib/OpenViduRole.js +++ b/openvidu-node-client/lib/OpenViduRole.js @@ -1,4 +1,20 @@ "use strict"; +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ Object.defineProperty(exports, "__esModule", { value: true }); var OpenViduRole; (function (OpenViduRole) { diff --git a/openvidu-node-client/lib/OpenViduRole.js.map b/openvidu-node-client/lib/OpenViduRole.js.map index c9115765..a290d1f0 100644 --- a/openvidu-node-client/lib/OpenViduRole.js.map +++ b/openvidu-node-client/lib/OpenViduRole.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";;AAAA,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA,CAAE,gHAAgH;AAC1I,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file +{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA,CAAE,gHAAgH;AAC1I,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index fc1b66d8..29fcbb71 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -1,4 +1,20 @@ "use strict"; +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ Object.defineProperty(exports, "__esModule", { value: true }); var OpenViduRole_1 = require("./OpenViduRole"); var SessionProperties_1 = require("./SessionProperties"); diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 44cce3c3..22cec1eb 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/TokenOptions.js b/openvidu-node-client/lib/TokenOptions.js index 3ea8a635..1fd58176 100644 --- a/openvidu-node-client/lib/TokenOptions.js +++ b/openvidu-node-client/lib/TokenOptions.js @@ -1,4 +1,20 @@ "use strict"; +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ Object.defineProperty(exports, "__esModule", { value: true }); var OpenViduRole_1 = require("./OpenViduRole"); var TokenOptions = /** @class */ (function () { diff --git a/openvidu-node-client/lib/TokenOptions.js.map b/openvidu-node-client/lib/TokenOptions.js.map index 6960a271..d1f3c91f 100644 --- a/openvidu-node-client/lib/TokenOptions.js.map +++ b/openvidu-node-client/lib/TokenOptions.js.map @@ -1 +1 @@ -{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";;AAAA,+CAA8C;AAE9C;IAEI,sBAAoB,IAAY,EAAU,IAAkB;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAc;IAAI,CAAC;IAEjE,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IACL,mBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,oCAAY;AAazB,WAAiB,YAAY;IACzB;QAAA;YAEY,aAAQ,GAAW,EAAE,CAAC;YACtB,aAAQ,GAAiB,2BAAY,CAAC,SAAS,CAAC;QAgB5D,CAAC;QAdG,uBAAK,GAAL;YACI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAY;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAkB;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAEL,cAAC;IAAD,CAAC,AAnBD,IAmBC;IAnBY,oBAAO,UAmBnB,CAAA;IAAA,CAAC;AACN,CAAC,EArBgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAqB5B;AAlCY,oCAAY"} \ No newline at end of file +{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,+CAA8C;AAE9C;IAEI,sBAAoB,IAAY,EAAU,IAAkB;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAc;IAAI,CAAC;IAEjE,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IACL,mBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,oCAAY;AAazB,WAAiB,YAAY;IACzB;QAAA;YAEY,aAAQ,GAAW,EAAE,CAAC;YACtB,aAAQ,GAAiB,2BAAY,CAAC,SAAS,CAAC;QAgB5D,CAAC;QAdG,uBAAK,GAAL;YACI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAY;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAkB;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAEL,cAAC;IAAD,CAAC,AAnBD,IAmBC;IAnBY,oBAAO,UAmBnB,CAAA;IAAA,CAAC;AACN,CAAC,EArBgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAqB5B;AAlCY,oCAAY"} \ No newline at end of file diff --git a/openvidu-node-client/src/MediaMode.ts b/openvidu-node-client/src/MediaMode.ts index 9c6bf484..7f95ed98 100644 --- a/openvidu-node-client/src/MediaMode.ts +++ b/openvidu-node-client/src/MediaMode.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export enum MediaMode { RELAYED = 'RELAYED', // The session will attempt to transmit streams directly between clients ROUTED = 'ROUTED' // The session will transmit streams using OpenVidu Media Server diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 02b32dd5..92a501ee 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; diff --git a/openvidu-node-client/src/OpenViduRole.ts b/openvidu-node-client/src/OpenViduRole.ts index cfe11e14..c68c898d 100644 --- a/openvidu-node-client/src/OpenViduRole.ts +++ b/openvidu-node-client/src/OpenViduRole.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export enum OpenViduRole { SUBSCRIBER = 'SUBSCRIBER', // Can subscribe to published streams of other users PUBLISHER = 'PUBLISHER', // SUBSCRIBER permissions + can subscribe to published streams of other users and publish their own streams diff --git a/openvidu-node-client/src/Recording.ts b/openvidu-node-client/src/Recording.ts index 686852c7..fbd29bb0 100644 --- a/openvidu-node-client/src/Recording.ts +++ b/openvidu-node-client/src/Recording.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export class Recording { private id: string; diff --git a/openvidu-node-client/src/RecordingLayout.ts b/openvidu-node-client/src/RecordingLayout.ts index 999ae867..9771e5c9 100644 --- a/openvidu-node-client/src/RecordingLayout.ts +++ b/openvidu-node-client/src/RecordingLayout.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export enum RecordingLayout { BEST_FIT = 'BEST_FIT', // All the videos are evenly distributed, taking up as much space as possible PICTURE_IN_PICTURE = 'PICTURE_IN_PICTURE', diff --git a/openvidu-node-client/src/RecordingMode.ts b/openvidu-node-client/src/RecordingMode.ts index 5085fd21..840e5361 100644 --- a/openvidu-node-client/src/RecordingMode.ts +++ b/openvidu-node-client/src/RecordingMode.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export enum RecordingMode { ALWAYS = 'ALWAYS', // The session is recorded automatically (as soon as there are clients publishing streams to the session) MANUAL = 'MANUAL' // The session is not recorded automatically. To record the session, you can call the OpenVidu.startRecording() method diff --git a/openvidu-node-client/src/RecordingProperties.ts b/openvidu-node-client/src/RecordingProperties.ts index d892461b..00b0b2da 100644 --- a/openvidu-node-client/src/RecordingProperties.ts +++ b/openvidu-node-client/src/RecordingProperties.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export class RecordingProperties { constructor(private rName: string) { } diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index 7316e42a..1974bb41 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { TokenOptions } from './TokenOptions'; import { OpenViduRole } from './OpenViduRole'; import { SessionProperties } from './SessionProperties'; diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts index 610ff52f..0d47ec07 100644 --- a/openvidu-node-client/src/SessionProperties.ts +++ b/openvidu-node-client/src/SessionProperties.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { MediaMode } from "./MediaMode"; import { RecordingMode } from "./RecordingMode"; import { RecordingLayout } from "./RecordingLayout"; diff --git a/openvidu-node-client/src/TokenOptions.ts b/openvidu-node-client/src/TokenOptions.ts index 274bff9b..a2f5bcb7 100644 --- a/openvidu-node-client/src/TokenOptions.ts +++ b/openvidu-node-client/src/TokenOptions.ts @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (http://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { OpenViduRole } from "./OpenViduRole"; export class TokenOptions { From e9089eeb82d095f5ce4fe352ced97fffa9f2c66a Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 15:18:12 +0200 Subject: [PATCH 12/60] openvidu-server-kms bug fix (KMS_TURN_URL was being overrided) --- openvidu-server/docker/openvidu-server-kms/Dockerfile | 7 ++++--- openvidu-server/docker/openvidu-server-kms/kms.sh | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/openvidu-server/docker/openvidu-server-kms/Dockerfile b/openvidu-server/docker/openvidu-server-kms/Dockerfile index eeaab759..1db26cab 100644 --- a/openvidu-server/docker/openvidu-server-kms/Dockerfile +++ b/openvidu-server/docker/openvidu-server-kms/Dockerfile @@ -7,15 +7,16 @@ RUN echo "deb http://ubuntu.openvidu.io/6.7.0 xenial kms6" | tee /etc/apt/source && apt-get update \ && apt-get -y dist-upgrade \ && apt-get -y install kurento-media-server \ - && apt-get -y install openh264-gst-plugins-bad-1.5 + && apt-get -y install openh264-gst-plugins-bad-1.5 \ + && rm -rf /var/lib/apt/lists/* COPY kms.sh /kms.sh # Install Java -RUN apt-get install -y openjdk-8-jdk +RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/* # Install supervisor -RUN apt-get install -y supervisor && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/* # Configure supervisor RUN mkdir -p /var/log/supervisor diff --git a/openvidu-server/docker/openvidu-server-kms/kms.sh b/openvidu-server/docker/openvidu-server-kms/kms.sh index 47324bf1..204d963d 100644 --- a/openvidu-server/docker/openvidu-server-kms/kms.sh +++ b/openvidu-server/docker/openvidu-server-kms/kms.sh @@ -1,14 +1,15 @@ #!/bin/bash -x set -e -if [ -n "$KMS_TURN_URL" ]; then - echo "turnURL=$KMS_TURN_URL" > /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini -fi - if [ -n "$KMS_STUN_IP" -a -n "$KMS_STUN_PORT" ]; then # Generate WebRtcEndpoint configuration echo "stunServerAddress=$KMS_STUN_IP" > /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini echo "stunServerPort=$KMS_STUN_PORT" >> /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini + if [ -n "$KMS_TURN_URL" ]; then + echo "turnURL=$KMS_TURN_URL" >> /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini + fi +elif [ -n "$KMS_TURN_URL" ]; then + echo "turnURL=$KMS_TURN_URL" > /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini fi # Remove ipv6 local loop until ipv6 is supported From fa76fab0d218be423f3dc66b530a79c6ae5e4e09 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 15:23:09 +0200 Subject: [PATCH 13/60] openvidu-node-client import path typo fix --- openvidu-node-client/lib/OpenVidu.d.ts | 2 +- openvidu-node-client/src/OpenVidu.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openvidu-node-client/lib/OpenVidu.d.ts b/openvidu-node-client/lib/OpenVidu.d.ts index a2c00a49..037eecef 100644 --- a/openvidu-node-client/lib/OpenVidu.d.ts +++ b/openvidu-node-client/lib/OpenVidu.d.ts @@ -1,7 +1,7 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; -import { RecordingProperties } from "RecordingProperties"; +import { RecordingProperties } from "./RecordingProperties"; export declare class OpenVidu { private urlOpenViduServer; private static readonly API_RECORDINGS; diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 92a501ee..18e0eaa9 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -18,7 +18,7 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; -import { RecordingProperties } from "RecordingProperties"; +import { RecordingProperties } from "./RecordingProperties"; declare const Buffer; let https = require('https'); From 870600dc6a5aa88ced41dae9e7c8a0fae3434862 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 15:23:55 +0200 Subject: [PATCH 14/60] Session recording async start when RecordinMode.ALWAYS --- .../main/java/io/openvidu/server/core/SessionManager.java | 5 ++--- .../openvidu/server/kurento/core/KurentoSessionManager.java | 5 ++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 03d30689..685c0d34 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -268,9 +268,8 @@ public abstract class SessionManager { public Participant newRecorderParticipant(String sessionId, String participantPrivatetId, Token token, String clientMetadata) { if (this.sessionidParticipantpublicidParticipant.get(sessionId) != null) { - String participantPublicId = ProtocolElements.RECORDER_PARTICIPANT_PUBLICID; - Participant p = new Participant(participantPrivatetId, participantPublicId, token, clientMetadata); - this.sessionidParticipantpublicidParticipant.get(sessionId).put(participantPublicId, p); + Participant p = new Participant(participantPrivatetId, ProtocolElements.RECORDER_PARTICIPANT_PUBLICID, token, clientMetadata); + this.sessionidParticipantpublicidParticipant.get(sessionId).put(ProtocolElements.RECORDER_PARTICIPANT_PUBLICID, p); return p; } else { throw new OpenViduException(Code.ROOM_NOT_FOUND_ERROR_CODE, sessionId); diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index 483df48a..493555fd 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -233,7 +233,10 @@ public class KurentoSessionManager extends SessionManager { && RecordingMode.ALWAYS.equals(session.getSessionProperties().recordingMode()) && !recordingService.sessionIsBeingRecorded(session.getSessionId()) && session.getActivePublishers() == 0) { - recordingService.startRecording(session, null); + // Insecure session recording + new Thread(() -> { + recordingService.startRecording(session, null); + }).start(); } session.newPublisher(participant); From ab13435af878688c8bb57d851c956927a97b1f34 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 18 Apr 2018 15:49:38 +0200 Subject: [PATCH 15/60] openvidu-testapp: when changing Publisher dynamically do not unpublish until new Publisher receives 'accessAllowed' event --- .../openvidu-instance.component.ts | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) 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 1b1252f2..f09d32df 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 @@ -522,13 +522,6 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { } changePublisher() { - - if (!this.unpublished) { - this.session.unpublish(this.publisher); - this.removeUserData(this.session.connection.connectionId); - this.restartPublisherRecord(); - } - let screenChange; if (!this.publisherChanged) { if (this.sendAudio && !this.sendVideo) { @@ -560,7 +553,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.updateVideoIcon(); this.updatePublishIcon(); - this.publisher = this.OV.initPublisher( + const otherPublisher = this.OV.initPublisher( 'local-vid-' + this.session.connection.connectionId, { audioSource: this.sendAudioChange ? undefined : false, @@ -584,8 +577,17 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { } } }); - this.addPublisherEvents(this.publisher); - this.session.publish(this.publisher); + this.addPublisherEvents(otherPublisher); + + otherPublisher.once('accessAllowed', () => { + if (!this.unpublished) { + this.session.unpublish(this.publisher); + this.publisher = otherPublisher; + this.removeUserData(this.session.connection.connectionId); + this.restartPublisherRecord(); + } + this.session.publish(otherPublisher); + }); this.publisherChanged = !this.publisherChanged; } From c0cf7d9d4e2bffbd25b83a76e786243da064193e Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 12:01:51 +0200 Subject: [PATCH 16/60] openvidu-testapp default recording SessionProperties --- .../components/test-apirest/test-apirest.component.html | 8 ++++---- .../app/components/test-apirest/test-apirest.component.ts | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html index 7ba4644d..ecb9a2d8 100644 --- a/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html +++ b/openvidu-testapp/src/app/components/test-apirest/test-apirest.component.html @@ -16,7 +16,7 @@
Archive ModeArchive LayoutRecording ModeRecording Layout Media Mode
- - - {{ archiveMode }} + + + {{ recordingMode }} - - - {{ archiveLayout }} + + + {{ recordingLayout }}
- + @@ -28,9 +28,9 @@ 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 cc80c540..7c6e1bd4 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 @@ -29,8 +29,8 @@ export class TestApirestComponent implements OnInit, OnDestroy { recordingModes = ['ALWAYS', 'MANUAL']; selectedRecordingMode = 'MANUAL'; - recordingLayouts = ['BEST_FIT']; - selectedRecordingLayout = 'BEST_FIT'; + defaultRecordingLayouts = ['BEST_FIT']; + selectedDefaultRecordingLayout = 'BEST_FIT'; mediaModes = ['ROUTED']; selectedMediaMode = 'ROUTED'; @@ -72,7 +72,7 @@ export class TestApirestComponent implements OnInit, OnDestroy { this.openviduRestService.getSessionId(this.openviduUrl, this.openviduSecret, new SessionProperties.Builder() .recordingMode(RecordingMode[this.selectedRecordingMode]) - .recordingLayout(RecordingLayout[this.selectedRecordingLayout]) + .defaultRecordingLayout(RecordingLayout[this.selectedDefaultRecordingLayout]) .mediaMode(MediaMode[this.selectedMediaMode]) .build()) .then((sessionId) => { From 6d569ae94e01e4278070c0a8997abbe2d1788ee9 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 12:03:19 +0200 Subject: [PATCH 17/60] openvidu-java-client: defaultRecordingLayout and recordingLayout --- .../io/openvidu/java/client/OpenVidu.java | 2 ++ .../io/openvidu/java/client/Recording.java | 11 +++++++--- .../java/client/RecordingProperties.java | 16 +++++++++++++-- .../java/io/openvidu/java/client/Session.java | 2 +- .../java/client/SessionProperties.java | 20 +++++++++---------- 5 files changed, 35 insertions(+), 16 deletions(-) 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 4caf12ec..f1175364 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 @@ -96,6 +96,8 @@ public class OpenVidu { JSONObject json = new JSONObject(); json.put("session", sessionId); json.put("name", properties.name()); + json.put("recordingLayout", + (properties.recordingLayout() != null) ? properties.recordingLayout().name() : ""); StringEntity params = new StringEntity(json.toString()); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java index bfddc6f7..88bb5e5d 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Recording.java @@ -16,7 +16,6 @@ public class Recording { private Recording.Status status; private String id; - private String name; private String sessionId; private long createdAt; // milliseconds (UNIX Epoch time) private long size = 0; // bytes @@ -24,10 +23,10 @@ public class Recording { private String url; private boolean hasAudio = true; private boolean hasVideo = true; + private RecordingProperties recordingProperties; public Recording(JSONObject json) { this.id = (String) json.get("id"); - this.name = (String) json.get("name"); this.sessionId = (String) json.get("sessionId"); this.createdAt = (long) json.get("createdAt"); this.size = (long) json.get("size"); @@ -36,6 +35,8 @@ public class Recording { this.hasAudio = (boolean) json.get("hasAudio"); this.hasVideo = (boolean) json.get("hasVideo"); this.status = Recording.Status.valueOf((String) json.get("status")); + this.recordingProperties = new RecordingProperties.Builder().name((String) json.get("name")) + .recordingLayout(RecordingLayout.valueOf((String) json.get("layout"))).build(); } public Recording.Status getStatus() { @@ -47,7 +48,11 @@ public class Recording { } public String getName() { - return name; + return this.recordingProperties.name(); + } + + public RecordingLayout getLayout() { + return this.recordingProperties.recordingLayout(); } public String getSessionId() { diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java index 340c745c..f36c0904 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java @@ -3,28 +3,40 @@ package io.openvidu.java.client; public class RecordingProperties { private String name; + private RecordingLayout recordingLayout; public static class Builder { private String name = ""; + private RecordingLayout recordingLayout; public RecordingProperties build() { - return new RecordingProperties(this.name); + return new RecordingProperties(this.name, this.recordingLayout); } public RecordingProperties.Builder name(String name) { this.name = name; return this; } + + public RecordingProperties.Builder recordingLayout(RecordingLayout layout) { + this.recordingLayout = layout; + return this; + } } - protected RecordingProperties(String name) { + protected RecordingProperties(String name, RecordingLayout layout) { this.name = name; + this.recordingLayout = layout; } public String name() { return this.name; } + + public RecordingLayout recordingLayout() { + return this.recordingLayout; + } } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java index 3617bdc8..65a4d000 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java @@ -44,7 +44,7 @@ public class Session { HttpPost request = new HttpPost(this.urlOpenViduServer + API_SESSIONS); JSONObject json = new JSONObject(); - json.put("recordingLayout", properties.recordingLayout().name()); + json.put("defaultRecordingLayout", properties.defaultRecordingLayout().name()); json.put("recordingMode", properties.recordingMode().name()); json.put("mediaMode", properties.mediaMode().name()); StringEntity params = new StringEntity(json.toString()); diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java index 98ddcc49..e5c54251 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java @@ -4,16 +4,16 @@ public class SessionProperties { private MediaMode mediaMode; private RecordingMode recordingMode; - private RecordingLayout recordingLayout; + private RecordingLayout defaultRecordingLayout; public static class Builder { private MediaMode mediaMode = MediaMode.ROUTED; private RecordingMode recordingMode = RecordingMode.MANUAL; - private RecordingLayout recordingLayout = RecordingLayout.BEST_FIT; + private RecordingLayout defaultRecordingLayout = RecordingLayout.BEST_FIT; public SessionProperties build() { - return new SessionProperties(this.mediaMode, this.recordingMode, this.recordingLayout); + return new SessionProperties(this.mediaMode, this.recordingMode, this.defaultRecordingLayout); } public SessionProperties.Builder mediaMode(MediaMode mediaMode) { @@ -26,8 +26,8 @@ public class SessionProperties { return this; } - public SessionProperties.Builder recordingLayout(RecordingLayout recordingLayout) { - this.recordingLayout = recordingLayout; + public SessionProperties.Builder defaultRecordingLayout(RecordingLayout layout) { + this.defaultRecordingLayout = layout; return this; } @@ -36,13 +36,13 @@ public class SessionProperties { protected SessionProperties() { this.mediaMode = MediaMode.ROUTED; this.recordingMode = RecordingMode.MANUAL; - this.recordingLayout = RecordingLayout.BEST_FIT; + this.defaultRecordingLayout = RecordingLayout.BEST_FIT; } - private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, RecordingLayout recordingLayout) { + private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, RecordingLayout layout) { this.mediaMode = mediaMode; this.recordingMode = recordingMode; - this.recordingLayout = recordingLayout; + this.defaultRecordingLayout = layout; } public RecordingMode recordingMode() { @@ -53,8 +53,8 @@ public class SessionProperties { return this.mediaMode; } - public RecordingLayout recordingLayout() { - return this.recordingLayout; + public RecordingLayout defaultRecordingLayout() { + return this.defaultRecordingLayout; } } \ No newline at end of file From b8d6ac5f3e2cfdaa964538bb9e232ddb42e55333 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 12:04:56 +0200 Subject: [PATCH 18/60] openvidu-node-client: defaultRecordingLayout and recordingLayout --- openvidu-node-client/lib/OpenVidu.js | 10 +++++++--- openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/Session.js | 2 +- openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/lib/index.d.ts | 1 + openvidu-node-client/lib/index.js | 1 + openvidu-node-client/lib/index.js.map | 2 +- openvidu-node-client/src/OpenVidu.ts | 11 ++++++++--- openvidu-node-client/src/Recording.ts | 13 ++++++++++--- openvidu-node-client/src/RecordingProperties.ts | 16 ++++++++++++++-- openvidu-node-client/src/Session.ts | 2 +- openvidu-node-client/src/SessionProperties.ts | 14 +++++++------- openvidu-node-client/src/index.ts | 3 ++- 13 files changed, 55 insertions(+), 24 deletions(-) diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index 0901d958..de303934 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -34,22 +34,26 @@ var OpenVidu = /** @class */ (function () { var requestBody; if (!!param2) { if (!(typeof param2 === 'string')) { + var properties = param2; requestBody = JSON.stringify({ session: sessionId, - name: param2.name() + name: properties.name(), + recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : '') }); } else { requestBody = JSON.stringify({ session: sessionId, - name: param2 + name: param2, + recordingLayout: '' }); } } else { requestBody = JSON.stringify({ session: sessionId, - name: '' + name: '', + recordingLayout: '' }); } var options = { diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index 8f28d561..0783911b 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,qCAAoC;AAEpC,yCAAwC;AAIxC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7B;IAUE,kBAAoB,iBAAyB,EAAE,MAAc;QAAzC,sBAAiB,GAAjB,iBAAiB,CAAQ;QAC3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEM,gCAAa,GAApB,UAAqB,UAA8B;QACjD,MAAM,CAAC,IAAI,iBAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAMM,iCAAc,GAArB,UAAsB,SAAiB,EAAE,MAAqC;QAA9E,iBA2DC;QA1DC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,WAAW,CAAC;YAEhB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACb,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAwB,MAAO,CAAC,IAAI,EAAE;qBAC3C,CAAC,CAAC;gBACL,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAE,MAAM;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,oBAAoB;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;iBACjD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvB,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,gCAAa,GAApB,UAAqB,WAAmB;QAAxC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,mBAAmB,GAAG,GAAG,GAAG,WAAW;gBAChF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,+BAAY,GAAnB,UAAoB,WAAmB;QAAvC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,iCAAc,GAArB;QAAA,iBA0CC;QAzCC,MAAM,CAAC,IAAI,OAAO,CAAc,UAAC,OAAO,EAAE,MAAM;YAE9C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,mHAAmH;wBACnH,IAAI,cAAc,GAAgB,EAAE,CAAC;wBACrC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC9C,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,cAAc,CAAC,IAAI,CAAC,IAAI,qBAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvD,CAAC;wBACD,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1B,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,kCAAe,GAAtB,UAAuB,WAAmB;QAA1C,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAQ,UAAC,OAAO,EAAE,MAAM;YAExC,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,2DAA2D;wBAC3D,OAAO,CAAC,SAAS,CAAC,CAAC;oBACrB,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAAY,GAApB,UAAqB,MAAc;QACjC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,qCAAkB,GAA1B;QACE,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2EAA2E,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAlQuB,uBAAc,GAAW,iBAAiB,CAAC;IAC3C,6BAAoB,GAAW,QAAQ,CAAC;IACxC,4BAAmB,GAAW,OAAO,CAAC;IAkQhE,eAAC;CAAA,AAtQD,IAsQC;AAtQY,4BAAQ"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,qCAAoC;AAEpC,yCAAwC;AAKxC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7B;IAUE,kBAAoB,iBAAyB,EAAE,MAAc;QAAzC,sBAAiB,GAAjB,iBAAiB,CAAQ;QAC3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEM,gCAAa,GAApB,UAAqB,UAA8B;QACjD,MAAM,CAAC,IAAI,iBAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAMM,iCAAc,GAArB,UAAsB,SAAiB,EAAE,MAAqC;QAA9E,iBA+DC;QA9DC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,WAAW,CAAC;YAEhB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACb,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAM,UAAU,GAAwB,MAAM,CAAC;oBAC/C,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE;wBACvB,eAAe,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACtF,CAAC,CAAC;gBACL,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,EAAE,SAAS;wBAClB,IAAI,EAAE,MAAM;wBACZ,eAAe,EAAE,EAAE;qBACpB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,EAAE;oBACR,eAAe,EAAE,EAAE;iBACpB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,oBAAoB;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;iBACjD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvB,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,gCAAa,GAApB,UAAqB,WAAmB;QAAxC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,mBAAmB,GAAG,GAAG,GAAG,WAAW;gBAChF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,+BAAY,GAAnB,UAAoB,WAAmB;QAAvC,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAY,UAAC,OAAO,EAAE,MAAM;YAE5C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,0FAA0F;wBAC1F,OAAO,CAAC,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,iCAAc,GAArB;QAAA,iBA0CC;QAzCC,MAAM,CAAC,IAAI,OAAO,CAAc,UAAC,OAAO,EAAE,MAAM;YAE9C,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,mHAAmH;wBACnH,IAAI,cAAc,GAAgB,EAAE,CAAC;wBACrC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC9C,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,cAAc,CAAC,IAAI,CAAC,IAAI,qBAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvD,CAAC;wBACD,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1B,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,kCAAe,GAAtB,UAAuB,WAAmB;QAA1C,iBAqCC;QApCC,MAAM,CAAC,IAAI,OAAO,CAAQ,UAAC,OAAO,EAAE,MAAM;YAExC,IAAI,OAAO,GAAG;gBACZ,QAAQ,EAAE,KAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,WAAW;gBACjD,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE;oBACP,eAAe,EAAE,KAAI,CAAC,SAAS;oBAC/B,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAA;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,GAAG;gBACrC,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,CAAC;oBACf,uCAAuC;oBACvC,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;oBACZ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3B,2DAA2D;wBAC3D,OAAO,CAAC,SAAS,CAAC,CAAC;oBACrB,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,2DAA2D;wBAC3D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,cAAc;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;QAEZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAAY,GAApB,UAAqB,MAAc;QACjC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,qCAAkB,GAA1B;QACE,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2EAA2E,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAtQuB,uBAAc,GAAW,iBAAiB,CAAC;IAC3C,6BAAoB,GAAW,QAAQ,CAAC;IACxC,4BAAmB,GAAW,OAAO,CAAC;IAsQhE,eAAC;CAAA,AA1QD,IA0QC;AA1QY,4BAAQ"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index 29fcbb71..66748a54 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -39,7 +39,7 @@ var Session = /** @class */ (function () { resolve(_this.sessionId); } var requestBody = JSON.stringify({ - 'recordingLayout': _this.properties.recordingLayout(), + 'defaultRecordingLayout': _this.properties.defaultRecordingLayout(), 'recordingMode': _this.properties.recordingMode(), 'mediaMode': _this.properties.mediaMode() }); diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 22cec1eb..6b8b1f84 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/index.d.ts b/openvidu-node-client/lib/index.d.ts index 5836b2ec..4c5b7166 100644 --- a/openvidu-node-client/lib/index.d.ts +++ b/openvidu-node-client/lib/index.d.ts @@ -7,3 +7,4 @@ export * from './MediaMode'; export * from './RecordingLayout'; export * from './RecordingMode'; export * from './Recording'; +export * from './RecordingProperties'; diff --git a/openvidu-node-client/lib/index.js b/openvidu-node-client/lib/index.js index e10bfdc1..863bf7c8 100644 --- a/openvidu-node-client/lib/index.js +++ b/openvidu-node-client/lib/index.js @@ -12,4 +12,5 @@ __export(require("./MediaMode")); __export(require("./RecordingLayout")); __export(require("./RecordingMode")); __export(require("./Recording")); +__export(require("./RecordingProperties")); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/index.js.map b/openvidu-node-client/lib/index.js.map index 72787873..f2c6de18 100644 --- a/openvidu-node-client/lib/index.js.map +++ b/openvidu-node-client/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,yCAAoC;AACpC,oCAA+B;AAC/B,iCAA4B;AAC5B,uCAAkC;AAClC,qCAAgC;AAChC,iCAA4B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,yCAAoC;AACpC,oCAA+B;AAC/B,iCAA4B;AAC5B,uCAAkC;AAClC,qCAAgC;AAChC,iCAA4B;AAC5B,2CAAsC"} \ No newline at end of file diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 18e0eaa9..33cae3ec 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -19,6 +19,7 @@ import { Session } from "./Session"; import { SessionProperties } from "./SessionProperties"; import { Recording } from "./Recording"; import { RecordingProperties } from "./RecordingProperties"; +import { RecordingLayout } from "./RecordingLayout"; declare const Buffer; let https = require('https'); @@ -53,20 +54,24 @@ export class OpenVidu { if (!!param2) { if (!(typeof param2 === 'string')) { + const properties = param2; requestBody = JSON.stringify({ session: sessionId, - name: (param2).name() + name: properties.name(), + recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : '') }); } else { requestBody = JSON.stringify({ session: sessionId, - name: param2 + name: param2, + recordingLayout: '' }); } } else { requestBody = JSON.stringify({ session: sessionId, - name: '' + name: '', + recordingLayout: '' }); } diff --git a/openvidu-node-client/src/Recording.ts b/openvidu-node-client/src/Recording.ts index fbd29bb0..5654a850 100644 --- a/openvidu-node-client/src/Recording.ts +++ b/openvidu-node-client/src/Recording.ts @@ -15,10 +15,12 @@ * */ +import { RecordingProperties } from "./RecordingProperties"; +import { RecordingLayout } from "./RecordingLayout"; + export class Recording { private id: string; - private name: string; private sessionId: string; private createdAt: number; private size: number = 0; @@ -27,10 +29,10 @@ export class Recording { private hasaudio: boolean = true; private hasvideo: boolean = true; private status: Recording.Status; + private recordingProperties: RecordingProperties; constructor(json: JSON) { this.id = json['id']; - this.name = json['name']; this.sessionId = json['sessionId']; this.createdAt = json['createdAt']; this.size = json['size']; @@ -39,6 +41,7 @@ export class Recording { this.hasaudio = json['hasAudio']; this.hasvideo = json['hasVideo']; this.status = json['status']; + this.recordingProperties = new RecordingProperties.Builder().name(json['name']).recordingLayout(json['layout']).build(); } public getStatus(): Recording.Status { @@ -50,7 +53,11 @@ export class Recording { } public getName(): string { - return this.name; + return this.recordingProperties.name(); + } + + public getLayout(): RecordingLayout { + return this.recordingProperties.recordingLayout(); } public getSessionId(): string { diff --git a/openvidu-node-client/src/RecordingProperties.ts b/openvidu-node-client/src/RecordingProperties.ts index 00b0b2da..a756edcc 100644 --- a/openvidu-node-client/src/RecordingProperties.ts +++ b/openvidu-node-client/src/RecordingProperties.ts @@ -15,28 +15,40 @@ * */ +import { RecordingLayout } from "./RecordingLayout"; + export class RecordingProperties { - constructor(private rName: string) { } + constructor(private rName: string, private recordingLayoutProp: RecordingLayout) { } name(): string { return this.rName; } + recordingLayout(): RecordingLayout { + return this.recordingLayoutProp; + } + } export namespace RecordingProperties { export class Builder { private rName: string = ''; + private recordingLayoutProp: RecordingLayout; build(): RecordingProperties { - return new RecordingProperties(this.rName); + return new RecordingProperties(this.rName, this.recordingLayoutProp); } name(name: string): Builder { this.rName = name; return this; } + + recordingLayout(layout: RecordingLayout): Builder { + this.recordingLayoutProp = layout; + return this; + } }; } \ No newline at end of file diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index 1974bb41..bdac0c9c 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -48,7 +48,7 @@ export class Session { } let requestBody = JSON.stringify({ - 'recordingLayout': this.properties.recordingLayout(), + 'defaultRecordingLayout': this.properties.defaultRecordingLayout(), 'recordingMode': this.properties.recordingMode(), 'mediaMode': this.properties.mediaMode() }); diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts index 0d47ec07..8ab8d083 100644 --- a/openvidu-node-client/src/SessionProperties.ts +++ b/openvidu-node-client/src/SessionProperties.ts @@ -21,7 +21,7 @@ import { RecordingLayout } from "./RecordingLayout"; export class SessionProperties { - constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private recordingLayoutProp: RecordingLayout) { } + constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private defaultRecordingLayoutProp: RecordingLayout) { } mediaMode(): string { return this.mediaModeProp; @@ -31,8 +31,8 @@ export class SessionProperties { return this.recordingModeProp; } - recordingLayout(): RecordingLayout { - return this.recordingLayoutProp; + defaultRecordingLayout(): RecordingLayout { + return this.defaultRecordingLayoutProp; } } @@ -41,10 +41,10 @@ export namespace SessionProperties { private mediaModeProp: MediaMode = MediaMode.ROUTED; private recordingModeProp: RecordingMode = RecordingMode.MANUAL; - private recordingLayoutProp: RecordingLayout = RecordingLayout.BEST_FIT; + private defaultRecordingLayoutProp: RecordingLayout = RecordingLayout.BEST_FIT; build(): SessionProperties { - return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.recordingLayoutProp); + return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.defaultRecordingLayoutProp); } mediaMode(mediaMode: MediaMode): Builder { @@ -57,8 +57,8 @@ export namespace SessionProperties { return this; } - recordingLayout(recordingLayout: RecordingLayout): Builder { - this.recordingLayoutProp = recordingLayout; + defaultRecordingLayout(layout: RecordingLayout): Builder { + this.defaultRecordingLayoutProp = layout; return this; } }; diff --git a/openvidu-node-client/src/index.ts b/openvidu-node-client/src/index.ts index 0a5ed785..6df32be9 100644 --- a/openvidu-node-client/src/index.ts +++ b/openvidu-node-client/src/index.ts @@ -6,4 +6,5 @@ export * from './TokenOptions'; export * from './MediaMode'; export * from './RecordingLayout'; export * from './RecordingMode'; -export * from './Recording'; \ No newline at end of file +export * from './Recording'; +export * from './RecordingProperties'; \ No newline at end of file From a228b1242e29641bbf8fdda8fe7bc5dabbc92f3c Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 12:10:06 +0200 Subject: [PATCH 19/60] openvidu-server: added RecordingProperties feature --- .../java/io/openvidu/server/cdr/CDREvent.java | 6 ++ .../kurento/core/KurentoSessionManager.java | 7 ++- .../recording/ComposedRecordingService.java | 18 +++--- .../openvidu/server/recording/Recording.java | 39 ++++++++----- .../server/rest/SessionRestController.java | 56 +++++++++++++------ 5 files changed, 87 insertions(+), 39 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java index 2fbd2212..db9e205d 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREvent.java @@ -2,6 +2,7 @@ package io.openvidu.server.cdr; import org.json.simple.JSONObject; +import io.openvidu.java.client.RecordingLayout; import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; import io.openvidu.server.recording.Recording; @@ -33,6 +34,7 @@ public class CDREvent implements Comparable { private String name; private Boolean hasAudio; private Boolean hasVideo; + private RecordingLayout layout; public CDREvent(String eventName, CDREvent event) { this(eventName, event.participant, event.sessionId, event.mediaOptions, event.receivingFrom, event.startTime, event.reason); @@ -69,6 +71,7 @@ public class CDREvent implements Comparable { this.size = recording.getSize(); this.hasAudio = recording.hasAudio(); this.hasVideo = recording.hasVideo(); + this.layout = recording.getLayout(); } public CDREvent(String eventName, Participant participant, String sessionId) { @@ -146,6 +149,9 @@ public class CDREvent implements Comparable { if (this.hasVideo != null) { json.put("hasVideo", this.hasVideo); } + if (this.layout != null) { + json.put("layout", this.layout.name()); + } JSONObject root = new JSONObject(); root.put(this.eventName, json); diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index 493555fd..fffd7d88 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -20,6 +20,7 @@ import io.openvidu.client.OpenViduException.Code; import io.openvidu.client.internal.ProtocolElements; import io.openvidu.java.client.RecordingLayout; import io.openvidu.java.client.RecordingMode; +import io.openvidu.java.client.RecordingProperties; import io.openvidu.java.client.MediaMode; import io.openvidu.java.client.SessionProperties; import io.openvidu.server.core.SessionManager; @@ -55,7 +56,8 @@ public class KurentoSessionManager extends SessionManager { SessionProperties properties = sessionProperties.get(sessionId); if (properties == null && this.isInsecureParticipant(participant.getParticipantPrivateId())) { properties = new SessionProperties.Builder().mediaMode(MediaMode.ROUTED) - .recordingMode(RecordingMode.ALWAYS).recordingLayout(RecordingLayout.BEST_FIT).build(); + .recordingMode(RecordingMode.ALWAYS).defaultRecordingLayout(RecordingLayout.BEST_FIT) + .build(); } createSession(kcSessionInfo, properties); } @@ -235,7 +237,8 @@ public class KurentoSessionManager extends SessionManager { && session.getActivePublishers() == 0) { // Insecure session recording new Thread(() -> { - recordingService.startRecording(session, null); + recordingService.startRecording(session, new RecordingProperties.Builder().name("") + .recordingLayout(session.getSessionProperties().defaultRecordingLayout()).build()); }).start(); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index bb196ff6..ceb38c84 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -47,6 +47,7 @@ import com.github.dockerjava.core.command.PullImageResultCallback; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; +import io.openvidu.java.client.RecordingProperties; import io.openvidu.server.CommandExecutor; import io.openvidu.server.OpenViduServer; import io.openvidu.server.config.OpenviduConfig; @@ -81,19 +82,20 @@ public class ComposedRecordingService { this.dockerClient = DockerClientBuilder.getInstance(config).build(); } - public Recording startRecording(Session session, String name) { + public Recording startRecording(Session session, RecordingProperties properties) { List envs = new ArrayList<>(); String shortSessionId = session.getSessionId().substring(session.getSessionId().lastIndexOf('/') + 1, session.getSessionId().length()); String recordingId = this.getFreeRecordingId(session.getSessionId(), shortSessionId); String secret = openviduConfig.getOpenViduSecret(); - if (name == null || name.isEmpty()) { + if (properties.name() == null || properties.name().isEmpty()) { // No name provided for the recording file - name = recordingId; + properties = new RecordingProperties.Builder().name(recordingId) + .recordingLayout(properties.recordingLayout()).build(); } - Recording recording = new Recording(session.getSessionId(), recordingId, name); + Recording recording = new Recording(session.getSessionId(), recordingId, properties); this.sessionsRecordings.put(session.getSessionId(), recording); this.sessionHandler.setRecordingStarted(session.getSessionId(), recording); @@ -110,14 +112,14 @@ public class ComposedRecordingService { } String location = OpenViduServer.publicUrl.replaceFirst("wss://", ""); - String layoutUrl = session.getSessionProperties().recordingLayout().name().toLowerCase().replaceAll("_", "-"); + String layoutUrl = properties.recordingLayout().name().toLowerCase().replaceAll("_", "-"); envs.add("URL=https://OPENVIDUAPP:" + secret + "@" + location + "/#/layout-" + layoutUrl + "/" + shortSessionId + "/" + secret); envs.add("RESOLUTION=1920x1080"); envs.add("FRAMERATE=30"); envs.add("VIDEO_ID=" + recordingId); - envs.add("VIDEO_NAME=" + name); + envs.add("VIDEO_NAME=" + properties.name()); envs.add("VIDEO_FORMAT=mp4"); envs.add("USER_ID=" + uid); envs.add("RECORDING_JSON=" + recording.toJson().toJSONString()); @@ -128,7 +130,7 @@ public class ComposedRecordingService { String containerId = this.runRecordingContainer(envs, "recording_" + recordingId); - this.waitForVideoFileNotEmpty(name); + this.waitForVideoFileNotEmpty(properties.name()); this.sessionsContainers.put(session.getSessionId(), containerId); @@ -378,7 +380,7 @@ public class ComposedRecordingService { // Cannot delete an active recording return HttpStatus.CONFLICT; } - + String name = getRecordingFromHost(recordingId).getName(); File folder = new File(this.openviduConfig.getOpenViduRecordingPath()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java index 47038181..e49770a1 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java @@ -2,6 +2,9 @@ package io.openvidu.server.recording; import org.json.simple.JSONObject; +import io.openvidu.java.client.RecordingLayout; +import io.openvidu.java.client.RecordingProperties; + public class Recording { public enum Status { @@ -9,14 +12,13 @@ public class Recording { started, // The recording has started and is going on stopped, // The recording has finished OK available, // The recording is available for downloading. This status is reached for all - // stopped recordings if property 'openvidu.recording.free-access' is true + // stopped recordings if property 'openvidu.recording.free-access' is true failed; // The recording has failed } - private Status status; + private Recording.Status status; private String id; - private String name; private String sessionId; private long createdAt; // milliseconds (UNIX Epoch time) private long size = 0; // bytes @@ -24,18 +26,18 @@ public class Recording { private String url; private boolean hasAudio = true; private boolean hasVideo = true; + private RecordingProperties recordingProperties; - public Recording(String sessionId, String id, String name) { + public Recording(String sessionId, String id, RecordingProperties recordingProperties) { this.sessionId = sessionId; this.createdAt = System.currentTimeMillis(); this.id = id; - this.name = name; this.status = Status.started; + this.recordingProperties = recordingProperties; } public Recording(JSONObject json) { this.id = (String) json.get("id"); - this.name = (String) json.get("name"); this.sessionId = (String) json.get("sessionId"); this.createdAt = (long) json.get("createdAt"); this.size = (long) json.get("size"); @@ -44,6 +46,8 @@ public class Recording { this.hasAudio = (boolean) json.get("hasAudio"); this.hasVideo = (boolean) json.get("hasVideo"); this.status = Status.valueOf((String) json.get("status")); + this.recordingProperties = new RecordingProperties.Builder().name((String) json.get("name")) + .recordingLayout(RecordingLayout.valueOf((String) json.get("layout"))).build(); } public Status getStatus() { @@ -62,13 +66,21 @@ public class Recording { this.id = id; } - public String getName() { - return name; - } + public String getName() { + return this.recordingProperties.name(); + } + + public String setName() { + return this.recordingProperties.name(); + } - public void setName(String name) { - this.name = name; - } + public RecordingLayout getLayout() { + return this.recordingProperties.recordingLayout(); + } + + public RecordingLayout setLayout() { + return this.recordingProperties.recordingLayout(); + } public String getSessionId() { return sessionId; @@ -130,7 +142,8 @@ public class Recording { public JSONObject toJson() { JSONObject json = new JSONObject(); json.put("id", this.id); - json.put("name", this.name); + json.put("name", this.recordingProperties.name()); + json.put("layout", this.recordingProperties.recordingLayout().name()); json.put("sessionId", this.sessionId); json.put("createdAt", this.createdAt); json.put("size", this.size); diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index f5a64834..8903f299 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -37,6 +37,7 @@ import io.openvidu.client.OpenViduException; import io.openvidu.client.internal.ProtocolElements; import io.openvidu.java.client.RecordingLayout; import io.openvidu.java.client.RecordingMode; +import io.openvidu.java.client.RecordingProperties; import io.openvidu.java.client.MediaMode; import io.openvidu.java.client.SessionProperties; import io.openvidu.server.core.ParticipantRole; @@ -72,7 +73,7 @@ public class SessionRestController { SessionProperties.Builder builder = new SessionProperties.Builder(); if (params != null) { String recordingModeString = (String) params.get("recordingMode"); - String recordingLayoutString = (String) params.get("recordingLayout"); + String defaultRecordingLayoutString = (String) params.get("defaultRecordingLayout"); String mediaModeString = (String) params.get("mediaMode"); try { @@ -80,18 +81,18 @@ public class SessionRestController { RecordingMode recordingMode = RecordingMode.valueOf(recordingModeString); builder = builder.recordingMode(recordingMode); } - if (recordingLayoutString != null) { - RecordingLayout recordingLayout = RecordingLayout.valueOf(recordingLayoutString); - builder = builder.recordingLayout(recordingLayout); + if (defaultRecordingLayoutString != null) { + RecordingLayout defaultRecordingLayout = RecordingLayout.valueOf(defaultRecordingLayoutString); + builder = builder.defaultRecordingLayout(defaultRecordingLayout); } if (mediaModeString != null) { MediaMode mediaMode = MediaMode.valueOf(mediaModeString); builder = builder.mediaMode(mediaMode); } } catch (IllegalArgumentException e) { - return this.generateErrorResponse("RecordingMode " + params.get("recordingMode") + " | " + "RecordingLayout " - + params.get("recordingLayout") + " | " + "MediaMode " + params.get("mediaMode") - + " are not defined", "/api/tokens", HttpStatus.BAD_REQUEST); + return this.generateErrorResponse("RecordingMode " + params.get("recordingMode") + " | " + + "Default RecordingLayout " + params.get("defaultRecordingLayout") + " | " + "MediaMode " + + params.get("mediaMode") + " are not defined", "/api/tokens", HttpStatus.BAD_REQUEST); } } @@ -109,9 +110,20 @@ public class SessionRestController { try { String sessionId = (String) params.get("session"); - ParticipantRole role = ParticipantRole.valueOf((String) params.get("role")); + String roleString = (String) params.get("role"); String metadata = (String) params.get("data"); + ParticipantRole role; + if (roleString != null) { + role = ParticipantRole.valueOf(roleString); + } else { + role = ParticipantRole.PUBLISHER; + } + + if (metadata == null) { + metadata = ""; + } + String token = sessionManager.newToken(sessionId, role, metadata); JSONObject responseJson = new JSONObject(); responseJson.put("id", token); @@ -136,6 +148,7 @@ public class SessionRestController { String sessionId = (String) params.get("session"); String name = (String) params.get("name"); + String recordingLayoutString = (String) params.get("recordingLayout"); if (sessionId == null) { // "session" parameter not found @@ -158,7 +171,18 @@ public class SessionRestController { return new ResponseEntity(HttpStatus.CONFLICT); } - Recording startedRecording = this.recordingService.startRecording(session, name); + RecordingLayout recordingLayout; + if (recordingLayoutString == null || recordingLayoutString.isEmpty()) { + // "recordingLayout" parameter not defined. Use global layout from + // SessionProperties + // (it is always configured as it has RecordingLayout.BEST_FIT as default value) + recordingLayout = session.getSessionProperties().defaultRecordingLayout(); + } else { + recordingLayout = RecordingLayout.valueOf(recordingLayoutString); + } + + Recording startedRecording = this.recordingService.startRecording(session, + new RecordingProperties.Builder().name(name).recordingLayout(recordingLayout).build()); return new ResponseEntity<>(startedRecording.toJson(), HttpStatus.OK); } @@ -184,14 +208,14 @@ public class SessionRestController { // Session is not being recorded return new ResponseEntity(HttpStatus.CONFLICT); } - + Session session = sessionManager.getSession(recording.getSessionId()); - - Recording stoppedRecording = this.recordingService - .stopRecording(session); - - sessionManager.evictParticipant(session.getParticipantByPublicId(ProtocolElements.RECORDER_PARTICIPANT_PUBLICID).getParticipantPrivateId(), "EVICT_RECORDER"); - + + Recording stoppedRecording = this.recordingService.stopRecording(session); + + sessionManager.evictParticipant(session.getParticipantByPublicId(ProtocolElements.RECORDER_PARTICIPANT_PUBLICID) + .getParticipantPrivateId(), "EVICT_RECORDER"); + return new ResponseEntity<>(stoppedRecording.toJson(), HttpStatus.OK); } From fc8c18e0548da8684555c99851fecae69bdd489b Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 15:50:19 +0200 Subject: [PATCH 20/60] openvidu-java-client: custom recording layout --- .../io/openvidu/java/client/OpenVidu.java | 2 ++ .../openvidu/java/client/RecordingLayout.java | 3 +- .../java/client/RecordingProperties.java | 28 +++++++++++++------ .../java/io/openvidu/java/client/Session.java | 5 ++-- .../java/client/SessionProperties.java | 19 +++++++++++-- 5 files changed, 44 insertions(+), 13 deletions(-) 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 f1175364..febcc86e 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 @@ -98,6 +98,8 @@ public class OpenVidu { json.put("name", properties.name()); json.put("recordingLayout", (properties.recordingLayout() != null) ? properties.recordingLayout().name() : ""); + json.put("customLayout", + (properties.customLayout() != null) ? properties.customLayout() : ""); StringEntity params = new StringEntity(json.toString()); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java index d66402f2..65b91351 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingLayout.java @@ -4,5 +4,6 @@ public enum RecordingLayout { BEST_FIT, // All the videos are evenly distributed, taking up as much space as possible PICTURE_IN_PICTURE, VERTICAL_PRESENTATION, - HORIZONTAL_PRESENTATION + HORIZONTAL_PRESENTATION, + CUSTOM } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java index f36c0904..c49a9657 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/RecordingProperties.java @@ -1,42 +1,54 @@ package io.openvidu.java.client; public class RecordingProperties { - + private String name; private RecordingLayout recordingLayout; - + private String customLayout; + public static class Builder { private String name = ""; private RecordingLayout recordingLayout; + private String customLayout; public RecordingProperties build() { - return new RecordingProperties(this.name, this.recordingLayout); + return new RecordingProperties(this.name, this.recordingLayout, this.customLayout); } public RecordingProperties.Builder name(String name) { this.name = name; return this; } - + public RecordingProperties.Builder recordingLayout(RecordingLayout layout) { this.recordingLayout = layout; return this; } + public RecordingProperties.Builder customLayout(String path) { + this.customLayout = path; + return this; + } + } - - protected RecordingProperties(String name, RecordingLayout layout) { + + protected RecordingProperties(String name, RecordingLayout layout, String customLayout) { this.name = name; this.recordingLayout = layout; + this.customLayout = customLayout; } - + public String name() { return this.name; } - + public RecordingLayout recordingLayout() { return this.recordingLayout; } + public String customLayout() { + return this.customLayout; + } + } diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java index 65a4d000..cf23ec96 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java @@ -44,9 +44,10 @@ public class Session { HttpPost request = new HttpPost(this.urlOpenViduServer + API_SESSIONS); JSONObject json = new JSONObject(); - json.put("defaultRecordingLayout", properties.defaultRecordingLayout().name()); - json.put("recordingMode", properties.recordingMode().name()); json.put("mediaMode", properties.mediaMode().name()); + json.put("recordingMode", properties.recordingMode().name()); + json.put("defaultRecordingLayout", properties.defaultRecordingLayout().name()); + json.put("defaultCustomLayout", properties.defaultCustomLayout()); StringEntity params = new StringEntity(json.toString()); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java index e5c54251..9c9e089f 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/SessionProperties.java @@ -5,15 +5,18 @@ public class SessionProperties { private MediaMode mediaMode; private RecordingMode recordingMode; private RecordingLayout defaultRecordingLayout; + private String defaultCustomLayout; public static class Builder { private MediaMode mediaMode = MediaMode.ROUTED; private RecordingMode recordingMode = RecordingMode.MANUAL; private RecordingLayout defaultRecordingLayout = RecordingLayout.BEST_FIT; + private String defaultCustomLayout = ""; public SessionProperties build() { - return new SessionProperties(this.mediaMode, this.recordingMode, this.defaultRecordingLayout); + return new SessionProperties(this.mediaMode, this.recordingMode, this.defaultRecordingLayout, + this.defaultCustomLayout); } public SessionProperties.Builder mediaMode(MediaMode mediaMode) { @@ -31,18 +34,26 @@ public class SessionProperties { return this; } + public SessionProperties.Builder defaultCustomLayout(String path) { + this.defaultCustomLayout = path; + return this; + } + } protected SessionProperties() { this.mediaMode = MediaMode.ROUTED; this.recordingMode = RecordingMode.MANUAL; this.defaultRecordingLayout = RecordingLayout.BEST_FIT; + this.defaultCustomLayout = ""; } - private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, RecordingLayout layout) { + private SessionProperties(MediaMode mediaMode, RecordingMode recordingMode, RecordingLayout layout, + String defaultCustomLayout) { this.mediaMode = mediaMode; this.recordingMode = recordingMode; this.defaultRecordingLayout = layout; + this.defaultCustomLayout = defaultCustomLayout; } public RecordingMode recordingMode() { @@ -57,4 +68,8 @@ public class SessionProperties { return this.defaultRecordingLayout; } + public String defaultCustomLayout() { + return this.defaultCustomLayout; + } + } \ No newline at end of file From 13b4bf0f3a05382f3e130b73225b2b9f94386f16 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 15:50:56 +0200 Subject: [PATCH 21/60] openvidu-node-client: custom recording layout --- openvidu-node-client/lib/OpenVidu.js | 9 ++++++--- openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/Session.js | 5 +++-- openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/src/OpenVidu.ts | 9 ++++++--- openvidu-node-client/src/RecordingLayout.ts | 3 ++- openvidu-node-client/src/RecordingProperties.ts | 14 ++++++++++++-- openvidu-node-client/src/Session.ts | 5 +++-- openvidu-node-client/src/SessionProperties.ts | 14 ++++++++++++-- 9 files changed, 46 insertions(+), 17 deletions(-) diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index de303934..11f721d3 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -38,14 +38,16 @@ var OpenVidu = /** @class */ (function () { requestBody = JSON.stringify({ session: sessionId, name: properties.name(), - recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : '') + recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : ''), + customLayout: (!!properties.customLayout() ? properties.customLayout() : '') }); } else { requestBody = JSON.stringify({ session: sessionId, name: param2, - recordingLayout: '' + recordingLayout: '', + customLayout: '' }); } } @@ -53,7 +55,8 @@ var OpenVidu = /** @class */ (function () { requestBody = JSON.stringify({ session: sessionId, name: '', - recordingLayout: '' + recordingLayout: '', + customLayout: '' }); } var options = { diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index 0783911b..46d350c0 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index 66748a54..d237610b 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -39,9 +39,10 @@ var Session = /** @class */ (function () { resolve(_this.sessionId); } var requestBody = JSON.stringify({ - 'defaultRecordingLayout': _this.properties.defaultRecordingLayout(), + 'mediaMode': _this.properties.mediaMode(), 'recordingMode': _this.properties.recordingMode(), - 'mediaMode': _this.properties.mediaMode() + 'defaultRecordingLayout': _this.properties.defaultRecordingLayout(), + 'defaultCustomLayout': _this.properties.defaultCustomLayout() }); var options = { hostname: _this.hostname, diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 6b8b1f84..84bdf66a 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 33cae3ec..f4550b00 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -58,20 +58,23 @@ export class OpenVidu { requestBody = JSON.stringify({ session: sessionId, name: properties.name(), - recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : '') + recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : ''), + customLayout: (!!properties.customLayout() ? properties.customLayout() : '') }); } else { requestBody = JSON.stringify({ session: sessionId, name: param2, - recordingLayout: '' + recordingLayout: '', + customLayout: '' }); } } else { requestBody = JSON.stringify({ session: sessionId, name: '', - recordingLayout: '' + recordingLayout: '', + customLayout: '' }); } diff --git a/openvidu-node-client/src/RecordingLayout.ts b/openvidu-node-client/src/RecordingLayout.ts index 9771e5c9..63a4c292 100644 --- a/openvidu-node-client/src/RecordingLayout.ts +++ b/openvidu-node-client/src/RecordingLayout.ts @@ -19,5 +19,6 @@ export enum RecordingLayout { BEST_FIT = 'BEST_FIT', // All the videos are evenly distributed, taking up as much space as possible PICTURE_IN_PICTURE = 'PICTURE_IN_PICTURE', VERTICAL_PRESENTATION = 'VERTICAL_PRESENTATION', - HORIZONTAL_PRESENTATION = 'VERTICAL_PRESENTATION' + HORIZONTAL_PRESENTATION = 'VERTICAL_PRESENTATION', + CUSTOM = 'CUSTOM' } diff --git a/openvidu-node-client/src/RecordingProperties.ts b/openvidu-node-client/src/RecordingProperties.ts index a756edcc..ab7ab644 100644 --- a/openvidu-node-client/src/RecordingProperties.ts +++ b/openvidu-node-client/src/RecordingProperties.ts @@ -19,7 +19,7 @@ import { RecordingLayout } from "./RecordingLayout"; export class RecordingProperties { - constructor(private rName: string, private recordingLayoutProp: RecordingLayout) { } + constructor(private rName: string, private recordingLayoutProp: RecordingLayout, private customLayoutProp: string) { } name(): string { return this.rName; @@ -29,6 +29,10 @@ export class RecordingProperties { return this.recordingLayoutProp; } + customLayout(): string { + return this.customLayoutProp; + } + } export namespace RecordingProperties { @@ -36,9 +40,10 @@ export namespace RecordingProperties { private rName: string = ''; private recordingLayoutProp: RecordingLayout; + private customLayoutProp: string; build(): RecordingProperties { - return new RecordingProperties(this.rName, this.recordingLayoutProp); + return new RecordingProperties(this.rName, this.recordingLayoutProp, this.customLayoutProp); } name(name: string): Builder { @@ -50,5 +55,10 @@ export namespace RecordingProperties { this.recordingLayoutProp = layout; return this; } + + customLayout(path: string): Builder { + this.customLayoutProp = path; + return this; + } }; } \ No newline at end of file diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index bdac0c9c..d402b494 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -48,9 +48,10 @@ export class Session { } let requestBody = JSON.stringify({ - 'defaultRecordingLayout': this.properties.defaultRecordingLayout(), + 'mediaMode': this.properties.mediaMode(), 'recordingMode': this.properties.recordingMode(), - 'mediaMode': this.properties.mediaMode() + 'defaultRecordingLayout': this.properties.defaultRecordingLayout(), + 'defaultCustomLayout': this.properties.defaultCustomLayout() }); let options = { diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts index 8ab8d083..366aa653 100644 --- a/openvidu-node-client/src/SessionProperties.ts +++ b/openvidu-node-client/src/SessionProperties.ts @@ -21,7 +21,7 @@ import { RecordingLayout } from "./RecordingLayout"; export class SessionProperties { - constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private defaultRecordingLayoutProp: RecordingLayout) { } + constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private defaultRecordingLayoutProp: RecordingLayout, private defaultCustomLayoutProp: string) { } mediaMode(): string { return this.mediaModeProp; @@ -34,6 +34,10 @@ export class SessionProperties { defaultRecordingLayout(): RecordingLayout { return this.defaultRecordingLayoutProp; } + + defaultCustomLayout(): string { + return this.defaultCustomLayoutProp; + } } export namespace SessionProperties { @@ -42,9 +46,10 @@ export namespace SessionProperties { private mediaModeProp: MediaMode = MediaMode.ROUTED; private recordingModeProp: RecordingMode = RecordingMode.MANUAL; private defaultRecordingLayoutProp: RecordingLayout = RecordingLayout.BEST_FIT; + private defaultCustomLayoutProp: string = ''; build(): SessionProperties { - return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.defaultRecordingLayoutProp); + return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.defaultRecordingLayoutProp, this.defaultCustomLayoutProp); } mediaMode(mediaMode: MediaMode): Builder { @@ -61,5 +66,10 @@ export namespace SessionProperties { this.defaultRecordingLayoutProp = layout; return this; } + + defaultCustomLayout(path: string): Builder { + this.defaultCustomLayoutProp = path; + return this; + } }; } From 43894c215b281f0b300aacaef5e9f0a4b26211c7 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 20 Apr 2018 15:53:20 +0200 Subject: [PATCH 22/60] openvidu-server: custom recording layout --- .../server/config/OpenviduConfig.java | 15 +++++- .../server/config/SecurityConfig.java | 54 ++++++++++--------- .../kurento/core/KurentoSessionManager.java | 6 ++- .../recording/ComposedRecordingService.java | 34 +++++++++--- .../server/recording/LayoutsHttpHandler.java | 27 ++++++++++ .../openvidu/server/recording/Recording.java | 24 ++++----- .../server/rest/SessionRestController.java | 22 ++++++-- ...itional-spring-configuration-metadata.json | 5 ++ .../src/main/resources/application.properties | 3 +- .../test-apirest/test-apirest.component.ts | 2 +- 10 files changed, 133 insertions(+), 59 deletions(-) create mode 100644 openvidu-server/src/main/java/io/openvidu/server/recording/LayoutsHttpHandler.java diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java index 82299eb5..cb294e6a 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java @@ -32,6 +32,9 @@ public class OpenviduConfig { @Value("${openvidu.recording.notification}") String openviduRecordingNotification; + @Value("${openvidu.recording.custom-layout}") + String openviduRecordingCustomLayout; + @Value("${openvidu.recording.version}") String openviduRecordingVersion; @@ -68,12 +71,20 @@ public class OpenviduConfig { return this.openviduRecordingPath; } + public void setOpenViduRecordingPath(String recordingPath) { + this.openviduRecordingPath = recordingPath; + } + public boolean getOpenViduRecordingPublicAccess() { return this.openviduRecordingPublicAccess; } + + public String getOpenviduRecordingCustomLayout() { + return this.openviduRecordingCustomLayout; + } - public void setOpenViduRecordingPath(String recordingPath) { - this.openviduRecordingPath = recordingPath; + public void setOpenViduRecordingCustomLayout(String recordingCustomLayout) { + this.openviduRecordingCustomLayout = recordingCustomLayout; } public String getFinalUrl() { diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java index 5b8fbe6d..92d37bff 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/SecurityConfig.java @@ -11,38 +11,40 @@ import org.springframework.security.config.http.SessionCreationPolicy; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { - + @Autowired OpenviduConfig openviduConf; - + @Override protected void configure(HttpSecurity http) throws Exception { + + // Security for API REST ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry conf = http.csrf().disable() - .authorizeRequests() - .antMatchers(HttpMethod.POST, "/api/sessions").authenticated() - .antMatchers(HttpMethod.POST, "/api/tokens").authenticated() - .antMatchers(HttpMethod.POST, "/api/recordings/start").authenticated() - .antMatchers(HttpMethod.POST, "/api/recordings/stop").authenticated() - .antMatchers(HttpMethod.GET, "/api/recordings").authenticated() - .antMatchers(HttpMethod.GET, "/api/recordings/**").authenticated() - .antMatchers(HttpMethod.DELETE, "/api/recordings/**").authenticated() - .antMatchers(HttpMethod.GET, "/config/**").authenticated() - .antMatchers("/").authenticated(); - - if (openviduConf.getOpenViduRecordingPublicAccess()) { - conf = conf.antMatchers("/recordings/*").permitAll(); - } else { - conf = conf.antMatchers("/recordings/*").authenticated(); - } - - conf.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and().httpBasic(); + .authorizeRequests().antMatchers(HttpMethod.POST, "/api/sessions").authenticated() + .antMatchers(HttpMethod.POST, "/api/tokens").authenticated() + .antMatchers(HttpMethod.POST, "/api/recordings/start").authenticated() + .antMatchers(HttpMethod.POST, "/api/recordings/stop").authenticated() + .antMatchers(HttpMethod.GET, "/api/recordings").authenticated() + .antMatchers(HttpMethod.GET, "/api/recordings/**").authenticated() + .antMatchers(HttpMethod.DELETE, "/api/recordings/**").authenticated() + .antMatchers(HttpMethod.GET, "/config/**").authenticated().antMatchers("/").authenticated(); + + // Security for layouts + conf.antMatchers("/layouts/*").authenticated(); + + // Security for recorded videos + if (openviduConf.getOpenViduRecordingPublicAccess()) { + conf = conf.antMatchers("/recordings/*").permitAll(); + } else { + conf = conf.antMatchers("/recordings/*").authenticated(); + } + + conf.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().httpBasic(); } - + @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser("OPENVIDUAPP").password(openviduConf.getOpenViduSecret()).roles("ADMIN"); - } + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication().withUser("OPENVIDUAPP").password(openviduConf.getOpenViduSecret()).roles("ADMIN"); + } } \ No newline at end of file diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index fffd7d88..b184fef8 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -237,8 +237,10 @@ public class KurentoSessionManager extends SessionManager { && session.getActivePublishers() == 0) { // Insecure session recording new Thread(() -> { - recordingService.startRecording(session, new RecordingProperties.Builder().name("") - .recordingLayout(session.getSessionProperties().defaultRecordingLayout()).build()); + recordingService.startRecording(session, + new RecordingProperties.Builder().name("") + .recordingLayout(session.getSessionProperties().defaultRecordingLayout()) + .customLayout(session.getSessionProperties().defaultCustomLayout()).build()); }).start(); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index ceb38c84..2062c8fa 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -47,6 +47,7 @@ import com.github.dockerjava.core.command.PullImageResultCallback; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; +import io.openvidu.java.client.RecordingLayout; import io.openvidu.java.client.RecordingProperties; import io.openvidu.server.CommandExecutor; import io.openvidu.server.OpenViduServer; @@ -87,12 +88,11 @@ public class ComposedRecordingService { String shortSessionId = session.getSessionId().substring(session.getSessionId().lastIndexOf('/') + 1, session.getSessionId().length()); String recordingId = this.getFreeRecordingId(session.getSessionId(), shortSessionId); - String secret = openviduConfig.getOpenViduSecret(); if (properties.name() == null || properties.name().isEmpty()) { // No name provided for the recording file properties = new RecordingProperties.Builder().name(recordingId) - .recordingLayout(properties.recordingLayout()).build(); + .recordingLayout(properties.recordingLayout()).customLayout(properties.customLayout()).build(); } Recording recording = new Recording(session.getSessionId(), recordingId, properties); @@ -111,11 +111,9 @@ public class ComposedRecordingService { e.printStackTrace(); } - String location = OpenViduServer.publicUrl.replaceFirst("wss://", ""); - String layoutUrl = properties.recordingLayout().name().toLowerCase().replaceAll("_", "-"); + String layoutUrl = this.getLayoutUrl(recording, shortSessionId); - envs.add("URL=https://OPENVIDUAPP:" + secret + "@" + location + "/#/layout-" + layoutUrl + "/" + shortSessionId - + "/" + secret); + envs.add("URL=" + layoutUrl); envs.add("RESOLUTION=1920x1080"); envs.add("FRAMERATE=30"); envs.add("VIDEO_ID=" + recordingId); @@ -125,8 +123,7 @@ public class ComposedRecordingService { envs.add("RECORDING_JSON=" + recording.toJson().toJSONString()); log.info(recording.toJson().toJSONString()); - log.debug("Recorder connecting to url {}", - "https://OPENVIDUAPP:" + secret + "@localhost:8443/#/layout-best-fit/" + shortSessionId + "/" + secret); + log.debug("Recorder connecting to url {}", layoutUrl); String containerId = this.runRecordingContainer(envs, "recording_" + recordingId); @@ -456,6 +453,27 @@ public class ComposedRecordingService { throw e; } + private String getLayoutUrl(Recording recording, String shortSessionId) { + String secret = openviduConfig.getOpenViduSecret(); + String location = OpenViduServer.publicUrl.replaceFirst("wss://", ""); + String layout, finalUrl; + + if (RecordingLayout.CUSTOM.equals(recording.getLayout())) { + layout = recording.getCustomLayout(); + layout = layout.startsWith("/") ? layout.substring(1) : layout; + layout = layout.endsWith("/") ? layout.substring(0, layout.length() - 1) : layout; + layout += "/index.html"; + finalUrl = "https://OPENVIDUAPP:" + secret + "@" + location + "/layouts/custom/" + layout + "/?sessionId=" + + shortSessionId + "&secret=" + secret; + } else { + layout = recording.getLayout().name().toLowerCase().replaceAll("_", "-"); + finalUrl = "https://OPENVIDUAPP:" + secret + "@" + location + "/#/layout-" + layout + "/" + shortSessionId + + "/" + secret; + } + + return finalUrl; + } + public void setRecordingVersion(String version) { this.IMAGE_TAG = version; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/LayoutsHttpHandler.java b/openvidu-server/src/main/java/io/openvidu/server/recording/LayoutsHttpHandler.java new file mode 100644 index 00000000..e1b30bad --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/LayoutsHttpHandler.java @@ -0,0 +1,27 @@ +package io.openvidu.server.recording; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import io.openvidu.server.config.OpenviduConfig; + +@Configuration +public class LayoutsHttpHandler extends WebMvcConfigurerAdapter { + + @Autowired + OpenviduConfig openviduConfig; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + + String customLayoutsPath = openviduConfig.getOpenviduRecordingCustomLayout(); + customLayoutsPath = customLayoutsPath.endsWith("/") ? customLayoutsPath : customLayoutsPath + "/"; + + openviduConfig.setOpenViduRecordingCustomLayout(customLayoutsPath); + + registry.addResourceHandler("/layouts/custom/**").addResourceLocations("file:" + customLayoutsPath); + } + +} \ No newline at end of file diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java index e49770a1..5dc9c4bb 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/Recording.java @@ -66,21 +66,17 @@ public class Recording { this.id = id; } - public String getName() { - return this.recordingProperties.name(); - } - - public String setName() { - return this.recordingProperties.name(); - } + public String getName() { + return this.recordingProperties.name(); + } - public RecordingLayout getLayout() { - return this.recordingProperties.recordingLayout(); - } - - public RecordingLayout setLayout() { - return this.recordingProperties.recordingLayout(); - } + public RecordingLayout getLayout() { + return this.recordingProperties.recordingLayout(); + } + + public String getCustomLayout() { + return this.recordingProperties.customLayout(); + } public String getSessionId() { return sessionId; diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 8903f299..3b103bee 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -72,23 +72,34 @@ public class SessionRestController { SessionProperties.Builder builder = new SessionProperties.Builder(); if (params != null) { + String mediaModeString = (String) params.get("mediaMode"); String recordingModeString = (String) params.get("recordingMode"); String defaultRecordingLayoutString = (String) params.get("defaultRecordingLayout"); - String mediaModeString = (String) params.get("mediaMode"); + String defaultCustomLayout = (String) params.get("defaultCustomLayout"); try { + + // Safe parameter retrieval. Default values if not defined if (recordingModeString != null) { RecordingMode recordingMode = RecordingMode.valueOf(recordingModeString); builder = builder.recordingMode(recordingMode); + } else { + builder = builder.recordingMode(RecordingMode.MANUAL); } if (defaultRecordingLayoutString != null) { RecordingLayout defaultRecordingLayout = RecordingLayout.valueOf(defaultRecordingLayoutString); builder = builder.defaultRecordingLayout(defaultRecordingLayout); + } else { + builder.defaultRecordingLayout(RecordingLayout.BEST_FIT); } if (mediaModeString != null) { MediaMode mediaMode = MediaMode.valueOf(mediaModeString); builder = builder.mediaMode(mediaMode); + } else { + builder = builder.mediaMode(MediaMode.ROUTED); } + builder = builder.defaultCustomLayout((defaultCustomLayout != null) ? defaultCustomLayout : ""); + } catch (IllegalArgumentException e) { return this.generateErrorResponse("RecordingMode " + params.get("recordingMode") + " | " + "Default RecordingLayout " + params.get("defaultRecordingLayout") + " | " + "MediaMode " @@ -120,9 +131,7 @@ public class SessionRestController { role = ParticipantRole.PUBLISHER; } - if (metadata == null) { - metadata = ""; - } + metadata = (metadata != null) ? metadata : ""; String token = sessionManager.newToken(sessionId, role, metadata); JSONObject responseJson = new JSONObject(); @@ -149,6 +158,7 @@ public class SessionRestController { String sessionId = (String) params.get("session"); String name = (String) params.get("name"); String recordingLayoutString = (String) params.get("recordingLayout"); + String customLayout = (String) params.get("customLayout"); if (sessionId == null) { // "session" parameter not found @@ -180,9 +190,11 @@ public class SessionRestController { } else { recordingLayout = RecordingLayout.valueOf(recordingLayoutString); } + + customLayout = (customLayout == null) ? session.getSessionProperties().defaultCustomLayout() : customLayout; Recording startedRecording = this.recordingService.startRecording(session, - new RecordingProperties.Builder().name(name).recordingLayout(recordingLayout).build()); + new RecordingProperties.Builder().name(name).recordingLayout(recordingLayout).customLayout(customLayout).build()); return new ResponseEntity<>(startedRecording.toJson(), HttpStatus.OK); } diff --git a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index ccd5b5c1..be58f0ef 100644 --- a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -39,6 +39,11 @@ "type": "java.lang.String", "description": "Which users will receive a notfication (client events 'recordingStarted' and 'recordingStopped') when recording starts and stops: 'none', 'publisher_moderator', 'all'" }, + { + "name": "openvidu.recording.custom-layout", + "type": "java.lang.String", + "description": "Where should OpenVidu Server look for custom recording layouts" + }, { "name": "openvidu.recording.version", "type": "java.lang.String", diff --git a/openvidu-server/src/main/resources/application.properties b/openvidu-server/src/main/resources/application.properties index 60eabdc1..8ccd6efd 100644 --- a/openvidu-server/src/main/resources/application.properties +++ b/openvidu-server/src/main/resources/application.properties @@ -17,4 +17,5 @@ openvidu.cdr: false openvidu.recording: false openvidu.recording.path: /opt/openvidu/recordings openvidu.recording.public-access: false -openvidu.recording.notification: publisher_moderator \ No newline at end of file +openvidu.recording.notification: publisher_moderator +openvidu.recording.custom-layout: /opt/openvidu/custom-layout \ No newline at end of file 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 7c6e1bd4..3dca9934 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 @@ -29,7 +29,7 @@ export class TestApirestComponent implements OnInit, OnDestroy { recordingModes = ['ALWAYS', 'MANUAL']; selectedRecordingMode = 'MANUAL'; - defaultRecordingLayouts = ['BEST_FIT']; + defaultRecordingLayouts = ['BEST_FIT', 'CUSTOM']; selectedDefaultRecordingLayout = 'BEST_FIT'; mediaModes = ['ROUTED']; From 60948f76076721d6cfa679f691579160caa002f2 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 23 Apr 2018 11:06:16 +0200 Subject: [PATCH 23/60] openvidu-node-client: builder pattern to object pattern --- openvidu-node-client/lib/OpenVidu.d.ts | 8 +-- openvidu-node-client/lib/OpenVidu.js | 23 +++---- openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/OpenViduRole.js | 2 +- openvidu-node-client/lib/OpenViduRole.js.map | 2 +- openvidu-node-client/lib/Session.d.ts | 2 +- openvidu-node-client/lib/Session.js | 38 +++++------ openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/lib/TokenOptions.d.ts | 20 ++---- openvidu-node-client/lib/TokenOptions.js | 38 ----------- openvidu-node-client/lib/TokenOptions.js.map | 2 +- openvidu-node-client/lib/index.js | 3 - openvidu-node-client/lib/index.js.map | 2 +- openvidu-node-client/src/OpenVidu.ts | 63 +++++++++--------- openvidu-node-client/src/OpenViduRole.ts | 6 +- openvidu-node-client/src/Recording.ts | 20 +++--- .../src/RecordingProperties.ts | 50 ++------------- openvidu-node-client/src/Session.ts | 59 ++++++++--------- openvidu-node-client/src/SessionProperties.ts | 64 +++---------------- openvidu-node-client/src/TokenOptions.ts | 41 ++---------- 20 files changed, 135 insertions(+), 312 deletions(-) diff --git a/openvidu-node-client/lib/OpenVidu.d.ts b/openvidu-node-client/lib/OpenVidu.d.ts index 037eecef..20ce14c6 100644 --- a/openvidu-node-client/lib/OpenVidu.d.ts +++ b/openvidu-node-client/lib/OpenVidu.d.ts @@ -1,7 +1,7 @@ -import { Session } from "./Session"; -import { SessionProperties } from "./SessionProperties"; -import { Recording } from "./Recording"; -import { RecordingProperties } from "./RecordingProperties"; +import { Session } from './Session'; +import { SessionProperties } from './SessionProperties'; +import { Recording } from './Recording'; +import { RecordingProperties } from './RecordingProperties'; export declare class OpenVidu { private urlOpenViduServer; private static readonly API_RECORDINGS; diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index 11f721d3..c94dadb3 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -37,9 +37,9 @@ var OpenVidu = /** @class */ (function () { var properties = param2; requestBody = JSON.stringify({ session: sessionId, - name: properties.name(), - recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : ''), - customLayout: (!!properties.customLayout() ? properties.customLayout() : '') + name: !!properties.name ? properties.name : '', + recordingLayout: !!properties.recordingLayout ? properties.recordingLayout : '', + customLayout: !!properties.customLayout ? properties.customLayout : '' }); } else { @@ -127,7 +127,7 @@ var OpenVidu = /** @class */ (function () { req.on('error', function (e) { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); }; @@ -164,7 +164,7 @@ var OpenVidu = /** @class */ (function () { req.on('error', function (e) { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); }; @@ -191,9 +191,10 @@ var OpenVidu = /** @class */ (function () { if (res.statusCode === 200) { // SUCCESS response from openvidu-server (JSON arrays of recordings in JSON format). Resolve list of new recordings var recordingArray = []; - var responseItems = JSON.parse(body)['items']; - for (var i = 0; i < responseItems.length; i++) { - recordingArray.push(new Recording_1.Recording(responseItems[i])); + var responseItems = JSON.parse(body).items; + for (var _i = 0, responseItems_1 = responseItems; _i < responseItems_1.length; _i++) { + var item = responseItems_1[_i]; + recordingArray.push(new Recording_1.Recording(item)); } resolve(recordingArray); } @@ -206,7 +207,7 @@ var OpenVidu = /** @class */ (function () { req.on('error', function (e) { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); }; @@ -243,7 +244,7 @@ var OpenVidu = /** @class */ (function () { req.on('error', function (e) { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); }; @@ -256,7 +257,7 @@ var OpenVidu = /** @class */ (function () { this.hostname = this.urlOpenViduServer.split(':')[1].replace(/\//g, ''); this.port = parseInt(this.urlOpenViduServer.split(':')[2].replace(/\//g, '')); } - else if (urlSplitted.length == 2) { + else if (urlSplitted.length === 2) { this.hostname = this.urlOpenViduServer.split(':')[0].replace(/\//g, ''); this.port = parseInt(this.urlOpenViduServer.split(':')[1].replace(/\//g, '')); } diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index 46d350c0..5bb75245 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenViduRole.js b/openvidu-node-client/lib/OpenViduRole.js index 4f9418c9..2f67d5ef 100644 --- a/openvidu-node-client/lib/OpenViduRole.js +++ b/openvidu-node-client/lib/OpenViduRole.js @@ -20,6 +20,6 @@ var OpenViduRole; (function (OpenViduRole) { OpenViduRole["SUBSCRIBER"] = "SUBSCRIBER"; OpenViduRole["PUBLISHER"] = "PUBLISHER"; - OpenViduRole["MODERATOR"] = "MODERATOR"; // SUBSCRIBER + PUBLIHSER permissions + can force unpublish() and disconnect() over a third-party stream or user + OpenViduRole["MODERATOR"] = "MODERATOR"; })(OpenViduRole = exports.OpenViduRole || (exports.OpenViduRole = {})); //# sourceMappingURL=OpenViduRole.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenViduRole.js.map b/openvidu-node-client/lib/OpenViduRole.js.map index a290d1f0..8bfa043d 100644 --- a/openvidu-node-client/lib/OpenViduRole.js.map +++ b/openvidu-node-client/lib/OpenViduRole.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA,CAAE,gHAAgH;AAC1I,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file +{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;AACxB,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.d.ts b/openvidu-node-client/lib/Session.d.ts index 8b35c511..506df0e9 100644 --- a/openvidu-node-client/lib/Session.d.ts +++ b/openvidu-node-client/lib/Session.d.ts @@ -1,5 +1,5 @@ -import { TokenOptions } from './TokenOptions'; import { SessionProperties } from './SessionProperties'; +import { TokenOptions } from './TokenOptions'; export declare class Session { private hostname; private port; diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index d237610b..4189df76 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -16,17 +16,19 @@ * */ Object.defineProperty(exports, "__esModule", { value: true }); +var MediaMode_1 = require("./MediaMode"); var OpenViduRole_1 = require("./OpenViduRole"); -var SessionProperties_1 = require("./SessionProperties"); +var RecordingLayout_1 = require("./RecordingLayout"); +var RecordingMode_1 = require("./RecordingMode"); var https = require('https'); var Session = /** @class */ (function () { function Session(hostname, port, basicAuth, properties) { this.hostname = hostname; this.port = port; this.basicAuth = basicAuth; - this.sessionId = ""; - if (properties == null) { - this.properties = new SessionProperties_1.SessionProperties.Builder().build(); + this.sessionId = ''; + if (properties === null) { + this.properties = {}; } else { this.properties = properties; @@ -39,10 +41,10 @@ var Session = /** @class */ (function () { resolve(_this.sessionId); } var requestBody = JSON.stringify({ - 'mediaMode': _this.properties.mediaMode(), - 'recordingMode': _this.properties.recordingMode(), - 'defaultRecordingLayout': _this.properties.defaultRecordingLayout(), - 'defaultCustomLayout': _this.properties.defaultCustomLayout() + mediaMode: !!_this.properties.mediaMode ? _this.properties.mediaMode : MediaMode_1.MediaMode.ROUTED, + recordingMode: !!_this.properties.recordingMode ? _this.properties.recordingMode : RecordingMode_1.RecordingMode.MANUAL, + defaultRecordingLayout: !!_this.properties.defaultRecordingLayout ? _this.properties.defaultRecordingLayout : RecordingLayout_1.RecordingLayout.BEST_FIT, + defaultCustomLayout: !!_this.properties.defaultCustomLayout ? _this.properties.defaultCustomLayout : '' }); var options = { hostname: _this.hostname, @@ -84,21 +86,11 @@ var Session = /** @class */ (function () { Session.prototype.generateToken = function (tokenOptions) { var _this = this; return new Promise(function (resolve, reject) { - var requestBody; - if (!!tokenOptions) { - requestBody = JSON.stringify({ - 'session': _this.sessionId, - 'role': tokenOptions.getRole(), - 'data': tokenOptions.getData() - }); - } - else { - requestBody = JSON.stringify({ - 'session': _this.sessionId, - 'role': OpenViduRole_1.OpenViduRole.PUBLISHER, - 'data': '' - }); - } + var requestBody = JSON.stringify({ + session: _this.sessionId, + role: !!tokenOptions.role ? tokenOptions.role : OpenViduRole_1.OpenViduRole.PUBLISHER, + data: !!tokenOptions.data ? tokenOptions.data : '' + }); var options = { hostname: _this.hostname, port: _this.port, diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 84bdf66a..765f221c 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/TokenOptions.d.ts b/openvidu-node-client/lib/TokenOptions.d.ts index e3a4b907..123f7a7b 100644 --- a/openvidu-node-client/lib/TokenOptions.d.ts +++ b/openvidu-node-client/lib/TokenOptions.d.ts @@ -1,17 +1,5 @@ -import { OpenViduRole } from "./OpenViduRole"; -export declare class TokenOptions { - private data; - private role; - constructor(data: string, role: OpenViduRole); - getData(): string; - getRole(): OpenViduRole; -} -export declare namespace TokenOptions { - class Builder { - private dataProp; - private roleProp; - build(): TokenOptions; - data(data: string): Builder; - role(role: OpenViduRole): Builder; - } +import { OpenViduRole } from './OpenViduRole'; +export interface TokenOptions { + data: string; + role: OpenViduRole; } diff --git a/openvidu-node-client/lib/TokenOptions.js b/openvidu-node-client/lib/TokenOptions.js index 1fd58176..78d0ef9c 100644 --- a/openvidu-node-client/lib/TokenOptions.js +++ b/openvidu-node-client/lib/TokenOptions.js @@ -16,42 +16,4 @@ * */ Object.defineProperty(exports, "__esModule", { value: true }); -var OpenViduRole_1 = require("./OpenViduRole"); -var TokenOptions = /** @class */ (function () { - function TokenOptions(data, role) { - this.data = data; - this.role = role; - } - TokenOptions.prototype.getData = function () { - return this.data; - }; - TokenOptions.prototype.getRole = function () { - return this.role; - }; - return TokenOptions; -}()); -exports.TokenOptions = TokenOptions; -(function (TokenOptions) { - var Builder = /** @class */ (function () { - function Builder() { - this.dataProp = ''; - this.roleProp = OpenViduRole_1.OpenViduRole.PUBLISHER; - } - Builder.prototype.build = function () { - return new TokenOptions(this.dataProp, this.roleProp); - }; - Builder.prototype.data = function (data) { - this.dataProp = data; - return this; - }; - Builder.prototype.role = function (role) { - this.roleProp = role; - return this; - }; - return Builder; - }()); - TokenOptions.Builder = Builder; - ; -})(TokenOptions = exports.TokenOptions || (exports.TokenOptions = {})); -exports.TokenOptions = TokenOptions; //# sourceMappingURL=TokenOptions.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/TokenOptions.js.map b/openvidu-node-client/lib/TokenOptions.js.map index d1f3c91f..c6d102b7 100644 --- a/openvidu-node-client/lib/TokenOptions.js.map +++ b/openvidu-node-client/lib/TokenOptions.js.map @@ -1 +1 @@ -{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,+CAA8C;AAE9C;IAEI,sBAAoB,IAAY,EAAU,IAAkB;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAc;IAAI,CAAC;IAEjE,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IACL,mBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,oCAAY;AAazB,WAAiB,YAAY;IACzB;QAAA;YAEY,aAAQ,GAAW,EAAE,CAAC;YACtB,aAAQ,GAAiB,2BAAY,CAAC,SAAS,CAAC;QAgB5D,CAAC;QAdG,uBAAK,GAAL;YACI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAY;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAkB;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAEL,cAAC;IAAD,CAAC,AAnBD,IAmBC;IAnBY,oBAAO,UAmBnB,CAAA;IAAA,CAAC;AACN,CAAC,EArBgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAqB5B;AAlCY,oCAAY"} \ No newline at end of file +{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"} \ No newline at end of file diff --git a/openvidu-node-client/lib/index.js b/openvidu-node-client/lib/index.js index 863bf7c8..79232b2e 100644 --- a/openvidu-node-client/lib/index.js +++ b/openvidu-node-client/lib/index.js @@ -6,11 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); __export(require("./OpenVidu")); __export(require("./OpenViduRole")); __export(require("./Session")); -__export(require("./SessionProperties")); -__export(require("./TokenOptions")); __export(require("./MediaMode")); __export(require("./RecordingLayout")); __export(require("./RecordingMode")); __export(require("./Recording")); -__export(require("./RecordingProperties")); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/index.js.map b/openvidu-node-client/lib/index.js.map index f2c6de18..98aad725 100644 --- a/openvidu-node-client/lib/index.js.map +++ b/openvidu-node-client/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,yCAAoC;AACpC,oCAA+B;AAC/B,iCAA4B;AAC5B,uCAAkC;AAClC,qCAAgC;AAChC,iCAA4B;AAC5B,2CAAsC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAG1B,iCAA4B;AAC5B,uCAAkC;AAClC,qCAAgC;AAChC,iCAA4B"} \ No newline at end of file diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index f4550b00..bfdee37d 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -15,14 +15,14 @@ * */ -import { Session } from "./Session"; -import { SessionProperties } from "./SessionProperties"; -import { Recording } from "./Recording"; -import { RecordingProperties } from "./RecordingProperties"; -import { RecordingLayout } from "./RecordingLayout"; +import { Session } from './Session'; +import { SessionProperties } from './SessionProperties'; +import { Recording } from './Recording'; +import { RecordingLayout } from './RecordingLayout'; +import { RecordingProperties } from './RecordingProperties'; declare const Buffer; -let https = require('https'); +const https = require('https'); export class OpenVidu { @@ -57,9 +57,9 @@ export class OpenVidu { const properties = param2; requestBody = JSON.stringify({ session: sessionId, - name: properties.name(), - recordingLayout: (!!properties.recordingLayout() ? properties.recordingLayout() : ''), - customLayout: (!!properties.customLayout() ? properties.customLayout() : '') + name: !!properties.name ? properties.name : '', + recordingLayout: !!properties.recordingLayout ? properties.recordingLayout : '', + customLayout: !!properties.customLayout ? properties.customLayout : '' }); } else { requestBody = JSON.stringify({ @@ -78,7 +78,7 @@ export class OpenVidu { }); } - let options = { + const options = { hostname: this.hostname, port: this.port, path: OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_START, @@ -88,7 +88,8 @@ export class OpenVidu { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(requestBody) } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -118,7 +119,7 @@ export class OpenVidu { public stopRecording(recordingId: string): Promise { return new Promise((resolve, reject) => { - let options = { + const options = { hostname: this.hostname, port: this.port, path: OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_STOP + '/' + recordingId, @@ -127,7 +128,8 @@ export class OpenVidu { 'Authorization': this.basicAuth, 'Content-Type': 'application/x-www-form-urlencoded' } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -148,7 +150,7 @@ export class OpenVidu { req.on('error', (e) => { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); @@ -157,7 +159,7 @@ export class OpenVidu { public getRecording(recordingId: string): Promise { return new Promise((resolve, reject) => { - let options = { + const options = { hostname: this.hostname, port: this.port, path: OpenVidu.API_RECORDINGS + '/' + recordingId, @@ -166,7 +168,8 @@ export class OpenVidu { 'Authorization': this.basicAuth, 'Content-Type': 'application/x-www-form-urlencoded' } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -187,7 +190,7 @@ export class OpenVidu { req.on('error', (e) => { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); @@ -196,7 +199,7 @@ export class OpenVidu { public listRecordings(): Promise { return new Promise((resolve, reject) => { - let options = { + const options = { hostname: this.hostname, port: this.port, path: OpenVidu.API_RECORDINGS, @@ -205,7 +208,8 @@ export class OpenVidu { 'Authorization': this.basicAuth, 'Content-Type': 'application/x-www-form-urlencoded' } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -215,10 +219,10 @@ export class OpenVidu { res.on('end', () => { if (res.statusCode === 200) { // SUCCESS response from openvidu-server (JSON arrays of recordings in JSON format). Resolve list of new recordings - let recordingArray: Recording[] = []; - let responseItems = JSON.parse(body)['items']; - for (let i = 0; i < responseItems.length; i++) { - recordingArray.push(new Recording(responseItems[i])); + const recordingArray: Recording[] = []; + const responseItems = JSON.parse(body).items; + for (const item of responseItems) { + recordingArray.push(new Recording(item)); } resolve(recordingArray); } else { @@ -231,7 +235,7 @@ export class OpenVidu { req.on('error', (e) => { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); @@ -240,7 +244,7 @@ export class OpenVidu { public deleteRecording(recordingId: string): Promise { return new Promise((resolve, reject) => { - let options = { + const options = { hostname: this.hostname, port: this.port, path: OpenVidu.API_RECORDINGS + '/' + recordingId, @@ -249,7 +253,8 @@ export class OpenVidu { 'Authorization': this.basicAuth, 'Content-Type': 'application/x-www-form-urlencoded' } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -270,7 +275,7 @@ export class OpenVidu { req.on('error', (e) => { reject(new Error(e)); }); - //req.write(); + // req.write(); req.end(); }); @@ -281,11 +286,11 @@ export class OpenVidu { } private setHostnameAndPort(): void { - let urlSplitted = this.urlOpenViduServer.split(':'); + const urlSplitted = this.urlOpenViduServer.split(':'); if (urlSplitted.length === 3) { // URL has format: http:// + hostname + :port this.hostname = this.urlOpenViduServer.split(':')[1].replace(/\//g, ''); this.port = parseInt(this.urlOpenViduServer.split(':')[2].replace(/\//g, '')); - } else if (urlSplitted.length == 2) { // URL has format: hostname + :port + } else if (urlSplitted.length === 2) { // URL has format: hostname + :port this.hostname = this.urlOpenViduServer.split(':')[0].replace(/\//g, ''); this.port = parseInt(this.urlOpenViduServer.split(':')[1].replace(/\//g, '')); } else { diff --git a/openvidu-node-client/src/OpenViduRole.ts b/openvidu-node-client/src/OpenViduRole.ts index c68c898d..ba28c93d 100644 --- a/openvidu-node-client/src/OpenViduRole.ts +++ b/openvidu-node-client/src/OpenViduRole.ts @@ -16,7 +16,7 @@ */ export enum OpenViduRole { - SUBSCRIBER = 'SUBSCRIBER', // Can subscribe to published streams of other users - PUBLISHER = 'PUBLISHER', // SUBSCRIBER permissions + can subscribe to published streams of other users and publish their own streams - MODERATOR = 'MODERATOR' // SUBSCRIBER + PUBLIHSER permissions + can force unpublish() and disconnect() over a third-party stream or user + SUBSCRIBER = 'SUBSCRIBER', // Can subscribe to published streams of other users + PUBLISHER = 'PUBLISHER', // SUBSCRIBER permissions + can subscribe to published streams of other users and publish their own streams + MODERATOR = 'MODERATOR', // SUBSCRIBER + PUBLIHSER permissions + can force unpublish() and disconnect() over a third-party stream or user } \ No newline at end of file diff --git a/openvidu-node-client/src/Recording.ts b/openvidu-node-client/src/Recording.ts index 5654a850..35ec1969 100644 --- a/openvidu-node-client/src/Recording.ts +++ b/openvidu-node-client/src/Recording.ts @@ -15,22 +15,23 @@ * */ -import { RecordingProperties } from "./RecordingProperties"; -import { RecordingLayout } from "./RecordingLayout"; +import { RecordingLayout } from './RecordingLayout'; +import { RecordingProperties } from './RecordingProperties'; export class Recording { private id: string; private sessionId: string; private createdAt: number; - private size: number = 0; - private duration: number = 0; + private size = 0; + private duration = 0; private url: string; - private hasaudio: boolean = true; - private hasvideo: boolean = true; + private hasaudio = true; + private hasvideo = true; private status: Recording.Status; private recordingProperties: RecordingProperties; + /* tslint:disable:no-string-literal */ constructor(json: JSON) { this.id = json['id']; this.sessionId = json['sessionId']; @@ -41,8 +42,9 @@ export class Recording { this.hasaudio = json['hasAudio']; this.hasvideo = json['hasVideo']; this.status = json['status']; - this.recordingProperties = new RecordingProperties.Builder().name(json['name']).recordingLayout(json['layout']).build(); + this.recordingProperties = { name: json['name'], recordingLayout: json['layout'] }; } + /* tslint:enable:no-string-literal */ public getStatus(): Recording.Status { return this.status; @@ -53,11 +55,11 @@ export class Recording { } public getName(): string { - return this.recordingProperties.name(); + return this.recordingProperties.name; } public getLayout(): RecordingLayout { - return this.recordingProperties.recordingLayout(); + return this.recordingProperties.recordingLayout; } public getSessionId(): string { diff --git a/openvidu-node-client/src/RecordingProperties.ts b/openvidu-node-client/src/RecordingProperties.ts index ab7ab644..96c39f64 100644 --- a/openvidu-node-client/src/RecordingProperties.ts +++ b/openvidu-node-client/src/RecordingProperties.ts @@ -15,50 +15,10 @@ * */ -import { RecordingLayout } from "./RecordingLayout"; +import { RecordingLayout } from './RecordingLayout'; -export class RecordingProperties { - - constructor(private rName: string, private recordingLayoutProp: RecordingLayout, private customLayoutProp: string) { } - - name(): string { - return this.rName; - } - - recordingLayout(): RecordingLayout { - return this.recordingLayoutProp; - } - - customLayout(): string { - return this.customLayoutProp; - } - -} - -export namespace RecordingProperties { - export class Builder { - - private rName: string = ''; - private recordingLayoutProp: RecordingLayout; - private customLayoutProp: string; - - build(): RecordingProperties { - return new RecordingProperties(this.rName, this.recordingLayoutProp, this.customLayoutProp); - } - - name(name: string): Builder { - this.rName = name; - return this; - } - - recordingLayout(layout: RecordingLayout): Builder { - this.recordingLayoutProp = layout; - return this; - } - - customLayout(path: string): Builder { - this.customLayoutProp = path; - return this; - } - }; +export interface RecordingProperties { + name?: string; + recordingLayout?: RecordingLayout; + customLayout?: string; } \ No newline at end of file diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index d402b494..994d19ba 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -15,26 +15,29 @@ * */ -import { TokenOptions } from './TokenOptions'; +import { MediaMode } from './MediaMode'; import { OpenViduRole } from './OpenViduRole'; +import { RecordingLayout } from './RecordingLayout'; +import { RecordingMode } from './RecordingMode'; import { SessionProperties } from './SessionProperties'; +import { TokenOptions } from './TokenOptions'; declare const Buffer; declare const require; -let https = require('https'); +const https = require('https'); export class Session { - private static readonly API_SESSIONS: string = '/api/sessions'; - private static readonly API_TOKENS: string = '/api/tokens'; + private static readonly API_SESSIONS = '/api/sessions'; + private static readonly API_TOKENS = '/api/tokens'; - private sessionId: string = ""; + private sessionId = ''; private properties: SessionProperties; constructor(private hostname: string, private port: number, private basicAuth: string, properties?: SessionProperties) { - if (properties == null) { - this.properties = new SessionProperties.Builder().build(); + if (properties === null) { + this.properties = {}; } else { this.properties = properties; } @@ -47,14 +50,14 @@ export class Session { resolve(this.sessionId); } - let requestBody = JSON.stringify({ - 'mediaMode': this.properties.mediaMode(), - 'recordingMode': this.properties.recordingMode(), - 'defaultRecordingLayout': this.properties.defaultRecordingLayout(), - 'defaultCustomLayout': this.properties.defaultCustomLayout() + const requestBody = JSON.stringify({ + mediaMode: !!this.properties.mediaMode ? this.properties.mediaMode : MediaMode.ROUTED, + recordingMode: !!this.properties.recordingMode ? this.properties.recordingMode : RecordingMode.MANUAL, + defaultRecordingLayout: !!this.properties.defaultRecordingLayout ? this.properties.defaultRecordingLayout : RecordingLayout.BEST_FIT, + defaultCustomLayout: !!this.properties.defaultCustomLayout ? this.properties.defaultCustomLayout : '' }); - let options = { + const options = { hostname: this.hostname, port: this.port, path: Session.API_SESSIONS, @@ -64,7 +67,8 @@ export class Session { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(requestBody) } - } + }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -74,7 +78,7 @@ export class Session { res.on('end', () => { if (res.statusCode === 200) { // SUCCESS response from openvidu-server. Resolve sessionId - let parsed = JSON.parse(body); + const parsed = JSON.parse(body); this.sessionId = parsed.id; resolve(parsed.id); } else { @@ -95,23 +99,13 @@ export class Session { public generateToken(tokenOptions?: TokenOptions): Promise { return new Promise((resolve, reject) => { - let requestBody; + const requestBody = JSON.stringify({ + session: this.sessionId, + role: !!tokenOptions.role ? tokenOptions.role : OpenViduRole.PUBLISHER, + data: !!tokenOptions.data ? tokenOptions.data : '' + }); - if (!!tokenOptions) { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': tokenOptions.getRole(), - 'data': tokenOptions.getData() - }); - } else { - requestBody = JSON.stringify({ - 'session': this.sessionId, - 'role': OpenViduRole.PUBLISHER, - 'data': '' - }); - } - - let options = { + const options = { hostname: this.hostname, port: this.port, path: Session.API_TOKENS, @@ -122,6 +116,7 @@ export class Session { 'Content-Length': Buffer.byteLength(requestBody) } }; + const req = https.request(options, (res) => { let body = ''; res.on('data', (d) => { @@ -131,7 +126,7 @@ export class Session { res.on('end', () => { if (res.statusCode === 200) { // SUCCESS response from openvidu-server. Resolve token - let parsed = JSON.parse(body); + const parsed = JSON.parse(body); resolve(parsed.id); } else { // ERROR response from openvidu-server. Resolve HTTP status diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts index 366aa653..fc905694 100644 --- a/openvidu-node-client/src/SessionProperties.ts +++ b/openvidu-node-client/src/SessionProperties.ts @@ -15,61 +15,13 @@ * */ -import { MediaMode } from "./MediaMode"; -import { RecordingMode } from "./RecordingMode"; -import { RecordingLayout } from "./RecordingLayout"; +import { MediaMode } from './MediaMode'; +import { RecordingLayout } from './RecordingLayout'; +import { RecordingMode } from './RecordingMode'; -export class SessionProperties { - - constructor(private mediaModeProp: MediaMode, private recordingModeProp: RecordingMode, private defaultRecordingLayoutProp: RecordingLayout, private defaultCustomLayoutProp: string) { } - - mediaMode(): string { - return this.mediaModeProp; - } - - recordingMode(): RecordingMode { - return this.recordingModeProp; - } - - defaultRecordingLayout(): RecordingLayout { - return this.defaultRecordingLayoutProp; - } - - defaultCustomLayout(): string { - return this.defaultCustomLayoutProp; - } -} - -export namespace SessionProperties { - export class Builder { - - private mediaModeProp: MediaMode = MediaMode.ROUTED; - private recordingModeProp: RecordingMode = RecordingMode.MANUAL; - private defaultRecordingLayoutProp: RecordingLayout = RecordingLayout.BEST_FIT; - private defaultCustomLayoutProp: string = ''; - - build(): SessionProperties { - return new SessionProperties(this.mediaModeProp, this.recordingModeProp, this.defaultRecordingLayoutProp, this.defaultCustomLayoutProp); - } - - mediaMode(mediaMode: MediaMode): Builder { - this.mediaModeProp = mediaMode; - return this; - } - - recordingMode(recordingMode: RecordingMode): Builder { - this.recordingModeProp = recordingMode; - return this; - } - - defaultRecordingLayout(layout: RecordingLayout): Builder { - this.defaultRecordingLayoutProp = layout; - return this; - } - - defaultCustomLayout(path: string): Builder { - this.defaultCustomLayoutProp = path; - return this; - } - }; +export interface SessionProperties { + mediaMode?: MediaMode; + recordingMode?: RecordingMode; + defaultRecordingLayout?: RecordingLayout; + defaultCustomLayout?: string; } diff --git a/openvidu-node-client/src/TokenOptions.ts b/openvidu-node-client/src/TokenOptions.ts index a2f5bcb7..72ea5cff 100644 --- a/openvidu-node-client/src/TokenOptions.ts +++ b/openvidu-node-client/src/TokenOptions.ts @@ -15,40 +15,9 @@ * */ -import { OpenViduRole } from "./OpenViduRole"; +import { OpenViduRole } from './OpenViduRole'; -export class TokenOptions { - - constructor(private data: string, private role: OpenViduRole) { } - - getData(): string { - return this.data; - } - - getRole(): OpenViduRole { - return this.role; - } -} - -export namespace TokenOptions { - export class Builder { - - private dataProp: string = ''; - private roleProp: OpenViduRole = OpenViduRole.PUBLISHER; - - build(): TokenOptions { - return new TokenOptions(this.dataProp, this.roleProp); - } - - data(data: string): Builder { - this.dataProp = data; - return this; - } - - role(role: OpenViduRole): Builder { - this.roleProp = role; - return this; - } - - }; -} +export interface TokenOptions { + data: string; + role: OpenViduRole; +} \ No newline at end of file From fadf19cfb046c7b209e9d44ebba6f9fa0c330723 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 23 Apr 2018 11:07:31 +0200 Subject: [PATCH 24/60] openvidu-node-client: tslint and typedoc --- openvidu-node-client/.vscode/settings.json | 8 + openvidu-node-client/config/tslint.json | 154 ++++ openvidu-node-client/config/typedoc.js | 25 + openvidu-node-client/docs/assets/css/main.css | 865 ++++++++++++++++++ .../docs/assets/css/main.css.map | 7 + .../docs/assets/images/icons.png | Bin 0 -> 9487 bytes .../docs/assets/images/icons@2x.png | Bin 0 -> 27740 bytes .../docs/assets/images/widgets.png | Bin 0 -> 480 bytes .../docs/assets/images/widgets@2x.png | Bin 0 -> 855 bytes openvidu-node-client/docs/assets/js/main.js | 5 + openvidu-node-client/docs/assets/js/search.js | 3 + .../docs/classes/openvidu.html | 447 +++++++++ .../docs/classes/recording.html | 492 ++++++++++ .../docs/classes/session.html | 330 +++++++ .../docs/enums/mediamode.html | 237 +++++ .../docs/enums/openvidurole.html | 251 +++++ .../docs/enums/recording.status.html | 323 +++++++ .../docs/enums/recordinglayout.html | 279 ++++++ .../docs/enums/recordingmode.html | 237 +++++ openvidu-node-client/docs/globals.html | 260 ++++++ openvidu-node-client/docs/index.html | 200 ++++ .../docs/interfaces/recordingproperties.html | 259 ++++++ .../docs/interfaces/sessionproperties.html | 273 ++++++ .../docs/interfaces/tokenoptions.html | 245 +++++ openvidu-node-client/package.json | 11 +- openvidu-node-client/tsconfig.json | 1 + 26 files changed, 4908 insertions(+), 4 deletions(-) create mode 100644 openvidu-node-client/.vscode/settings.json create mode 100644 openvidu-node-client/config/tslint.json create mode 100644 openvidu-node-client/config/typedoc.js create mode 100644 openvidu-node-client/docs/assets/css/main.css create mode 100644 openvidu-node-client/docs/assets/css/main.css.map create mode 100644 openvidu-node-client/docs/assets/images/icons.png create mode 100644 openvidu-node-client/docs/assets/images/icons@2x.png create mode 100644 openvidu-node-client/docs/assets/images/widgets.png create mode 100644 openvidu-node-client/docs/assets/images/widgets@2x.png create mode 100644 openvidu-node-client/docs/assets/js/main.js create mode 100644 openvidu-node-client/docs/assets/js/search.js create mode 100644 openvidu-node-client/docs/classes/openvidu.html create mode 100644 openvidu-node-client/docs/classes/recording.html create mode 100644 openvidu-node-client/docs/classes/session.html create mode 100644 openvidu-node-client/docs/enums/mediamode.html create mode 100644 openvidu-node-client/docs/enums/openvidurole.html create mode 100644 openvidu-node-client/docs/enums/recording.status.html create mode 100644 openvidu-node-client/docs/enums/recordinglayout.html create mode 100644 openvidu-node-client/docs/enums/recordingmode.html create mode 100644 openvidu-node-client/docs/globals.html create mode 100644 openvidu-node-client/docs/index.html create mode 100644 openvidu-node-client/docs/interfaces/recordingproperties.html create mode 100644 openvidu-node-client/docs/interfaces/sessionproperties.html create mode 100644 openvidu-node-client/docs/interfaces/tokenoptions.html diff --git a/openvidu-node-client/.vscode/settings.json b/openvidu-node-client/.vscode/settings.json new file mode 100644 index 00000000..9ac96731 --- /dev/null +++ b/openvidu-node-client/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "editor.formatOnSave": false, + "[typescript]": { + "editor.formatOnSave": true + }, + "tslint.configFile": "config/tslint.json", + "tslint.enable": true +} \ No newline at end of file diff --git a/openvidu-node-client/config/tslint.json b/openvidu-node-client/config/tslint.json new file mode 100644 index 00000000..2f1e9bc7 --- /dev/null +++ b/openvidu-node-client/config/tslint.json @@ -0,0 +1,154 @@ +{ + "extends": "tslint:recommended", + "rules": { + "array-type": [ + true, + "array" + ], + "ban-types": { + "options": [ + [ + "Object", + "Avoid using the `Object` type. Did you mean `object`?" + ], + [ + "Function", + "Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`." + ], + [ + "Boolean", + "Avoid using the `Boolean` type. Did you mean `boolean`?" + ], + [ + "Number", + "Avoid using the `Number` type. Did you mean `number`?" + ], + [ + "String", + "Avoid using the `String` type. Did you mean `string`?" + ] + ] + }, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": [ + true, + "ignore-same-line" + ], + "indent": [ + true, + "spaces", + 4 + ], + "interface-name": [ + true, + "never-prefix" + ], + "interface-over-type-literal": true, + "jsdoc-format": true, + "no-inferrable-types": true, + "no-internal-module": true, + "no-null-keyword": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": [ + true, + "ignore-template-strings" + ], + "no-var-keyword": true, + "object-literal-shorthand": true, + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single", + "avoid-escape", + "avoid-template" + ], + "semicolon": [ + true, + "always", + "ignore-bound-class-methods" + ], + "space-within-parens": true, + "triple-equals": true, + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type" + ], + "no-implicit-dependencies": [ + true, + "dev" + ], + "object-literal-key-quotes": [ + true, + "consistent-as-needed" + ], + "variable-name": [ + true, + "ban-keywords", + "check-format", + "allow-leading-underscore" + ], + "arrow-parens": false, + "arrow-return-shorthand": false, + "forin": false, + "member-access": false, + "no-conditional-assignment": false, + "no-console": false, + "no-debugger": false, + "no-empty-interface": false, + "no-eval": false, + "no-object-literal-type-assertion": false, + "no-shadowed-variable": false, + "no-submodule-imports": false, + "no-var-requires": false, + "ordered-imports": false, + "prefer-conditional-expression": false, + "radix": false, + "trailing-comma": false, + "align": false, + "eofline": false, + "max-line-length": false, + "no-consecutive-blank-lines": false, + "space-before-function-paren": false, + "ban-comma-operator": false, + "max-classes-per-file": false, + "member-ordering": false, + "no-angle-bracket-type-assertion": false, + "no-bitwise": false, + "no-namespace": false, + "no-reference": false, + "object-literal-sort-keys": false, + "one-variable-per-declaration": false, + "unified-signatures": false + } +} \ No newline at end of file diff --git a/openvidu-node-client/config/typedoc.js b/openvidu-node-client/config/typedoc.js new file mode 100644 index 00000000..8bd08744 --- /dev/null +++ b/openvidu-node-client/config/typedoc.js @@ -0,0 +1,25 @@ +module.exports = { + lib: [ + "lib.dom.d.ts", + "lib.es5.d.ts", + "lib.es2015.promise.d.ts", + "lib.scripthost.d.ts" + ], + mode: "file", + module: "commonjs", + name: "OpenVidu Browser", + target: "es5", + externalPattern: "node_modules", + exclude: [ + "**/OpenViduInternal/Interfaces/Private/**", + "**/OpenViduInternal/WebRtcStats/WebRtcStats.ts", + "**/OpenViduInternal/VersionAdapter.ts" + ], + excludeExternals: true, + excludePrivate: true, + theme: "default", + plugin: [ + "typedoc-plugin-sourcefile-url", + ], + 'sourcefile-url-prefix': "https://github.com/OpenVidu/openvidu/tree/master/openvidu-browser/src/" +} \ No newline at end of file diff --git a/openvidu-node-client/docs/assets/css/main.css b/openvidu-node-client/docs/assets/css/main.css new file mode 100644 index 00000000..48b3645c --- /dev/null +++ b/openvidu-node-client/docs/assets/css/main.css @@ -0,0 +1,865 @@ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */ +audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. Known issue: no IE 6 support. */ +[hidden] { display: none; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using `em` units. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-size: 100%; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ font-family: sans-serif; } + +/** Address `font-family` inconsistency between `textarea` and other form elements. */ +button, input, select, textarea { font-family: sans-serif; } + +/** Address margins handled incorrectly in IE 6/7. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } +a:active, a:hover { outline: 0; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +/* ========================================================================== Typography ========================================================================== */ +/** Address font sizes and margins set differently in IE 6/7. Address font sizes within `section` and `article` in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +h2 { font-size: 1.5em; margin: 0.83em 0; } + +h3 { font-size: 1.17em; margin: 1em 0; } + +h4, .tsd-index-panel h3 { font-size: 1em; margin: 1.33em 0; } + +h5 { font-size: 0.83em; margin: 1.67em 0; } + +h6 { font-size: 0.67em; margin: 2.33em 0; } + +/** Address styling not present in IE 7/8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */ +b, strong { font-weight: bold; } + +blockquote { margin: 1em 40px; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. Known issue: no IE 6/7 normalization. */ +hr { box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 6/7/8/9. */ +mark { background: #ff0; color: #000; } + +/** Address margins set differently in IE 6/7. */ +p, pre { margin: 1em 0; } + +/** Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; _font-family: "courier new", monospace; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } + +/** Address CSS quotes not supported in IE 6/7. */ +q { quotes: none; } +q:before, q:after { content: ""; content: none; } + +/** Address `quotes` property not supported in Safari 4. */ +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Lists ========================================================================== */ +/** Address margins set differently in IE 6/7. */ +dl, menu, ol, ul { margin: 1em 0; } + +dd { margin: 0 0 0 40px; } + +/** Address paddings set differently in IE 6/7. */ +menu, ol, ul { padding: 0 0 0 40px; } + +/** Correct list images handled incorrectly in IE 7. */ +nav ul, nav ol { list-style: none; list-style-image: none; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. 2. Improve image quality when scaled in IE 7. */ +img { border: 0; /* 1 */ -ms-interpolation-mode: bicubic; } + +/* 2 */ +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */ +figure, form { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Correct margin displayed oddly in IE 6/7. */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct color not being inherited in IE 6/7/8/9. 2. Correct text not wrapping in Firefox 3. 3. Correct alignment displayed oddly in IE 6/7. */ +legend { border: 0; /* 1 */ padding: 0; white-space: normal; /* 2 */ *margin-left: -7px; } + +/* 3 */ +/** 1. Correct font size not being inherited in all browsers. 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, and Chrome. 3. Improve appearance and consistency in all browsers. */ +button, input, select, textarea { font-size: 100%; /* 1 */ margin: 0; /* 2 */ vertical-align: baseline; /* 3 */ *vertical-align: middle; } + +/* 3 */ +/** Address Firefox 3+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. 4. Remove inner spacing in IE 7 without affecting normal text inputs. Known issue: inner spacing remains in IE 6. */ +button, html input[type="button"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; } + +/* 4 */ +input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; } + +/* 4 */ +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to content-box in IE 8/9. 2. Remove excess padding in IE 8/9. 3. Remove excess padding in IE 7. Known issue: excess padding remains in IE 6. */ +input { /* 3 */ } +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ *height: 13px; /* 3 */ *width: 13px; } +input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; } +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +/** Remove inner padding and border in Firefox 3+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 6/7/8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; } + +/* 2 */ +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +/* Visual Studio-like style based on original C# coloring by Jason Diamond */ +.hljs { display: inline-block; padding: 0.5em; background: white; color: black; } + +.hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket { color: #008000; } + +.hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title { color: #00f; } + +.xml .hljs-tag { color: #00f; } +.xml .hljs-tag .hljs-value { color: #00f; } + +.hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value { color: #a31515; } + +.ruby .hljs-symbol { color: #a31515; } +.ruby .hljs-symbol .hljs-string { color: #a31515; } + +.hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute { color: #a31515; } + +.ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt { color: #2b91af; } + +.hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag { color: #808080; } + +.vhdl .hljs-typename { font-weight: bold; } +.vhdl .hljs-string { color: #666666; } +.vhdl .hljs-literal { color: #a31515; } +.vhdl .hljs-attribute { color: #00b0e8; } + +.xml .hljs-attribute { color: #f00; } + +.col > :first-child, .col-1 > :first-child, .col-2 > :first-child, .col-3 > :first-child, .col-4 > :first-child, .col-5 > :first-child, .col-6 > :first-child, .col-7 > :first-child, .col-8 > :first-child, .col-9 > :first-child, .col-10 > :first-child, .col-11 > :first-child, .tsd-panel > :first-child, ul.tsd-descriptions > li > :first-child, .col > :first-child > :first-child, .col-1 > :first-child > :first-child, .col-2 > :first-child > :first-child, .col-3 > :first-child > :first-child, .col-4 > :first-child > :first-child, .col-5 > :first-child > :first-child, .col-6 > :first-child > :first-child, .col-7 > :first-child > :first-child, .col-8 > :first-child > :first-child, .col-9 > :first-child > :first-child, .col-10 > :first-child > :first-child, .col-11 > :first-child > :first-child, .tsd-panel > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child, .col > :first-child > :first-child > :first-child, .col-1 > :first-child > :first-child > :first-child, .col-2 > :first-child > :first-child > :first-child, .col-3 > :first-child > :first-child > :first-child, .col-4 > :first-child > :first-child > :first-child, .col-5 > :first-child > :first-child > :first-child, .col-6 > :first-child > :first-child > :first-child, .col-7 > :first-child > :first-child > :first-child, .col-8 > :first-child > :first-child > :first-child, .col-9 > :first-child > :first-child > :first-child, .col-10 > :first-child > :first-child > :first-child, .col-11 > :first-child > :first-child > :first-child, .tsd-panel > :first-child > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child > :first-child { margin-top: 0; } +.col > :last-child, .col-1 > :last-child, .col-2 > :last-child, .col-3 > :last-child, .col-4 > :last-child, .col-5 > :last-child, .col-6 > :last-child, .col-7 > :last-child, .col-8 > :last-child, .col-9 > :last-child, .col-10 > :last-child, .col-11 > :last-child, .tsd-panel > :last-child, ul.tsd-descriptions > li > :last-child, .col > :last-child > :last-child, .col-1 > :last-child > :last-child, .col-2 > :last-child > :last-child, .col-3 > :last-child > :last-child, .col-4 > :last-child > :last-child, .col-5 > :last-child > :last-child, .col-6 > :last-child > :last-child, .col-7 > :last-child > :last-child, .col-8 > :last-child > :last-child, .col-9 > :last-child > :last-child, .col-10 > :last-child > :last-child, .col-11 > :last-child > :last-child, .tsd-panel > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child, .col > :last-child > :last-child > :last-child, .col-1 > :last-child > :last-child > :last-child, .col-2 > :last-child > :last-child > :last-child, .col-3 > :last-child > :last-child > :last-child, .col-4 > :last-child > :last-child > :last-child, .col-5 > :last-child > :last-child > :last-child, .col-6 > :last-child > :last-child > :last-child, .col-7 > :last-child > :last-child > :last-child, .col-8 > :last-child > :last-child > :last-child, .col-9 > :last-child > :last-child > :last-child, .col-10 > :last-child > :last-child > :last-child, .col-11 > :last-child > :last-child > :last-child, .tsd-panel > :last-child > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child > :last-child { margin-bottom: 0; } + +.container { max-width: 1200px; margin: 0 auto; padding: 0 40px; } +@media (max-width: 640px) { .container { padding: 0 20px; } } + +.container-main { padding-bottom: 200px; } + +.row { position: relative; margin: 0 -10px; } +.row:after { visibility: hidden; display: block; content: ""; clear: both; height: 0; } + +.col, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11 { box-sizing: border-box; float: left; padding: 0 10px; } + +.col-1 { width: 8.33333%; } + +.offset-1 { margin-left: 8.33333%; } + +.col-2 { width: 16.66667%; } + +.offset-2 { margin-left: 16.66667%; } + +.col-3 { width: 25%; } + +.offset-3 { margin-left: 25%; } + +.col-4 { width: 33.33333%; } + +.offset-4 { margin-left: 33.33333%; } + +.col-5 { width: 41.66667%; } + +.offset-5 { margin-left: 41.66667%; } + +.col-6 { width: 50%; } + +.offset-6 { margin-left: 50%; } + +.col-7 { width: 58.33333%; } + +.offset-7 { margin-left: 58.33333%; } + +.col-8 { width: 66.66667%; } + +.offset-8 { margin-left: 66.66667%; } + +.col-9 { width: 75%; } + +.offset-9 { margin-left: 75%; } + +.col-10 { width: 83.33333%; } + +.offset-10 { margin-left: 83.33333%; } + +.col-11 { width: 91.66667%; } + +.offset-11 { margin-left: 91.66667%; } + +.tsd-kind-icon { display: block; position: relative; padding-left: 20px; text-indent: -20px; } +.tsd-kind-icon:before { content: ''; display: inline-block; vertical-align: middle; width: 17px; height: 17px; margin: 0 3px 2px 0; background-image: url(../images/icons.png); } +@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-kind-icon:before { background-image: url(../images/icons@2x.png); background-size: 238px 204px; } } + +.tsd-signature.tsd-kind-icon:before { background-position: 0 -153px; } + +.tsd-kind-object-literal > .tsd-kind-icon:before { background-position: 0px -17px; } +.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -17px; } +.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -17px; } + +.tsd-kind-class > .tsd-kind-icon:before { background-position: 0px -34px; } +.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -34px; } +.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -34px; } + +.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: 0px -51px; } +.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -51px; } +.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -51px; } + +.tsd-kind-interface > .tsd-kind-icon:before { background-position: 0px -68px; } +.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -68px; } +.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -68px; } + +.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: 0px -85px; } +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -85px; } +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -85px; } + +.tsd-kind-module > .tsd-kind-icon:before { background-position: 0px -102px; } +.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -102px; } +.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -102px; } + +.tsd-kind-external-module > .tsd-kind-icon:before { background-position: 0px -102px; } +.tsd-kind-external-module.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -102px; } +.tsd-kind-external-module.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -102px; } + +.tsd-kind-enum > .tsd-kind-icon:before { background-position: 0px -119px; } +.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -119px; } +.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -119px; } + +.tsd-kind-enum-member > .tsd-kind-icon:before { background-position: 0px -136px; } +.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -136px; } +.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -136px; } + +.tsd-kind-signature > .tsd-kind-icon:before { background-position: 0px -153px; } +.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -153px; } +.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -153px; } + +.tsd-kind-type-alias > .tsd-kind-icon:before { background-position: 0px -170px; } +.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -170px; } +.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -170px; } + +.tsd-kind-variable > .tsd-kind-icon:before { background-position: -136px -0px; } +.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -0px; } +.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -0px; } +.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -0px; } + +.tsd-kind-property > .tsd-kind-icon:before { background-position: -136px -0px; } +.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -0px; } +.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -0px; } +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -0px; } +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -0px; } +.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -0px; } + +.tsd-kind-get-signature > .tsd-kind-icon:before { background-position: -136px -17px; } +.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -17px; } +.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -17px; } + +.tsd-kind-set-signature > .tsd-kind-icon:before { background-position: -136px -34px; } +.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -34px; } +.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -34px; } + +.tsd-kind-accessor > .tsd-kind-icon:before { background-position: -136px -51px; } +.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -51px; } +.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -51px; } +.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -51px; } + +.tsd-kind-function > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-method > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-call-signature > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: -136px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -85px; } + +.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: -136px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -85px; } + +.tsd-kind-constructor > .tsd-kind-icon:before { background-position: -136px -102px; } +.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -102px; } +.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -102px; } +.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -102px; } + +.tsd-kind-constructor-signature > .tsd-kind-icon:before { background-position: -136px -102px; } +.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -102px; } +.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -102px; } + +.tsd-kind-index-signature > .tsd-kind-icon:before { background-position: -136px -119px; } +.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -119px; } +.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -119px; } + +.tsd-kind-event > .tsd-kind-icon:before { background-position: -136px -136px; } +.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -136px; } +.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -136px; } +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -136px; } +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -136px; } +.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -136px; } + +.tsd-is-static > .tsd-kind-icon:before { background-position: -136px -153px; } +.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -153px; } +.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -153px; } +.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -153px; } +.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -153px; } +.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -153px; } + +.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { background-position: -136px -187px; } +.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -187px; } +.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -187px; } + +.no-transition { transition: none !important; } + +@-webkit-keyframes fade-in { from { opacity: 0; } + to { opacity: 1; } } + +@keyframes fade-in { from { opacity: 0; } + to { opacity: 1; } } +@-webkit-keyframes fade-out { from { opacity: 1; visibility: visible; } + to { opacity: 0; } } +@keyframes fade-out { from { opacity: 1; visibility: visible; } + to { opacity: 0; } } +@-webkit-keyframes fade-in-delayed { 0% { opacity: 0; } + 33% { opacity: 0; } + 100% { opacity: 1; } } +@keyframes fade-in-delayed { 0% { opacity: 0; } + 33% { opacity: 0; } + 100% { opacity: 1; } } +@-webkit-keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; } + 66% { opacity: 0; } + 100% { opacity: 0; } } +@keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; } + 66% { opacity: 0; } + 100% { opacity: 0; } } +@-webkit-keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); } + to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } } +@keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); } + to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } } +@-webkit-keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@-webkit-keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@-webkit-keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; } + to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } } +@keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; } + to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } } +body { background: #fdfdfd; font-family: "Segoe UI", sans-serif; font-size: 16px; color: #222; } + +a { color: #4da6ff; text-decoration: none; } +a:hover { text-decoration: underline; } + +code, pre { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 0.2em; margin: 0; font-size: 14px; background-color: rgba(0, 0, 0, 0.04); } + +pre { padding: 10px; } +pre code { padding: 0; font-size: 100%; background-color: transparent; } + +.tsd-typography { line-height: 1.333em; } +.tsd-typography ul { list-style: square; padding: 0 0 0 20px; margin: 0; } +.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 { font-size: 1em; margin: 0; } +.tsd-typography h5, .tsd-typography h6 { font-weight: normal; } +.tsd-typography p, .tsd-typography ul, .tsd-typography ol { margin: 1em 0; } + +@media (min-width: 901px) and (max-width: 1024px) { html.default .col-content { width: 72%; } + html.default .col-menu { width: 28%; } + html.default .tsd-navigation { padding-left: 10px; } } +@media (max-width: 900px) { html.default .col-content { float: none; width: 100%; } + html.default .col-menu { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; z-index: 1024; top: 0 !important; bottom: 0 !important; left: auto !important; right: 0 !important; width: 100%; padding: 20px 20px 0 0; max-width: 450px; visibility: hidden; background-color: #fff; -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + html.default .col-menu > *:last-child { padding-bottom: 20px; } + html.default .overlay { content: ""; display: block; position: fixed; z-index: 1023; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.75); visibility: hidden; } + html.default.to-has-menu .overlay { -webkit-animation: fade-in 0.4s; animation: fade-in 0.4s; } + html.default.to-has-menu header, html.default.to-has-menu footer, html.default.to-has-menu .col-content { -webkit-animation: shift-to-left 0.4s; animation: shift-to-left 0.4s; } + html.default.to-has-menu .col-menu { -webkit-animation: pop-in-from-right 0.4s; animation: pop-in-from-right 0.4s; } + html.default.from-has-menu .overlay { -webkit-animation: fade-out 0.4s; animation: fade-out 0.4s; } + html.default.from-has-menu header, html.default.from-has-menu footer, html.default.from-has-menu .col-content { -webkit-animation: unshift-to-left 0.4s; animation: unshift-to-left 0.4s; } + html.default.from-has-menu .col-menu { -webkit-animation: pop-out-to-right 0.4s; animation: pop-out-to-right 0.4s; } + html.default.has-menu body { overflow: hidden; } + html.default.has-menu .overlay { visibility: visible; } + html.default.has-menu header, html.default.has-menu footer, html.default.has-menu .col-content { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + html.default.has-menu .col-menu { visibility: visible; -webkit-transform: translate(0, 0); transform: translate(0, 0); } } + +.tsd-page-title { padding: 70px 0 20px 0; margin: 0 0 40px 0; background: #fff; box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); } +.tsd-page-title h1 { margin: 0; } + +.tsd-breadcrumb { margin: 0; padding: 0; color: #808080; } +.tsd-breadcrumb a { color: #808080; text-decoration: none; } +.tsd-breadcrumb a:hover { text-decoration: underline; } +.tsd-breadcrumb li { display: inline; } +.tsd-breadcrumb li:after { content: " / "; } + +html.minimal .container { margin: 0; } +html.minimal .container-main { padding-top: 50px; padding-bottom: 0; } +html.minimal .content-wrap { padding-left: 300px; } +html.minimal .tsd-navigation { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; box-sizing: border-box; z-index: 1; left: 0; top: 40px; bottom: 0; width: 300px; padding: 20px; margin: 0; } +html.minimal .tsd-member .tsd-member { margin-left: 0; } +html.minimal .tsd-page-toolbar { position: fixed; z-index: 2; } +html.minimal #tsd-filter .tsd-filter-group { right: 0; -webkit-transform: none; transform: none; } +html.minimal footer { background-color: transparent; } +html.minimal footer .container { padding: 0; } +html.minimal .tsd-generator { padding: 0; } +@media (max-width: 900px) { html.minimal .tsd-navigation { display: none; } + html.minimal .content-wrap { padding-left: 0; } } + +dl.tsd-comment-tags { overflow: hidden; } +dl.tsd-comment-tags dt { clear: both; float: left; padding: 1px 5px; margin: 0 10px 0 0; border-radius: 4px; border: 1px solid #808080; color: #808080; font-size: 0.8em; font-weight: normal; } +dl.tsd-comment-tags dd { margin: 0 0 10px 0; } +dl.tsd-comment-tags p { margin: 0; } + +.tsd-panel.tsd-comment .lead { font-size: 1.1em; line-height: 1.333em; margin-bottom: 2em; } +.tsd-panel.tsd-comment .lead:last-child { margin-bottom: 0; } + +.toggle-protected .tsd-is-private { display: none; } + +.toggle-public .tsd-is-private, .toggle-public .tsd-is-protected, .toggle-public .tsd-is-private-protected { display: none; } + +.toggle-inherited .tsd-is-inherited { display: none; } + +.toggle-only-exported .tsd-is-not-exported { display: none; } + +.toggle-externals .tsd-is-external { display: none; } + +#tsd-filter { position: relative; display: inline-block; height: 40px; vertical-align: bottom; } +.no-filter #tsd-filter { display: none; } +#tsd-filter .tsd-filter-group { display: inline-block; height: 40px; vertical-align: bottom; white-space: nowrap; } +#tsd-filter input { display: none; } +@media (max-width: 900px) { #tsd-filter .tsd-filter-group { display: block; position: absolute; top: 40px; right: 20px; height: auto; background-color: #fff; visibility: hidden; -webkit-transform: translate(50%, 0); transform: translate(50%, 0); box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } + .has-options #tsd-filter .tsd-filter-group { visibility: visible; } + .to-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-in 0.2s; animation: fade-in 0.2s; } + .from-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-out 0.2s; animation: fade-out 0.2s; } + #tsd-filter label, #tsd-filter .tsd-select { display: block; padding-right: 20px; } } + +footer { border-top: 1px solid #eee; background-color: #fff; } +footer.with-border-bottom { border-bottom: 1px solid #eee; } +footer .tsd-legend-group { font-size: 0; } +footer .tsd-legend { display: inline-block; width: 25%; padding: 0; font-size: 16px; list-style: none; line-height: 1.333em; vertical-align: top; } +@media (max-width: 900px) { footer .tsd-legend { width: 50%; } } + +.tsd-hierarchy { list-style: square; padding: 0 0 0 20px; margin: 0; } +.tsd-hierarchy .target { font-weight: bold; } + +.tsd-index-panel .tsd-index-content { margin-bottom: -30px !important; } +.tsd-index-panel .tsd-index-section { margin-bottom: 30px !important; } +.tsd-index-panel h3 { margin: 0 -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #eee; } +.tsd-index-panel ul.tsd-index-list { -webkit-column-count: 3; -moz-column-count: 3; -ms-column-count: 3; -o-column-count: 3; column-count: 3; -webkit-column-gap: 20px; -moz-column-gap: 20px; -ms-column-gap: 20px; -o-column-gap: 20px; column-gap: 20px; padding: 0; list-style: none; line-height: 1.333em; } +@media (max-width: 900px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 1; -moz-column-count: 1; -ms-column-count: 1; -o-column-count: 1; column-count: 1; } } +@media (min-width: 901px) and (max-width: 1024px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 2; -moz-column-count: 2; -ms-column-count: 2; -o-column-count: 2; column-count: 2; } } +.tsd-index-panel ul.tsd-index-list li { -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; -ms-column-break-inside: avoid; -o-column-break-inside: avoid; column-break-inside: avoid; -webkit-page-break-inside: avoid; -moz-page-break-inside: avoid; -ms-page-break-inside: avoid; -o-page-break-inside: avoid; page-break-inside: avoid; } +.tsd-index-panel a, .tsd-index-panel .tsd-parent-kind-module a { color: #9600ff; } +.tsd-index-panel .tsd-parent-kind-interface a { color: #7da01f; } +.tsd-index-panel .tsd-parent-kind-enum a { color: #cc9900; } +.tsd-index-panel .tsd-parent-kind-class a { color: #4da6ff; } +.tsd-index-panel .tsd-kind-module a { color: #9600ff; } +.tsd-index-panel .tsd-kind-interface a { color: #7da01f; } +.tsd-index-panel .tsd-kind-enum a { color: #cc9900; } +.tsd-index-panel .tsd-kind-class a { color: #4da6ff; } +.tsd-index-panel .tsd-is-private a { color: #808080; } + +.tsd-flag { display: inline-block; padding: 1px 5px; border-radius: 4px; color: #fff; background-color: #808080; text-indent: 0; font-size: 14px; font-weight: normal; } + +.tsd-anchor { position: absolute; top: -100px; } + +.tsd-member { position: relative; } +.tsd-member .tsd-anchor + h3 { margin-top: 0; margin-bottom: 0; border-bottom: none; } + +.tsd-navigation { padding: 0 0 0 40px; } +.tsd-navigation a { display: block; padding-top: 2px; padding-bottom: 2px; border-left: 2px solid transparent; color: #222; text-decoration: none; transition: border-left-color 0.1s; } +.tsd-navigation a:hover { text-decoration: underline; } +.tsd-navigation ul { margin: 0; padding: 0; list-style: none; } +.tsd-navigation li { padding: 0; } + +.tsd-navigation.primary { padding-bottom: 40px; } +.tsd-navigation.primary a { display: block; padding-top: 6px; padding-bottom: 6px; } +.tsd-navigation.primary ul li a { padding-left: 5px; } +.tsd-navigation.primary ul li li a { padding-left: 25px; } +.tsd-navigation.primary ul li li li a { padding-left: 45px; } +.tsd-navigation.primary ul li li li li a { padding-left: 65px; } +.tsd-navigation.primary ul li li li li li a { padding-left: 85px; } +.tsd-navigation.primary ul li li li li li li a { padding-left: 105px; } +.tsd-navigation.primary > ul { border-bottom: 1px solid #eee; } +.tsd-navigation.primary li { border-top: 1px solid #eee; } +.tsd-navigation.primary li.current > a { font-weight: bold; } +.tsd-navigation.primary li.label span { display: block; padding: 20px 0 6px 5px; color: #808080; } +.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a { padding-top: 20px; } + +.tsd-navigation.secondary ul { transition: opacity 0.2s; } +.tsd-navigation.secondary ul li a { padding-left: 25px; } +.tsd-navigation.secondary ul li li a { padding-left: 45px; } +.tsd-navigation.secondary ul li li li a { padding-left: 65px; } +.tsd-navigation.secondary ul li li li li a { padding-left: 85px; } +.tsd-navigation.secondary ul li li li li li a { padding-left: 105px; } +.tsd-navigation.secondary ul li li li li li li a { padding-left: 125px; } +.tsd-navigation.secondary ul.current a { border-left-color: #eee; } +.tsd-navigation.secondary li.focus > a, .tsd-navigation.secondary ul.current li.focus > a { border-left-color: #000; } +.tsd-navigation.secondary li.current { margin-top: 20px; margin-bottom: 20px; border-left-color: #eee; } +.tsd-navigation.secondary li.current > a { font-weight: bold; } + +@media (min-width: 901px) { .menu-sticky-wrap { position: static; } + .no-csspositionsticky .menu-sticky-wrap.sticky { position: fixed; } + .no-csspositionsticky .menu-sticky-wrap.sticky-current { position: fixed; } + .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.before-current, .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.after-current { opacity: 0; } + .no-csspositionsticky .menu-sticky-wrap.sticky-bottom { position: absolute; top: auto !important; left: auto !important; bottom: 0; right: 0; } + .csspositionsticky .menu-sticky-wrap.sticky { position: -webkit-sticky; position: sticky; } + .csspositionsticky .menu-sticky-wrap.sticky-current { position: -webkit-sticky; position: sticky; } } + +.tsd-panel { margin: 20px 0; padding: 20px; background-color: #fff; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } +.tsd-panel:empty { display: none; } +.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 { margin: 1.5em -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #eee; } +.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature { margin-bottom: 0; border-bottom: 0; } +.tsd-panel table { display: block; width: 100%; overflow: auto; margin-top: 10px; word-break: normal; word-break: keep-all; } +.tsd-panel table th { font-weight: bold; } +.tsd-panel table th, .tsd-panel table td { padding: 6px 13px; border: 1px solid #ddd; } +.tsd-panel table tr { background-color: #fff; border-top: 1px solid #ccc; } +.tsd-panel table tr:nth-child(2n) { background-color: #f8f8f8; } + +.tsd-panel-group { margin: 60px 0; } +.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 { padding-left: 20px; padding-right: 20px; } + +#tsd-search { transition: background-color 0.2s; } +#tsd-search .title { position: relative; z-index: 2; } +#tsd-search .field { position: absolute; left: 0; top: 0; right: 40px; height: 40px; } +#tsd-search .field input { box-sizing: border-box; position: relative; top: -50px; z-index: 1; width: 100%; padding: 0 10px; opacity: 0; outline: 0; border: 0; background: transparent; color: #222; } +#tsd-search .field label { position: absolute; overflow: hidden; right: -40px; } +#tsd-search .field input, #tsd-search .title { transition: opacity 0.2s; } +#tsd-search .results { position: absolute; visibility: hidden; top: 40px; width: 100%; margin: 0; padding: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } +#tsd-search .results li { padding: 0 10px; background-color: #fdfdfd; } +#tsd-search .results li:nth-child(even) { background-color: #fff; } +#tsd-search .results li.state { display: none; } +#tsd-search .results li.current, #tsd-search .results li:hover { background-color: #eee; } +#tsd-search .results a { display: block; } +#tsd-search .results a:before { top: 10px; } +#tsd-search .results span.parent { color: #808080; font-weight: normal; } +#tsd-search.has-focus { background-color: #eee; } +#tsd-search.has-focus .field input { top: 0; opacity: 1; } +#tsd-search.has-focus .title { z-index: 0; opacity: 0; } +#tsd-search.has-focus .results { visibility: visible; } +#tsd-search.loading .results li.state.loading { display: block; } +#tsd-search.failure .results li.state.failure { display: block; } + +.tsd-signature { margin: 0 0 1em 0; padding: 10px; border: 1px solid #eee; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } +.tsd-signature.tsd-kind-icon { padding-left: 30px; } +.tsd-signature.tsd-kind-icon:before { top: 10px; left: 10px; } +.tsd-panel > .tsd-signature { margin-left: -20px; margin-right: -20px; border-width: 1px 0; } +.tsd-panel > .tsd-signature.tsd-kind-icon { padding-left: 40px; } +.tsd-panel > .tsd-signature.tsd-kind-icon:before { left: 20px; } + +.tsd-signature-symbol { color: #808080; font-weight: normal; } + +.tsd-signature-type { font-style: italic; font-weight: normal; } + +.tsd-signatures { padding: 0; margin: 0 0 1em 0; border: 1px solid #eee; } +.tsd-signatures .tsd-signature { margin: 0; border-width: 1px 0 0 0; transition: background-color 0.1s; } +.tsd-signatures .tsd-signature:first-child { border-top-width: 0; } +.tsd-signatures .tsd-signature.current { background-color: #eee; } +.tsd-signatures.active > .tsd-signature { cursor: pointer; } +.tsd-panel > .tsd-signatures { margin-left: -20px; margin-right: -20px; border-width: 1px 0; } +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { padding-left: 40px; } +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { left: 20px; } +.tsd-panel > a.anchor + .tsd-signatures { border-top-width: 0; margin-top: -20px; } + +ul.tsd-descriptions { position: relative; overflow: hidden; transition: height 0.3s; padding: 0; list-style: none; } +ul.tsd-descriptions.active > .tsd-description { display: none; } +ul.tsd-descriptions.active > .tsd-description.current { display: block; } +ul.tsd-descriptions.active > .tsd-description.fade-in { -webkit-animation: fade-in-delayed 0.3s; animation: fade-in-delayed 0.3s; } +ul.tsd-descriptions.active > .tsd-description.fade-out { -webkit-animation: fade-out-delayed 0.3s; animation: fade-out-delayed 0.3s; position: absolute; display: block; top: 0; left: 0; right: 0; opacity: 0; visibility: hidden; } +ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { font-size: 16px; margin: 1em 0 0.5em 0; } + +ul.tsd-parameters, ul.tsd-type-parameters { list-style: square; margin: 0; padding-left: 20px; } +ul.tsd-parameters > li.tsd-parameter-siganture, ul.tsd-type-parameters > li.tsd-parameter-siganture { list-style: none; margin-left: -20px; } +ul.tsd-parameters h5, ul.tsd-type-parameters h5 { font-size: 16px; margin: 1em 0 0.5em 0; } +ul.tsd-parameters .tsd-comment, ul.tsd-type-parameters .tsd-comment { margin-top: -0.5em; } + +.tsd-sources { font-size: 14px; color: #808080; margin: 0 0 1em 0; } +.tsd-sources a { color: #808080; text-decoration: underline; } +.tsd-sources ul, .tsd-sources p { margin: 0 !important; } +.tsd-sources ul { list-style: none; padding: 0; } + +.tsd-page-toolbar { position: absolute; z-index: 1; top: 0; left: 0; width: 100%; height: 40px; color: #333; background: #fff; border-bottom: 1px solid #eee; } +.tsd-page-toolbar a { color: #333; text-decoration: none; } +.tsd-page-toolbar a.title { font-weight: bold; } +.tsd-page-toolbar a.title:hover { text-decoration: underline; } +.tsd-page-toolbar .table-wrap { display: table; width: 100%; height: 40px; } +.tsd-page-toolbar .table-cell { display: table-cell; position: relative; white-space: nowrap; line-height: 40px; } +.tsd-page-toolbar .table-cell:first-child { width: 100%; } + +.tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { content: ""; display: inline-block; width: 40px; height: 40px; margin: 0 -8px 0 0; background-image: url(../images/widgets.png); background-repeat: no-repeat; text-indent: -1024px; vertical-align: bottom; } +@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { background-image: url(../images/widgets@2x.png); background-size: 320px 40px; } } + +.tsd-widget { display: inline-block; overflow: hidden; opacity: 0.6; height: 40px; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; } +.tsd-widget:hover { opacity: 0.8; } +.tsd-widget.active { opacity: 1; background-color: #eee; } +.tsd-widget.no-caption { width: 40px; } +.tsd-widget.no-caption:before { margin: 0; } +.tsd-widget.search:before { background-position: 0 0; } +.tsd-widget.menu:before { background-position: -40px 0; } +.tsd-widget.options:before { background-position: -80px 0; } +.tsd-widget.options, .tsd-widget.menu { display: none; } +@media (max-width: 900px) { .tsd-widget.options, .tsd-widget.menu { display: inline-block; } } +input[type=checkbox] + .tsd-widget:before { background-position: -120px 0; } +input[type=checkbox]:checked + .tsd-widget:before { background-position: -160px 0; } + +.tsd-select { position: relative; display: inline-block; height: 40px; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; } +.tsd-select .tsd-select-label { opacity: 0.6; transition: opacity 0.2s; } +.tsd-select .tsd-select-label:before { background-position: -240px 0; } +.tsd-select.active .tsd-select-label { opacity: 0.8; } +.tsd-select.active .tsd-select-list { visibility: visible; opacity: 1; transition-delay: 0s; } +.tsd-select .tsd-select-list { position: absolute; visibility: hidden; top: 40px; left: 0; margin: 0; padding: 0; opacity: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); transition: visibility 0s 0.2s, opacity 0.2s; } +.tsd-select .tsd-select-list li { padding: 0 20px 0 0; background-color: #fdfdfd; } +.tsd-select .tsd-select-list li:before { background-position: 40px 0; } +.tsd-select .tsd-select-list li:nth-child(even) { background-color: #fff; } +.tsd-select .tsd-select-list li:hover { background-color: #eee; } +.tsd-select .tsd-select-list li.selected:before { background-position: -200px 0; } +@media (max-width: 900px) { .tsd-select .tsd-select-list { top: 0; left: auto; right: 100%; margin-right: -5px; } + .tsd-select .tsd-select-label:before { background-position: -280px 0; } } + +img { max-width: 100%; } diff --git a/openvidu-node-client/docs/assets/css/main.css.map b/openvidu-node-client/docs/assets/css/main.css.map new file mode 100644 index 00000000..bc17fe48 --- /dev/null +++ b/openvidu-node-client/docs/assets/css/main.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../../../src/default/assets/css/vendors/_normalize.sass","../../../../src/default/assets/css/vendors/_highlight.js.sass","../../../../src/default/assets/css/setup/_mixins.sass","../../../../src/default/assets/css/setup/_grid.sass","../../../../src/default/assets/css/setup/_icons.scss","../../../../src/default/assets/css/setup/_animations.sass","../../../../src/default/assets/css/setup/_typography.sass","../../../../src/default/assets/css/_constants.sass","../../../../src/default/assets/css/layouts/_default.sass","../../../../src/default/assets/css/layouts/_minimal.sass","../../../../src/default/assets/css/elements/_comment.sass","../../../../src/default/assets/css/elements/_filter.sass","../../../../src/default/assets/css/elements/_footer.sass","../../../../src/default/assets/css/elements/_hierarchy.sass","../../../../src/default/assets/css/elements/_index.sass","../../../../src/default/assets/css/elements/_member.sass","../../../../src/default/assets/css/elements/_navigation.sass","../../../../src/default/assets/css/elements/_panel.sass","../../../../src/default/assets/css/elements/_search.sass","../../../../src/default/assets/css/elements/_signatures.sass","../../../../src/default/assets/css/elements/_sources.sass","../../../../src/default/assets/css/elements/_toolbar.sass","../../../../src/default/assets/css/elements/_images.sass"], +"names": [], +"file": "main.css" +} diff --git a/openvidu-node-client/docs/assets/images/icons.png b/openvidu-node-client/docs/assets/images/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2d11573b9ade711ee30a2bd4f38e6f9ea82281 GIT binary patch literal 9487 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 JrMIm@{|8^qBMkrm literal 0 HcmV?d00001 diff --git a/openvidu-node-client/docs/assets/images/icons@2x.png b/openvidu-node-client/docs/assets/images/icons@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8932ba20ffa431194b8cebc977c731bec3ee23e0 GIT binary patch literal 27740 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 U&wLp6h6BX&boFyt=akR{0G%$)mH+?% literal 0 HcmV?d00001 diff --git a/openvidu-node-client/docs/assets/images/widgets@2x.png b/openvidu-node-client/docs/assets/images/widgets@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbbd57272f3b28f47527d4951ad10f950b8ad43 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xe12~w0Jcmn z@(X6T|9^jgLcx21{)7exgY)a>N6m2F0<`Rqr;B4q1>>88jUdw-7W`c)zLE*mq8W2H z-<&Jl_Hco5BuC5n@AbF5GD82~-e8-v=#zCyUX0F-o}8pPfAv`!GN$ff+TL<~@kgt} z62eO?_|&+>xBmM$@p|z`tIKEdpPf8%qI>4r7@jn<=eta*{3~?g(zz{Ke9zc-G^gr? z-7foa?LcS!hmbwzru}ICvbWLlW8;+l-}!^=c32!^nV`+`C*;0-*Y%l94pC;Cb3GXz zzSf%a!{gVr{Y_lVuUj+a)*Ca+!-Hu%xmP&&X-2CuANY8^i{D7Kg6qzP zXz_ps9+lN8ESH{K4`yu&b~I>N9xGlE&;2u*b?+Go!AhN?m-bxlLvtC#MzDF2kFzfHJ1W7ybqdefSqVhbOykd*Yi%EDuhs z4wF{ft^bv2+DDnKb8gj1FuvcV`M}luS>lO<^)8x>y1#R;a=-ZKwWTQQb)ioBbi;zh zD!f5V)8581to1LL7c9!l^PSC$NBPYif!_vAZhmL4)v4U)4UsrLYiH_9rmQDd?)(e5 z^pcH>qvBg*i0dus2r*mp4;zKvu=P#s-ti;2obl`NjjwoYd>e(oo#j_uyRb<7Pv^If zzZ|mGHmV)8^tbO%^>eqMw(@7(&3g{jEp-Najo7V75xI_ZHK*FA`elF{r5}E*d7+j_R literal 0 HcmV?d00001 diff --git a/openvidu-node-client/docs/assets/js/main.js b/openvidu-node-client/docs/assets/js/main.js new file mode 100644 index 00000000..528a3b02 --- /dev/null +++ b/openvidu-node-client/docs/assets/js/main.js @@ -0,0 +1,5 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function s(a){var b=a.length,c=n.type(a);return"function"!==c&&!n.isWindow(a)&&(!(1!==a.nodeType||!b)||("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a))}function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}function D(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),"string"==typeof(c=a.getAttribute(d))){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c)}catch(e){}M.set(a,b,c)}else c=void 0;return c}function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("
Recording ModeRecording LayoutDefault Recording Layout Media Mode
- - - {{ recordingLayout }} + + + {{ defaultRecordingLayout }}