TEAM EDIT: if you are a developer and want to help us implement YouTube SABR protocol for playback and downloading (its enforcement is an origin of this issue), please head to #12248 for instructions! The NewPipe team is unfortunately busy at this time so any help is appreciated.
Affected version
0.27.6
Steps to reproduce the bug
Hey folks, I didn't do anything exciting to reproduce this bug.
- Open the app
- Play a video
- Only 360p resolution available on most of videos
- Get an error at the bottom with a report button (which lead me here pasting the error below 👇)
Expected behavior
The video should have played with no error.
Actual behavior
The video played, but this error displayed at the bottom suggesting to report it.
Logs
Exception
- User Action: requested stream
- Request: https://www.youtube.com/watch?v=prxCElDCBdw
- Content Country: US
- Content Language: en-US
- App Language: en_US
- Service: YouTube
- Timestamp: 2025-03-25T12:05:14.427-04:00
- Package: org.schabi.newpipe
- Service: YouTube
- Version: 0.27.6
- OS: Linux Android 15 - 35
Exceptions (2)
Crash log 1
org.schabi.newpipe.extractor.exceptions.ExtractionException: Couldn't get audio streams
at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:153)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:81)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:72)
at org.schabi.newpipe.util.ExtractorHelper.lambda$getStreamInfo$3(ExtractorHelper.java:118)
at org.schabi.newpipe.util.ExtractorHelper.$r8$lambda$bVfA-5gb6gDc8jcAgcGWG5oH0FE(ExtractorHelper.java:0)
at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda3.call(R8$$SyntheticClass:0)
at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:16144)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
at java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:348)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at java.lang.Thread.run(Thread.java:1119)
Caused by: org.schabi.newpipe.extractor.exceptions.ParsingException: Could not get audio streams
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getItags(YoutubeStreamExtractor.java:1223)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getAudioStreams(YoutubeStreamExtractor.java:650)
at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:149)
... 29 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
at org.schabi.newpipe.extractor.utils.Parser.compatParseMap(Parser.java:125)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.buildAndAddItagInfoToList(YoutubeStreamExtractor.java:1386)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.lambda$getStreamsFromStreamingDataKey$15(YoutubeStreamExtractor.java:1360)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.$r8$lambda$Db3OkY5wOpYIvq9uxmsIvYyLcaY(YoutubeStreamExtractor.java:0)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor$$ExternalSyntheticLambda13.apply(R8$$SyntheticClass:0)
at j$.util.stream.q.accept(SourceFile:195)
at j$.util.stream.q.accept(SourceFile:195)
at j$.util.stream.q.accept(SourceFile:177)
at j$.util.a.forEachRemaining(SourceFile:720)
at j$.util.stream.b.n(SourceFile:484)
at j$.util.stream.b.O(SourceFile:474)
at j$.util.stream.Q.b(SourceFile:150)
at j$.util.stream.b.w(SourceFile:234)
at j$.util.stream.j2.forEach(SourceFile:497)
at j$.util.stream.p.accept(SourceFile:274)
at j$.util.S.forEachRemaining(SourceFile:948)
at j$.util.stream.b.n(SourceFile:484)
at j$.util.stream.b.O(SourceFile:474)
at j$.util.stream.Q.b(SourceFile:150)
at j$.util.stream.b.w(SourceFile:234)
at j$.util.stream.j2.forEachOrdered(SourceFile:502)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getItags(YoutubeStreamExtractor.java:1215)
... 31 more
Crash log 2
org.schabi.newpipe.extractor.exceptions.ExtractionException: Couldn't get video only streams
at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:165)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:81)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:72)
at org.schabi.newpipe.util.ExtractorHelper.lambda$getStreamInfo$3(ExtractorHelper.java:118)
at org.schabi.newpipe.util.ExtractorHelper.$r8$lambda$bVfA-5gb6gDc8jcAgcGWG5oH0FE(ExtractorHelper.java:0)
at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda3.call(R8$$SyntheticClass:0)
at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:16144)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
at java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:348)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at java.lang.Thread.run(Thread.java:1119)
Caused by: org.schabi.newpipe.extractor.exceptions.ParsingException: Could not get video-only streams
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getItags(YoutubeStreamExtractor.java:1223)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getVideoOnlyStreams(YoutubeStreamExtractor.java:664)
at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:163)
... 29 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
at org.schabi.newpipe.extractor.utils.Parser.compatParseMap(Parser.java:125)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.buildAndAddItagInfoToList(YoutubeStreamExtractor.java:1386)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.lambda$getStreamsFromStreamingDataKey$15(YoutubeStreamExtractor.java:1360)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.$r8$lambda$Db3OkY5wOpYIvq9uxmsIvYyLcaY(YoutubeStreamExtractor.java:0)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor$$ExternalSyntheticLambda13.apply(R8$$SyntheticClass:0)
at j$.util.stream.q.accept(SourceFile:195)
at j$.util.stream.q.accept(SourceFile:195)
at j$.util.stream.q.accept(SourceFile:177)
at j$.util.a.forEachRemaining(SourceFile:720)
at j$.util.stream.b.n(SourceFile:484)
at j$.util.stream.b.O(SourceFile:474)
at j$.util.stream.Q.b(SourceFile:150)
at j$.util.stream.b.w(SourceFile:234)
at j$.util.stream.j2.forEach(SourceFile:497)
at j$.util.stream.p.accept(SourceFile:274)
at j$.util.S.forEachRemaining(SourceFile:948)
at j$.util.stream.b.n(SourceFile:484)
at j$.util.stream.b.O(SourceFile:474)
at j$.util.stream.Q.b(SourceFile:150)
at j$.util.stream.b.w(SourceFile:234)
at j$.util.stream.j2.forEachOrdered(SourceFile:502)
at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.getItags(YoutubeStreamExtractor.java:1215)
... 31 more
Affected Android/Custom ROM version
GrapheneOS
Affected device model
Pixel 8
Additional information
Further Noted that Download option as audio isn't available
TEAM EDIT: if you are a developer and want to help us implement YouTube SABR protocol for playback and downloading (its enforcement is an origin of this issue), please head to #12248 for instructions! The NewPipe team is unfortunately busy at this time so any help is appreciated.
Affected version
0.27.6
Steps to reproduce the bug
Hey folks, I didn't do anything exciting to reproduce this bug.
Expected behavior
The video should have played with no error.
Actual behavior
The video played, but this error displayed at the bottom suggesting to report it.
Logs
Exception
Exceptions (2)
Crash log 1
Crash log 2
Affected Android/Custom ROM version
GrapheneOS
Affected device model
Pixel 8
Additional information
Further Noted that Download option as audio isn't available