From f2b4bbe66e0d772dfafa18461cf921003bfcda66 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Thu, 2 Jul 2026 15:58:42 +0200 Subject: [PATCH] fix: respect active SABR tracks on cold start --- .../youtube/sabr/YoutubeSabrRequestBuilder.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/sabr/YoutubeSabrRequestBuilder.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/sabr/YoutubeSabrRequestBuilder.java index 79a4d976..0a02d10d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/sabr/YoutubeSabrRequestBuilder.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/sabr/YoutubeSabrRequestBuilder.java @@ -34,7 +34,10 @@ static byte[] buildFirstMediaRequest(@Nonnull final YoutubeSabrInfo info, final SabrProto.Writer request = new SabrProto.Writer(); request.writeMessage(1, buildClientAbrState(audioFormat, videoFormat, 0, false, - ENABLED_TRACK_TYPES_VIDEO_AND_AUDIO, streamState)); + streamState == null + ? ENABLED_TRACK_TYPES_VIDEO_AND_AUDIO + : streamState.getEnabledTrackTypesBitfield(), + streamState)); request.writeBytes(5, decodeBase64(ustreamerConfig)); writePreferredFormats(request, info, audioFormat, videoFormat, streamState); request.writeMessage(19, streamState == null @@ -221,19 +224,23 @@ private static void writePreferredFormats(@Nonnull final SabrProto.Writer reques return; } for (final YoutubeSabrFormat format : info.getFormats()) { - if (format.isAudio()) { + if (format.isAudio() && streamState.shouldSelectAudioFormat()) { request.writeMessage(16, SabrProto.formatId(format)); } } for (final YoutubeSabrFormat format : info.getFormats()) { - if (format.isVideo()) { + if (format.isVideo() && streamState.shouldSelectVideoFormat()) { request.writeMessage(17, SabrProto.formatId(format)); } } return; } - request.writeMessage(16, SabrProto.formatId(audioFormat)); - request.writeMessage(17, SabrProto.formatId(videoFormat)); + if (streamState == null || streamState.shouldSelectAudioFormat()) { + request.writeMessage(16, SabrProto.formatId(audioFormat)); + } + if (streamState == null || streamState.shouldSelectVideoFormat()) { + request.writeMessage(17, SabrProto.formatId(videoFormat)); + } } private static void writeOfficialWebPreferredFormats(@Nonnull final SabrProto.Writer request,