Try to update the segment playlist URL, if loading the playlist fails

This commit is contained in:
0xboobface 2019-12-28 16:59:20 +01:00
parent 0fe466bc1a
commit d820d611f1
1 changed files with 9 additions and 6 deletions

View File

@ -124,6 +124,9 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
} }
throw new InvalidPlaylistException("Playlist has no media playlist"); throw new InvalidPlaylistException("Playlist has no media playlist");
} else { } else {
// update playlist url in case the streaming server has switched or something
LOG.debug("Loading segment playlist failed - trying to get a playlist URL");
segmentsURL = getSegmentPlaylistUrl(getModel());
throw new HttpException(response.code(), response.message()); throw new HttpException(response.code(), response.message());
} }
} catch (Exception e) { } catch (Exception e) {
@ -148,27 +151,27 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
LOG.debug("{} src {}", model.getName(), streamSource); LOG.debug("{} src {}", model.getName(), streamSource);
} }
String url = null; String url = null;
if(model.getStreamUrlIndex() >= 0 && model.getStreamUrlIndex() < streamSources.size()) { 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 // TODO don't use the index, but the bandwidth. if the bandwidth does not match, take the closest one
LOG.debug("{} selected {}", model.getName(), streamSources.get(model.getStreamUrlIndex())); LOG.debug("{} selected {}", model.getName(), streamSources.get(model.getStreamUrlIndex()));
url = streamSources.get(model.getStreamUrlIndex()).getMediaPlaylistUrl(); url = streamSources.get(model.getStreamUrlIndex()).getMediaPlaylistUrl();
} else { } else {
// filter out stream resolutions, which are too high // filter out stream resolutions, which are too high
int maxRes = Config.getInstance().getSettings().maximumResolution; int maxRes = Config.getInstance().getSettings().maximumResolution;
if(maxRes > 0) { if (maxRes > 0) {
for (Iterator<StreamSource> iterator = streamSources.iterator(); iterator.hasNext();) { for (Iterator<StreamSource> iterator = streamSources.iterator(); iterator.hasNext();) {
StreamSource streamSource = iterator.next(); StreamSource streamSource = iterator.next();
if(streamSource.height > 0 && maxRes < streamSource.height) { if (streamSource.height > 0 && maxRes < streamSource.height) {
LOG.trace("Res too high {} > {}", streamSource.height, maxRes); LOG.trace("Res too high {} > {}", streamSource.height, maxRes);
iterator.remove(); iterator.remove();
} }
} }
} }
if(streamSources.isEmpty()) { if (streamSources.isEmpty()) {
throw new ExecutionException(new RuntimeException("No stream left in playlist")); throw new ExecutionException(new RuntimeException("No stream left in playlist"));
} else { } else {
LOG.debug("{} selected {}", model.getName(), streamSources.get(streamSources.size()-1)); LOG.debug("{} selected {}", model.getName(), streamSources.get(streamSources.size() - 1));
url = streamSources.get(streamSources.size()-1).getMediaPlaylistUrl(); url = streamSources.get(streamSources.size() - 1).getMediaPlaylistUrl();
} }
} }
LOG.debug("Segment playlist url {}", url); LOG.debug("Segment playlist url {}", url);