[Bug] NicoNico livestreams not working
Checklist (Your issue will be automatically closed if you delete this part)
- [x] I make sure that there are no existing issues - open or closed - which I could contribute my information to.
- [x] I understand that issues with limited impact, such as those occurring on specific devices or under specific network conditions, will not be fixed.
- [x] I am able to reproduce the bug with the latest version given here: CLICK THIS LINK.
- [x] I have attached the error report in the issue.
Describe the bug NNL won't work or show thumbnails when LIVE videos are searched for.
Frequency 💯 Percent
Steps to reproduce the bug Search for videos on NN but select live videos specifically.
Device (e.g. Pixel 9 Pro) Seems to fail across every device I've tried so far.
Error report
Exception
- User Action: requested stream
- Request: https://live.nicovideo.jp/watch/lv347266644
- Content Country: US
- Content Language: en-US
- App Language: en_US
- Service: NicoNico (Anonymous)
- Version: 4.2.1
- OS: Linux TCL/T601DL/Bremen_TF:11/RKQ1.210614.002/vA6G:user/release-keys 11 - 30
Crash log
java.lang.RuntimeException: com.grack.nanojson.JsonParserException: Unexpected token 'error' on line 1, char 1
at org.schabi.newpipe.extractor.services.niconico.extractors.NiconicoStreamExtractor.getRelatedItems(NiconicoStreamExtractor.java:336)
at org.schabi.newpipe.extractor.utils.ExtractorHelper.getRelatedItemsOrLogError(ExtractorHelper.java:48)
at org.schabi.newpipe.extractor.stream.StreamInfo.extractOptionalData(StreamInfo.java:441)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:110)
at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:88)
at org.schabi.newpipe.util.ExtractorHelper.getNewStreamInfo(ExtractorHelper.java:132)
at org.schabi.newpipe.util.ExtractorHelper.lambda$getStreamInfo$3(ExtractorHelper.java:127)
at org.schabi.newpipe.util.ExtractorHelper.$r8$lambda$YTHJjScxCJNO1LTCqs3IKy35iyY(Unknown Source:0)
at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda5.call(Unknown Source:4)
at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5330)
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:15868)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5330)
at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
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:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: com.grack.nanojson.JsonParserException: Unexpected token 'error' on line 1, char 1
at com.grack.nanojson.JsonTokener.createParseException(Unknown Source:44)
at com.grack.nanojson.JsonTokener.createHelpfulException(Unknown Source:119)
at com.grack.nanojson.JsonTokener.advanceToToken(Unknown Source:95)
at com.grack.nanojson.JsonParser.advanceToken(Unknown Source:12)
at com.grack.nanojson.JsonParser.parse(Unknown Source:1)
at com.grack.nanojson.JsonParser$JsonParserContext.from(Unknown Source:19)
at org.schabi.newpipe.extractor.services.niconico.extractors.NiconicoStreamExtractor.getRelatedItems(NiconicoStreamExtractor.java:329)
... 32 more
Additional context
If a request could be made in this report, it's an option to have error reports sent to you automatically rather than go through all these troublesome things. Essentially an automatic crash/error report. Would probably end almost all problems for good if issues are addressed quickly since most who use an app would never report any issues when they arise, preferring to simply leave/uninstall.
NicoNico is applying encryption to live streams, which makes our app unable to play them.
We have to wait until the community find a way to decrypt them, see https://github.com/yt-dlp/yt-dlp/issues/12365
For your suggestion, the problem is F-Droid doesn't allow apps to report anything automatically, so that's the best we can do.