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 a24ab683..e217cff4 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 @@ -437,18 +437,19 @@ public class SessionEventsHandler { } public void sendRecordingStartedNotification(Session session, Recording recording) { + if (recording.recordingNotificationSent.compareAndSet(false, true)) { + // Filter participants by roles according to "OPENVIDU_RECORDING_NOTIFICATION" + Set filteredParticipants = this.filterParticipantsByRole( + this.openviduConfig.getRolesFromRecordingNotification(), session.getParticipants()); - // 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()); + params.addProperty(ProtocolElements.RECORDINGSTARTED_NAME_PARAM, recording.getName()); - 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(), - ProtocolElements.RECORDINGSTARTED_METHOD, params); + for (Participant p : filteredParticipants) { + rpcNotificationService.sendNotification(p.getParticipantPrivateId(), + ProtocolElements.RECORDINGSTARTED_METHOD, params); + } } } 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 e8dde4de..bcaf216a 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 @@ -17,6 +17,8 @@ package io.openvidu.server.recording; +import java.util.concurrent.atomic.AtomicBoolean; + import com.google.gson.JsonObject; import io.openvidu.java.client.RecordingLayout; @@ -38,6 +40,8 @@ public class Recording { private boolean hasVideo = true; private RecordingProperties recordingProperties; + public AtomicBoolean recordingNotificationSent = new AtomicBoolean(false); + public Recording(String sessionId, String id, RecordingProperties recordingProperties) { this.sessionId = sessionId; this.createdAt = System.currentTimeMillis(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index 9a733787..311f4012 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -273,7 +273,7 @@ public class RecordingManager { this.cdr.recordRecordingStatusChanged(recording, null, recording.getCreatedAt(), Status.started); - if (!(RecordingUtils.IS_COMPOSED(properties.outputMode()) && properties.hasVideo())) { + if (!(OutputMode.COMPOSED.equals(properties.outputMode()) && properties.hasVideo())) { // Directly send recording started notification for all cases except for // COMPOSED recordings with video (will be sent on first RECORDER subscriber) this.sessionHandler.sendRecordingStartedNotification(session, recording);