Move stalled download detection from segmentDownloadFinished() to call()

This commit is contained in:
0xb00bface 2021-10-07 18:29:23 +02:00
parent 3a3d7a7b8e
commit 2f34f9a687
1 changed files with 9 additions and 13 deletions

View File

@ -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);