From 2f34f9a687735d01f23004eb9325a3c25974185f Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Thu, 7 Oct 2021 18:29:23 +0200 Subject: [PATCH] Move stalled download detection from segmentDownloadFinished() to call() --- .../download/hls/AbstractHlsDownload.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java index 4428ddc9..fff1eac6 100644 --- a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java @@ -23,14 +23,8 @@ import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; @@ -110,10 +104,6 @@ public abstract class AbstractHlsDownload extends AbstractDownload { protected abstract OutputStream getSegmentOutputStream(Segment segment) throws IOException; protected void segmentDownloadFinished(SegmentDownload segmentDownload) { // NOSONAR - if (Duration.between(lastSegmentDownload, Instant.now()).getSeconds() > MAX_SECONDS_WITHOUT_TRANSFER) { - LOG.info("No video data received for {} seconds. Stopping recording for model {}", MAX_SECONDS_WITHOUT_TRANSFER, model); - stop(); - } lastSegmentDownload = Instant.now(); } @@ -121,6 +111,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload { @Override public AbstractHlsDownload call() throws Exception { + try { if (segmentPlaylistUrl == null) { segmentPlaylistUrl = getSegmentPlaylistUrl(model); @@ -146,6 +137,11 @@ public abstract class AbstractHlsDownload extends AbstractDownload { recordingEvents.remove(0); } + if (Duration.between(lastSegmentDownload, Instant.now()).getSeconds() > MAX_SECONDS_WITHOUT_TRANSFER) { + LOG.info("No video data received for {} seconds. Stopping recording for model {}", MAX_SECONDS_WITHOUT_TRANSFER, model); + stop(); + return this; + } } catch (ParseException e) { LOG.error("Couldn't parse HLS playlist for model {}\n{}", model, e.getInput(), e); stop(); @@ -235,7 +231,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload { for (StreamSource streamSource : streamSources) { LOG.debug("{} src {}", model.getName(), streamSource); } - String url = null; + String url; if (model.getStreamUrlIndex() >= 0 && model.getStreamUrlIndex() < streamSources.size()) { // TODO don't use the index, but the bandwidth. if the bandwidth does not match, take the closest one StreamSource source = streamSources.get(model.getStreamUrlIndex()); @@ -275,7 +271,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload { try (Response response = client.execute(request, config.getSettings().playlistRequestTimeout)) { if (response.isSuccessful()) { consecutivePlaylistTimeouts = 0; - String body = response.body().string(); + String body = Objects.requireNonNull(response.body()).string(); if (!body.contains("#EXTINF")) { // no segments, empty playlist return new SegmentPlaylist(segmentPlaylistUrl);