From e5fda35c51ad07136bb4d9803bb8b1aafc1ac859 Mon Sep 17 00:00:00 2001 From: AudricV <74829229+AudricV@users.noreply.github.com> Date: Wed, 15 Nov 2023 22:52:57 +0100 Subject: [PATCH] Remove OPUS HLS streams from playable streams This format is not supported by ExoPlayer when returned as HLS streams, so we can't play streams using this format and this delivery method. Also improve the Javadoc of ListHelper.getPlayableStreams. --- .../org/schabi/newpipe/util/ListHelper.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java index 5918ece25..534d4fddd 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java @@ -189,13 +189,16 @@ public final class ListHelper { /** * Return a {@link Stream} list which only contains streams which can be played by the player. - *
- * Some formats are not supported. For more info, see {@link #SUPPORTED_ITAG_IDS}. - * Torrent streams are also removed, because they cannot be retrieved. + * + *

+ * Some formats are not supported, see {@link #SUPPORTED_ITAG_IDS} for more details. + * Torrent streams are also removed, because they cannot be retrieved, like OPUS streams using + * HLS as their delivery method, since they are not supported by ExoPlayer. + *

* * @param the item type's class that extends {@link Stream} * @param streamList the original stream list - * @param serviceId + * @param serviceId the service ID from which the streams' list comes from * @return a stream list which only contains streams that can be played the player */ @NonNull @@ -204,6 +207,8 @@ public final class ListHelper { final int youtubeServiceId = YouTube.getServiceId(); return getFilteredStreamList(streamList, stream -> stream.getDeliveryMethod() != DeliveryMethod.TORRENT + && (stream.getDeliveryMethod() != DeliveryMethod.HLS + || stream.getFormat() != MediaFormat.OPUS) && (serviceId != youtubeServiceId || stream.getItagItem() == null || SUPPORTED_ITAG_IDS.contains(stream.getItagItem().id))); @@ -295,7 +300,9 @@ public final class ListHelper { final Comparator cmp = getAudioFormatComparator(context); for (final AudioStream stream : audioStreams) { - if (stream.getDeliveryMethod() == DeliveryMethod.TORRENT) { + if (stream.getDeliveryMethod() == DeliveryMethod.TORRENT + || (stream.getDeliveryMethod() == DeliveryMethod.HLS + && stream.getFormat() == MediaFormat.OPUS)) { continue; }