Skip to content

Commit dd8d1ae

Browse files
authored
Distinguish between inner and outer M3U(8) playlists. (#131)
1 parent 8da0444 commit dd8d1ae

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

main/src/main/java/com/sedmelluq/discord/lavaplayer/container/playlists/HlsStreamSegmentUrlProvider.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.slf4j.LoggerFactory;
99

1010
import java.io.IOException;
11+
import java.util.Arrays;
1112
import java.util.List;
1213

1314
import static com.sedmelluq.discord.lavaplayer.tools.io.HttpClientTools.fetchResponseLines;
@@ -29,15 +30,24 @@ protected String getQualityFromM3uDirective(ExtendedM3uParser.Line directiveLine
2930
return "default";
3031
}
3132

33+
protected boolean isSegmentPlaylist(String[] lines) {
34+
return Arrays.stream(lines).noneMatch(line -> line.startsWith("#EXT-X-STREAM-INF"));
35+
}
36+
3237
@Override
3338
protected String fetchSegmentPlaylistUrl(HttpInterface httpInterface) throws IOException {
3439
if (segmentPlaylistUrl != null) {
3540
return segmentPlaylistUrl;
3641
}
3742

3843
HttpUriRequest request = new HttpGet(streamListUrl);
39-
List<ChannelStreamInfo> streams = loadChannelStreamsList(fetchResponseLines(httpInterface, request,
40-
"HLS stream list"));
44+
String[] lines = fetchResponseLines(httpInterface, request, "HLS stream list");
45+
46+
if (isSegmentPlaylist(lines)) {
47+
return (segmentPlaylistUrl = streamListUrl);
48+
}
49+
50+
List<ChannelStreamInfo> streams = loadChannelStreamsList(lines);
4151

4252
if (streams.isEmpty()) {
4353
throw new IllegalStateException("No streams listed in HLS stream list.");

main/src/main/java/com/sedmelluq/discord/lavaplayer/source/stream/M3uStreamSegmentUrlProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ protected List<ChannelStreamInfo> loadChannelStreamsList(String[] lines) {
170170
}
171171

172172
streamInfoLine = null;
173-
} else if (line.isDirective() && "EXT-X-STREAM-INF".equals(line.directiveName)) {
173+
} else if (line.isDirective() && ("EXT-X-STREAM-INF".equals(line.directiveName) || "EXTINF".equals(line.directiveName))) {
174174
streamInfoLine = line;
175175
}
176176
}

0 commit comments

Comments
 (0)