openvidu-server: recording stop process fix

pull/375/head
pabloFuente 2019-07-01 13:51:16 +02:00
parent dd29173785
commit a00c90423b
3 changed files with 22 additions and 17 deletions

View File

@ -378,15 +378,18 @@ public class ComposedRecordingService extends RecordingService {
// TODO: DOWNLOAD FILE IF SCALABILITY MODE // TODO: DOWNLOAD FILE IF SCALABILITY MODE
final Recording[] finalRecordingArray = new Recording[1]; final Recording[] finalRecordingArray = new Recording[1];
finalRecordingArray[0] = recording;
try { try {
this.recordingDownloader.downloadRecording(recording, null, () -> { this.recordingDownloader.downloadRecording(finalRecordingArray[0], null, () -> {
String filesPath = this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + "/"; String filesPath = this.openviduConfig.getOpenViduRecordingPath() + finalRecordingArray[0].getId()
File videoFile = new File(filesPath + recording.getName() + ".webm"); + "/";
File videoFile = new File(filesPath + finalRecordingArray[0].getName() + ".webm");
long finalSize = videoFile.length(); long finalSize = videoFile.length();
double finalDuration = (double) compositeWrapper.getDuration() / 1000; double finalDuration = (double) compositeWrapper.getDuration() / 1000;
this.updateFilePermissions(filesPath); this.updateFilePermissions(filesPath);
finalRecordingArray[0] = this.sealRecordingMetadataFileAsReady(recording, finalSize, finalDuration, finalRecordingArray[0] = this.sealRecordingMetadataFileAsReady(finalRecordingArray[0], finalSize,
filesPath + RecordingManager.RECORDING_ENTITY_FILE + recording.getId()); finalDuration,
filesPath + RecordingManager.RECORDING_ENTITY_FILE + finalRecordingArray[0].getId());
final long timestamp = System.currentTimeMillis(); final long timestamp = System.currentTimeMillis();
cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp); cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp);
@ -394,15 +397,15 @@ public class ComposedRecordingService extends RecordingService {
finalRecordingArray[0].getStatus()); finalRecordingArray[0].getStatus());
}); });
} catch (IOException e) { } catch (IOException e) {
log.error("Error while downloading recording {}: {}", recording.getName(), e.getMessage()); log.error("Error while downloading recording {}: {}", finalRecordingArray[0].getName(), e.getMessage());
} }
Recording finalRecording = finalRecordingArray[0] != null ? finalRecordingArray[0] : recording;
if (reason != null && session != null) { if (reason != null && session != null) {
this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecording, reason); this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecordingArray[0],
reason);
} }
return finalRecording; return finalRecordingArray[0];
} }
private void waitForVideoFileNotEmpty(Recording recording) throws OpenViduException { private void waitForVideoFileNotEmpty(Recording recording) throws OpenViduException {

View File

@ -115,9 +115,10 @@ public abstract class RecordingService {
recording.setStatus(status); recording.setStatus(status);
recording.setSize(size); // Size in bytes recording.setSize(size); // Size in bytes
recording.setDuration(duration > 0 ? duration : 0); // Duration in seconds recording.setDuration(duration > 0 ? duration : 0); // Duration in seconds
this.fileWriter.overwriteFile(metadataFilePath, recording.toJson().toString());
if (this.fileWriter.overwriteFile(metadataFilePath, recording.toJson().toString())) {
log.info("Sealed recording metadata file at {} with status [{}]", metadataFilePath, status.name()); log.info("Sealed recording metadata file at {} with status [{}]", metadataFilePath, status.name());
}
return recording; return recording;
} }

View File

@ -162,15 +162,16 @@ public class SingleStreamRecordingService extends RecordingService {
// TODO: DOWNLOAD FILES IF SCALABILITY MODE // TODO: DOWNLOAD FILES IF SCALABILITY MODE
final Recording[] finalRecordingArray = new Recording[1]; final Recording[] finalRecordingArray = new Recording[1];
finalRecordingArray[0] = recording;
try { try {
this.recordingDownloader.downloadRecording(recording, wrappers.keySet(), () -> { this.recordingDownloader.downloadRecording(finalRecordingArray[0], wrappers.keySet(), () -> {
// Update recording entity files with final file size // Update recording entity files with final file size
for (RecorderEndpointWrapper wrapper : wrappers.values()) { for (RecorderEndpointWrapper wrapper : wrappers.values()) {
if (wrapper.getSize() == 0) { if (wrapper.getSize() == 0) {
updateIndividualMetadataFile(wrapper); updateIndividualMetadataFile(wrapper);
} }
} }
finalRecordingArray[0] = this.sealMetadataFiles(recording); finalRecordingArray[0] = this.sealMetadataFiles(finalRecordingArray[0]);
final long timestamp = System.currentTimeMillis(); final long timestamp = System.currentTimeMillis();
cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp); cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp);
@ -178,15 +179,15 @@ public class SingleStreamRecordingService extends RecordingService {
finalRecordingArray[0].getStatus()); finalRecordingArray[0].getStatus());
}); });
} catch (IOException e) { } catch (IOException e) {
log.error("Error while downloading recording {}", recording.getName()); log.error("Error while downloading recording {}", finalRecordingArray[0].getName());
} }
Recording finalRecording = finalRecordingArray[0] != null ? finalRecordingArray[0] : recording;
if (reason != null && session != null) { if (reason != null && session != null) {
this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecording, reason); this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecordingArray[0],
reason);
} }
return finalRecording; return finalRecordingArray[0];
} }
public void startRecorderEndpointForPublisherEndpoint(Session session, String recordingId, public void startRecorderEndpointForPublisherEndpoint(Session session, String recordingId,