From 3e42a6ef23493a249e9f863d9385788842543b4e Mon Sep 17 00:00:00 2001 From: Juan Navarro Date: Mon, 30 Aug 2021 18:53:01 +0200 Subject: [PATCH] recording: block on connect() before calling record() The Kurento RecorderEndpoint.record() method expects that all elements have been successfully connected. However if connect() is called non- blocking, then it might happen that record() is called in parallel, when the connections haven't been done yet. --- .../service/SingleStreamRecordingService.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java index b6ffdfa8..2417f460 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java @@ -269,6 +269,7 @@ public class SingleStreamRecordingService extends RecordingService { } connectAccordingToProfile(kurentoParticipant.getPublisher(), recorder, profile); + wrapper.getRecorder().record(); } finally { @@ -404,16 +405,18 @@ public class SingleStreamRecordingService extends RecordingService { private void connectAccordingToProfile(PublisherEndpoint publisherEndpoint, RecorderEndpoint recorder, MediaProfileSpecType profile) { + // Perform blocking connections, to ensure that elements are + // already connected when `RecorderEndpoint.record()` is called. switch (profile) { case WEBM: - publisherEndpoint.connect(recorder, MediaType.AUDIO, false); - publisherEndpoint.connect(recorder, MediaType.VIDEO, false); + publisherEndpoint.connect(recorder, MediaType.AUDIO, true); + publisherEndpoint.connect(recorder, MediaType.VIDEO, true); break; case WEBM_AUDIO_ONLY: - publisherEndpoint.connect(recorder, MediaType.AUDIO, false); + publisherEndpoint.connect(recorder, MediaType.AUDIO, true); break; case WEBM_VIDEO_ONLY: - publisherEndpoint.connect(recorder, MediaType.VIDEO, false); + publisherEndpoint.connect(recorder, MediaType.VIDEO, true); break; default: throw new UnsupportedOperationException("Unsupported profile when single stream recording: " + profile);