Newpipe: "This live event has ended" - Crash

Created on 2 Apr 2020  路  9Comments  路  Source: TeamNewPipe/NewPipe

Version

  • 0.19.1

Steps to reproduce the bug

Open https://www.youtube.com/watch?v=x2hDMrb4E8I and you're shown the error report.

Expected behavior

Since you can see the video duration and "streamed x time ago", you would think it would play like any other such video.

Actual behaviour

Newpipe crashes.

On opening this URL in the browser, Youtube can play it, but Invidious shows an error page which says "This live event has ended."

From #3992

There seems to be some website parse error specific to some videos.
I attach the error log here. Interestingly, most other videos work fine.


Exception

  • __User Action:__ requested stream
  • __Request:__ https://www.youtube.com/watch?v=qQ99wbHnrAI
  • __Content Country:__ US
  • __Content Language:__ en
  • __App Language:__ en_GB
  • __Service:__ YouTube
  • __Version:__ 0.19.8
  • __OS:__ Linux Android 8.1.0 - 27
    Crash log

org.schabi.newpipe.extractor.stream.StreamInfo$StreamExtractException: Could not get any stream. See error variable to get further details.
    at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:194)
    at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:72)
    at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:64)
    at org.schabi.newpipe.util.ExtractorHelper.lambda$getStreamInfo$3(ExtractorHelper.java:116)
    at org.schabi.newpipe.util.-$$Lambda$ExtractorHelper$5fJcha6Sq5APJBLdG6osaJby-mc.call(Unknown Source:4)
    at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
    at io.reactivex.Maybe.subscribe(Maybe.java:4290)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
    at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
    at io.reactivex.Flowable.subscribe(Flowable.java:14935)
    at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
    at io.reactivex.Maybe.subscribe(Maybe.java:4290)
    at io.reactivex.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
    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:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)



bug requires extractor change youtube

All 9 comments

Can confirm. I'll look into this tomorrow.

Oh. I was about to post a crash log. Not needed?

Another thing of note is that this particular video isn't showing up on the guy's channel.

Indeed not needed. I've saved everything I need to debug it.

The crash is caused by a problem with getErrorMessage(), that does not return null when it fails to extract the error:

    @Override
    public String getErrorMessage() {
        try {
            return getTextFromObject(initialAjaxJson.getObject(2).getObject("playerResponse").getObject("playabilityStatus")
                    .getObject("errorScreen").getObject("playerErrorMessageRenderer").getObject("reason"));
        } catch (ParsingException e) {
            return null;
        }
    }

It should be replaced by this:

    @Override
    @Nullable
    public String getErrorMessage() {
        try {
            JsonObject errorScreen = playerResponse.getObject("playabilityStatus")
                    .getObject("errorScreen");
            if (errorScreen == null) {
                return null;
            }

            return getTextFromObject(
                    errorScreen.getObject("playerErrorMessageRenderer").getObject("reason"));
        } catch (ParsingException e) {
            return null;
        }
    }

The main problem, though, is that playerResponse.streamingData does not contain stream information, but only dash mpd urls. By manually searching trough the json, though, I found that formats and adaptiveFormats exists, but they are not under the playerResponse obtained by the extractor, but under another one to be found as a string at initialAjaxJson[2].player.args.player_response.
Since I'm not sure how I should proceed (i.e. if I should replace the default json with that other player_response, thus slowing down everything due to having to parse an additional string into json, or if this should be done only for finished livestreams, or what), so I'll leave it to you @wb9688. I hope this information is useful.

@Stypox: You're not 100% correct. initialAjaxJson[2].player.args.player_response is the player response we're parsing, and that only contains:

Screenshot of JSON in Firefox

I think we don't support DASH and HLS for non-live streams, see TeamNewPipe/NewPipeExtractor#273 as well.

YouTube makes a live stream a normal stream after some (varying amount of) time, so just wait until you could view the stream in NewPipe in the meantime. This won't be fixed soon.

From #3088:

"When trying to view a video such as https://youtu.be/I7_t4e-QTGw NewPipe will load comments and nothing else.

After around 5 hours since the end of the broadcast NewPipe will correctly load the video. The video loads fine in browser and official app. As a side note youtube-dl seems to have some erroneous output when trying to download the video such as the total file size changing often. This makes me believe it may be a DASH or video format issue.

I will try to reproduce in an emulator later to see if I may be able to find more information regarding this.

Edit: Stack trace of error when trying to play video https://gist.github.com/Flat/e3b39559718742e02232f1958851e755

For some reason the video initially loads fine in my emulator, but is unable to play. Whereas on my actual device (Galaxy Note10+ Snapdragon) it fails to load anything but the comments as shown in the screenshot above."

Happens on Peertube too.

Logs

Exception

org.schabi.newpipe.extractor.stream.StreamInfo$StreamExtractException: Could not get any stream. See error variable to get further details.
    at org.schabi.newpipe.extractor.stream.StreamInfo.extractStreams(StreamInfo.java:194)
    at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:72)
    at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:64)
    at org.schabi.newpipe.util.ExtractorHelper.lambda$getStreamInfo$3(ExtractorHelper.java:116)
    at org.schabi.newpipe.util.-$$Lambda$ExtractorHelper$5fJcha6Sq5APJBLdG6osaJby-mc.call(Unknown Source:4)
    at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
    at io.reactivex.Maybe.subscribe(Maybe.java:4290)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
    at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
    at io.reactivex.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
    at io.reactivex.Flowable.subscribe(Flowable.java:14935)
    at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
    at io.reactivex.Maybe.subscribe(Maybe.java:4290)
    at io.reactivex.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
    at io.reactivex.Single.subscribe(Single.java:3666)
    at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
    at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
    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:919)



Yay!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Aevann picture Aevann  路  3Comments

probonopd picture probonopd  路  3Comments

Wang-GY picture Wang-GY  路  3Comments

hassanseoul123 picture hassanseoul123  路  3Comments

danialbehzadi picture danialbehzadi  路  3Comments