From e001b2dbc937d1d95d418c6a17bdc873db0164ff Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 9 Jan 2019 17:35:34 +0100 Subject: [PATCH] openvidu-browser Connection object creationTime real value. Stream objects creationTime property addded --- openvidu-browser/src/OpenVidu/Connection.ts | 6 +++--- openvidu-browser/src/OpenVidu/Session.ts | 1 + openvidu-browser/src/OpenVidu/Stream.ts | 9 +++++++++ .../Interfaces/Private/ConnectionOptions.ts | 1 + .../Interfaces/Private/InboundStreamOptions.ts | 1 + .../Interfaces/Private/StreamOptionsServer.ts | 1 + .../openvidu/client/internal/ProtocolElements.java | 6 +++++- .../openvidu/server/core/SessionEventsHandler.java | 14 ++++++++++++-- .../server/kurento/core/KurentoSessionManager.java | 13 +++++++------ 9 files changed, 40 insertions(+), 12 deletions(-) diff --git a/openvidu-browser/src/OpenVidu/Connection.ts b/openvidu-browser/src/OpenVidu/Connection.ts index 1b4a4ee5..456eabdb 100644 --- a/openvidu-browser/src/OpenVidu/Connection.ts +++ b/openvidu-browser/src/OpenVidu/Connection.ts @@ -34,7 +34,7 @@ export class Connection { connectionId: string; /** - * Time when this connection was created (UTC milliseconds) + * Time when this connection was created in OpenVidu Server (UTC milliseconds) */ creationTime: number; @@ -77,6 +77,7 @@ export class Connection { if (!!opts) { // Connection is remote this.connectionId = opts.id; + this.creationTime = opts.createdAt; if (opts.metadata) { this.data = opts.metadata; } @@ -84,8 +85,6 @@ export class Connection { this.initRemoteStreams(opts.streams); } } - - this.creationTime = new Date().getTime(); } @@ -122,6 +121,7 @@ export class Connection { options.forEach(opts => { const streamOptions: InboundStreamOptions = { id: opts.id, + createdAt: opts.createdAt, connection: this, hasAudio: opts.hasAudio, hasVideo: opts.hasVideo, diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index a421c87a..7c83bd67 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -1046,6 +1046,7 @@ export class Session implements EventDispatcher { // Initialize local Connection object with values returned by openvidu-server this.connection = new Connection(this); this.connection.connectionId = response.id; + this.connection.creationTime = response.createdAt; this.connection.data = response.metadata; // Initialize remote Connections with value returned by openvidu-server diff --git a/openvidu-browser/src/OpenVidu/Stream.ts b/openvidu-browser/src/OpenVidu/Stream.ts index 3f3517f7..957e0341 100644 --- a/openvidu-browser/src/OpenVidu/Stream.ts +++ b/openvidu-browser/src/OpenVidu/Stream.ts @@ -87,6 +87,13 @@ export class Stream implements EventDispatcher { */ streamId: string; + /** + * Time when this stream was created in OpenVidu Server (UTC milliseconds). Depending on the owner of this stream: + * - Subscriber object: property `creationTime` is always defined + * - Publisher object: property `creationTime` is only defined after successful execution of [[Session.publish]] + */ + creationTime: number; + /** * `"CAMERA"`, `"SCREEN"` or `"CUSTOM"` (the latter when [[PublisherProperties.videoSource]] is a MediaStreamTrack when calling [[OpenVidu.initPublisher]]). * If [[hasVideo]] is false, this property is undefined @@ -182,6 +189,7 @@ export class Stream implements EventDispatcher { // InboundStreamOptions: stream belongs to a Subscriber this.inboundStreamOpts = options; this.streamId = this.inboundStreamOpts.id; + this.creationTime = this.inboundStreamOpts.createdAt; this.hasAudio = this.inboundStreamOpts.hasAudio; this.hasVideo = this.inboundStreamOpts.hasVideo; if (this.hasAudio) { @@ -709,6 +717,7 @@ export class Stream implements EventDispatcher { this.webRtcPeer.processAnswer(response.sdpAnswer, false) .then(() => { this.streamId = response.id; + this.creationTime = response.createdAt; this.isLocalStreamPublished = true; this.publishedOnce = true; if (this.displayMyRemote()) { diff --git a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/ConnectionOptions.ts b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/ConnectionOptions.ts index 96838b7b..d05a7b3b 100644 --- a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/ConnectionOptions.ts +++ b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/ConnectionOptions.ts @@ -19,6 +19,7 @@ import { StreamOptionsServer } from './StreamOptionsServer'; export interface ConnectionOptions { id: string; + createdAt: number; metadata: string; streams: StreamOptionsServer[]; } diff --git a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/InboundStreamOptions.ts b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/InboundStreamOptions.ts index 5f81ce0a..6ebfaf0b 100644 --- a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/InboundStreamOptions.ts +++ b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/InboundStreamOptions.ts @@ -20,6 +20,7 @@ import { Filter } from '../../../OpenVidu/Filter'; export interface InboundStreamOptions { id: string; + createdAt: number; connection: Connection; hasAudio: boolean; hasVideo: boolean; diff --git a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/StreamOptionsServer.ts b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/StreamOptionsServer.ts index d3bfce4c..28c4a848 100644 --- a/openvidu-browser/src/OpenViduInternal/Interfaces/Private/StreamOptionsServer.ts +++ b/openvidu-browser/src/OpenViduInternal/Interfaces/Private/StreamOptionsServer.ts @@ -19,6 +19,7 @@ import { Filter } from '../../../OpenVidu/Filter'; export interface StreamOptionsServer { id: string; + createdAt: number; hasAudio: boolean; hasVideo: boolean; audioActive: boolean; 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 b1732535..f7d4ba44 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 @@ -41,6 +41,7 @@ public class ProtocolElements { public static final String JOINROOM_RECORDER_PARAM = "recorder"; public static final String JOINROOM_PEERID_PARAM = "id"; + public static final String JOINROOM_PEERCREATEDAT_PARAM = "createdAt"; public static final String JOINROOM_PEERSTREAMS_PARAM = "streams"; public static final String JOINROOM_PEERSTREAMID_PARAM = "id"; public static final String JOINROOM_PEERSTREAMHASAUDIO_PARAM = "hasAudio"; @@ -57,6 +58,7 @@ public class ProtocolElements { public static final String PUBLISHVIDEO_DOLOOPBACK_PARAM = "doLoopback"; public static final String PUBLISHVIDEO_SDPANSWER_PARAM = "sdpAnswer"; public static final String PUBLISHVIDEO_STREAMID_PARAM = "id"; + public static final String PUBLISHVIDEO_CREATEDAT_PARAM = "createdAt"; public static final String PUBLISHVIDEO_HASAUDIO_PARAM = "hasAudio"; public static final String PUBLISHVIDEO_HASVIDEO_PARAM = "hasVideo"; public static final String PUBLISHVIDEO_AUDIOACTIVE_PARAM = "audioActive"; @@ -108,7 +110,7 @@ public class ProtocolElements { public static final String REMOVEFILTER_METHOD = "removeFilter"; public static final String ADDFILTEREVENTLISTENER_METHOD = "addFilterEventListener"; public static final String REMOVEFILTEREVENTLISTENER_METHOD = "removeFilterEventListener"; - + public static final String FILTEREVENTDISPATCHED_METHOD = "filterEventDispatched"; public static final String FILTEREVENTLISTENER_CONNECTIONID_PARAM = "connectionId"; public static final String FILTEREVENTLISTENER_STREAMID_PARAM = "streamId"; @@ -120,6 +122,7 @@ public class ProtocolElements { public static final String PARTICIPANTJOINED_METHOD = "participantJoined"; public static final String PARTICIPANTJOINED_USER_PARAM = "id"; + public static final String PARTICIPANTJOINED_CREATEDAT_PARAM = "createdAt"; public static final String PARTICIPANTJOINED_METADATA_PARAM = "metadata"; public static final String PARTICIPANTLEFT_METHOD = "participantLeft"; @@ -134,6 +137,7 @@ public class ProtocolElements { public static final String PARTICIPANTPUBLISHED_USER_PARAM = "id"; public static final String PARTICIPANTPUBLISHED_STREAMS_PARAM = "streams"; public static final String PARTICIPANTPUBLISHED_STREAMID_PARAM = "id"; + public static final String PARTICIPANTPUBLISHED_CREATEDAT_PARAM = "createdAt"; public static final String PARTICIPANTPUBLISHED_HASAUDIO_PARAM = "hasAudio"; public static final String PARTICIPANTPUBLISHED_HASVIDEO_PARAM = "hasVideo"; public static final String PARTICIPANTPUBLISHED_AUDIOACTIVE_PARAM = "audioActive"; 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 fe72c336..64fa0437 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 @@ -86,6 +86,8 @@ public class SessionEventsHandler { JsonObject participantJson = new JsonObject(); participantJson.addProperty(ProtocolElements.JOINROOM_PEERID_PARAM, existingParticipant.getParticipantPublicId()); + participantJson.addProperty(ProtocolElements.JOINROOM_PEERCREATEDAT_PARAM, + existingParticipant.getCreatedAt()); // Metadata associated to each existing participant participantJson.addProperty(ProtocolElements.JOINROOM_METADATA_PARAM, @@ -98,6 +100,8 @@ public class SessionEventsHandler { JsonObject stream = new JsonObject(); stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMID_PARAM, existingParticipant.getPublisherStreamId()); + stream.addProperty(ProtocolElements.JOINROOM_PEERCREATEDAT_PARAM, + kParticipant.getPublisher().createdAt()); stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMHASAUDIO_PARAM, kParticipant.getPublisherMediaOptions().hasAudio); stream.addProperty(ProtocolElements.JOINROOM_PEERSTREAMHASVIDEO_PARAM, @@ -139,6 +143,8 @@ public class SessionEventsHandler { // Metadata associated to new participant notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_USER_PARAM, participant.getParticipantPublicId()); + notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_CREATEDAT_PARAM, + participant.getCreatedAt()); notifParams.addProperty(ProtocolElements.PARTICIPANTJOINED_METADATA_PARAM, participant.getFullMetadata()); @@ -147,6 +153,7 @@ public class SessionEventsHandler { } } result.addProperty(ProtocolElements.PARTICIPANTJOINED_USER_PARAM, participant.getParticipantPublicId()); + result.addProperty(ProtocolElements.PARTICIPANTJOINED_CREATEDAT_PARAM, participant.getCreatedAt()); result.addProperty(ProtocolElements.PARTICIPANTJOINED_METADATA_PARAM, participant.getFullMetadata()); result.add("value", resultArray); @@ -181,8 +188,9 @@ public class SessionEventsHandler { } } - public void onPublishMedia(Participant participant, String streamId, String sessionId, MediaOptions mediaOptions, - String sdpAnswer, Set participants, Integer transactionId, OpenViduException error) { + public void onPublishMedia(Participant participant, String streamId, Long createdAt, String sessionId, + MediaOptions mediaOptions, String sdpAnswer, Set participants, Integer transactionId, + OpenViduException error) { if (error != null) { rpcNotificationService.sendErrorResponse(participant.getParticipantPrivateId(), transactionId, null, error); return; @@ -190,6 +198,7 @@ public class SessionEventsHandler { JsonObject result = new JsonObject(); result.addProperty(ProtocolElements.PUBLISHVIDEO_SDPANSWER_PARAM, sdpAnswer); result.addProperty(ProtocolElements.PUBLISHVIDEO_STREAMID_PARAM, streamId); + result.addProperty(ProtocolElements.PUBLISHVIDEO_CREATEDAT_PARAM, createdAt); rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, result); JsonObject params = new JsonObject(); @@ -197,6 +206,7 @@ public class SessionEventsHandler { JsonObject stream = new JsonObject(); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_STREAMID_PARAM, streamId); + stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_CREATEDAT_PARAM, createdAt); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_HASAUDIO_PARAM, mediaOptions.hasAudio); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_HASVIDEO_PARAM, mediaOptions.hasVideo); stream.addProperty(ProtocolElements.PARTICIPANTPUBLISHED_AUDIOACTIVE_PARAM, mediaOptions.audioActive); 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 86a1395e..0174c7cd 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 @@ -256,8 +256,8 @@ public class KurentoSessionManager extends SessionManager { + kurentoOptions.getFilter().getType()); log.error("PARTICIPANT {}: Error applying filter. The token has no permissions to apply filter {}", participant.getParticipantPublicId(), kurentoOptions.getFilter().getType(), e); - sessionEventsHandler.onPublishMedia(participant, null, session.getSessionId(), mediaOptions, sdpAnswer, - participants, transactionId, e); + sessionEventsHandler.onPublishMedia(participant, null, kParticipant.getPublisher().createdAt(), + session.getSessionId(), mediaOptions, sdpAnswer, participants, transactionId, e); throw e; } } @@ -269,8 +269,8 @@ 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); - sessionEventsHandler.onPublishMedia(participant, null, session.getSessionId(), mediaOptions, sdpAnswer, - participants, transactionId, e); + sessionEventsHandler.onPublishMedia(participant, null, kParticipant.getPublisher().createdAt(), + session.getSessionId(), mediaOptions, sdpAnswer, participants, transactionId, e); } if (this.openviduConfig.isRecordingModuleEnabled() @@ -305,8 +305,9 @@ public class KurentoSessionManager extends SessionManager { participants = kParticipant.getSession().getParticipants(); if (sdpAnswer != null) { - sessionEventsHandler.onPublishMedia(participant, participant.getPublisherStreamId(), session.getSessionId(), - mediaOptions, sdpAnswer, participants, transactionId, null); + sessionEventsHandler.onPublishMedia(participant, participant.getPublisherStreamId(), + kParticipant.getPublisher().createdAt(), session.getSessionId(), mediaOptions, sdpAnswer, + participants, transactionId, null); } }