Checklist
Affected version
0.28.0
Steps to reproduce the bug
-
Open this album in NewPipe (it has some tracks listed, but not available): https://feiertagsk.bandcamp.com/album/alchemist
-
Put it on play in the background. Wait for it to play the first song (available) and watch it as it goes for the second track (not available).
-
The app should crash with a “network error” (though it is not a network error).
-
In a Samsung device (Galaxy S23, Android 16, all updates installed), even the system takes the toll, with an unresponsive UI.
Expected behavior
To gracefully skip to the next available track instead of crashing.
Actual behavior
Crashing with a generic error identifier (“network”) and also making the system crash.
Screenshots/Screen recordings
No response
Logs
Exception
- User Action: play stream
- Request: Player error[type=ERROR_CODE_IO_UNSPECIFIED] occurred while playing
- Content Country: GB
- Content Language: en-GB
- App Language: en_US
- Service: Bandcamp
- Timestamp: 2025-12-13T22:31:28.026-03:00
- Package: org.schabi.newpipe
- Service: Bandcamp
- Version: 0.28.0
- OS: [This data point is just too unique in Samsung's devices to be shared around]
Crash log
com.google.android.exoplayer2.ExoPlaybackException: Source error
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:644)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:620)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:273)
at android.os.Looper.loop(Looper.java:363)
at android.os.HandlerThread.run(HandlerThread.java:85)
Caused by: java.io.IOException: java.lang.Exception: java.lang.IllegalArgumentException: The url is null or empty
at org.schabi.newpipe.player.mediasource.FailedMediaSource.maybeThrowSourceInfoRefreshError(FailedMediaSource.java:129)
at com.google.android.exoplayer2.source.MaskingMediaPeriod.maybeThrowPrepareError(MaskingMediaPeriod.java:156)
at com.google.android.exoplayer2.source.MaskingMediaPeriod.maybeThrowPrepareError(MaskingMediaPeriod.java:154)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1024)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:502)
... 4 more
Caused by: java.lang.Exception: java.lang.IllegalArgumentException: The url is null or empty
at org.schabi.newpipe.player.playback.MediaSourceManager.lambda$getLoadedMediaSource$7(MediaSourceManager.java:454)
at org.schabi.newpipe.player.playback.MediaSourceManager.$r8$lambda$o9pPAAzp1URPxayOlD1n6iDJBCc(MediaSourceManager.java:0)
at org.schabi.newpipe.player.playback.MediaSourceManager$$ExternalSyntheticLambda6.apply(R8$$SyntheticClass:0)
at io.reactivex.rxjava3.internal.operators.single.SingleOnErrorReturn$OnErrorReturn.onError(SingleOnErrorReturn.java:55)
at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:70)
at io.reactivex.rxjava3.internal.operators.single.SingleDoOnError$DoOnError.onError(SingleDoOnError.java:63)
at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.onError(SingleSubscribeOn.java:73)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle$ToSingleMaybeSubscriber.onError(MaybeToSingle.java:89)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onError(FlowableElementAtMaybe.java:94)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.onError(MaybeConcatArray.java:100)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle$FromSingleObserver.onError(MaybeFromSingle.java:82)
at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess$DoOnSuccess.onError(SingleDoOnSuccess.java:65)
at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:47)
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: java.lang.IllegalArgumentException: The url is null or empty
at org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory.fromUrl(LinkHandlerFactory.java:59)
at org.schabi.newpipe.extractor.StreamingService.getStreamExtractor(StreamingService.java:302)
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)
... 23 more
Affected Android/Custom ROM version
Android 16 / One UI 8.0
Affected device model
Samsung Galaxy S23
Additional information
No response
Checklist
Affected version
0.28.0
Steps to reproduce the bug
Open this album in NewPipe (it has some tracks listed, but not available): https://feiertagsk.bandcamp.com/album/alchemist
Put it on play in the background. Wait for it to play the first song (available) and watch it as it goes for the second track (not available).
The app should crash with a “network error” (though it is not a network error).
In a Samsung device (Galaxy S23, Android 16, all updates installed), even the system takes the toll, with an unresponsive UI.
Expected behavior
To gracefully skip to the next available track instead of crashing.
Actual behavior
Crashing with a generic error identifier (“network”) and also making the system crash.
Screenshots/Screen recordings
No response
Logs
Exception
Crash log
Affected Android/Custom ROM version
Android 16 / One UI 8.0
Affected device model
Samsung Galaxy S23
Additional information
No response