mirror of https://github.com/OpenVidu/openvidu.git
openvidu-server: refactor recordingStarted notification for COMPOSED with video
parent
c646f66aab
commit
35a6e823b6
|
@ -64,8 +64,6 @@ public class SessionEventsHandler {
|
||||||
@Autowired
|
@Autowired
|
||||||
protected OpenviduBuildInfo openviduBuildConfig;
|
protected OpenviduBuildInfo openviduBuildConfig;
|
||||||
|
|
||||||
protected Map<String, Recording> recordingsToSendClientEvents = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
public void onSessionCreated(Session session) {
|
public void onSessionCreated(Session session) {
|
||||||
CDR.recordSessionCreated(session);
|
CDR.recordSessionCreated(session);
|
||||||
}
|
}
|
||||||
|
@ -381,13 +379,6 @@ public class SessionEventsHandler {
|
||||||
result.addProperty(ProtocolElements.RECEIVEVIDEO_SDPANSWER_PARAM, sdpAnswer);
|
result.addProperty(ProtocolElements.RECEIVEVIDEO_SDPANSWER_PARAM, sdpAnswer);
|
||||||
}
|
}
|
||||||
rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, result);
|
rpcNotificationService.sendResponse(participant.getParticipantPrivateId(), transactionId, result);
|
||||||
|
|
||||||
if (participant.isRecorderParticipant()) {
|
|
||||||
recordingsToSendClientEvents.computeIfPresent(session.getSessionId(), (key, value) -> {
|
|
||||||
sendRecordingStartedNotification(session, value);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onUnsubscribe(Participant participant, Integer transactionId, OpenViduException error) {
|
public void onUnsubscribe(Participant participant, Integer transactionId, OpenViduException error) {
|
||||||
|
@ -556,9 +547,6 @@ public class SessionEventsHandler {
|
||||||
|
|
||||||
public void sendRecordingStoppedNotification(Session session, Recording recording, EndReason reason) {
|
public void sendRecordingStoppedNotification(Session session, Recording recording, EndReason reason) {
|
||||||
|
|
||||||
// Be sure to clean this map (this should return null)
|
|
||||||
recordingsToSendClientEvents.remove(session.getSessionId());
|
|
||||||
|
|
||||||
// Filter participants by roles according to "OPENVIDU_RECORDING_NOTIFICATION"
|
// Filter participants by roles according to "OPENVIDU_RECORDING_NOTIFICATION"
|
||||||
Set<Participant> existingParticipants;
|
Set<Participant> existingParticipants;
|
||||||
try {
|
try {
|
||||||
|
@ -713,10 +701,6 @@ public class SessionEventsHandler {
|
||||||
Set<Participant> subscribedParticipants) {
|
Set<Participant> subscribedParticipants) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void storeRecordingToSendClientEvent(Recording recording) {
|
|
||||||
recordingsToSendClientEvents.put(recording.getSessionId(), recording);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Set<Participant> filterParticipantsByRole(Set<OpenViduRole> roles, Set<Participant> participants) {
|
protected Set<Participant> filterParticipantsByRole(Set<OpenViduRole> roles, Set<Participant> participants) {
|
||||||
return participants.stream().filter(part -> {
|
return participants.stream().filter(part -> {
|
||||||
if (part.isRecorderOrSttOrBroadcastParticipant()) {
|
if (part.isRecorderOrSttOrBroadcastParticipant()) {
|
||||||
|
|
|
@ -304,12 +304,8 @@ public class RecordingManager {
|
||||||
this.cdr.recordRecordingStatusChanged(recording, null, recording.getCreatedAt(),
|
this.cdr.recordRecordingStatusChanged(recording, null, recording.getCreatedAt(),
|
||||||
Status.started);
|
Status.started);
|
||||||
|
|
||||||
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)
|
|
||||||
// Both INDIVIDUAL and COMPOSED_QUICK_START should notify immediately
|
|
||||||
this.sessionHandler.sendRecordingStartedNotification(session, recording);
|
this.sessionHandler.sendRecordingStartedNotification(session, recording);
|
||||||
}
|
|
||||||
if (session.getActivePublishers() == 0) {
|
if (session.getActivePublishers() == 0) {
|
||||||
// Init automatic recording stop if no publishers when starting the recording
|
// Init automatic recording stop if no publishers when starting the recording
|
||||||
log.info(
|
log.info(
|
||||||
|
@ -318,6 +314,7 @@ public class RecordingManager {
|
||||||
this.openviduConfig.getOpenviduRecordingAutostopTimeout());
|
this.openviduConfig.getOpenviduRecordingAutostopTimeout());
|
||||||
this.initAutomaticRecordingStopThread(session, EndReason.automaticStop);
|
this.initAutomaticRecordingStopThread(session, EndReason.automaticStop);
|
||||||
}
|
}
|
||||||
|
|
||||||
return recording;
|
return recording;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -936,8 +933,6 @@ public class RecordingManager {
|
||||||
|| (sessionsRecordingsStarting.putIfAbsent(recording.getSessionId(), recording) != null)) {
|
|| (sessionsRecordingsStarting.putIfAbsent(recording.getSessionId(), recording) != null)) {
|
||||||
log.error("Concurrent session recording initialization. Aborting this thread");
|
log.error("Concurrent session recording initialization. Aborting this thread");
|
||||||
throw new RuntimeException("Concurrent initialization of recording " + recording.getId());
|
throw new RuntimeException("Concurrent initialization of recording " + recording.getId());
|
||||||
} else {
|
|
||||||
this.sessionHandler.storeRecordingToSendClientEvent(recording);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue