Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Youtube session invalidation - simply exits instead of reloading #12

Open
Farzat07 opened this issue Nov 24, 2021 · 11 comments
Open

Youtube session invalidation - simply exits instead of reloading #12

Farzat07 opened this issue Nov 24, 2021 · 11 comments

Comments

@Farzat07
Copy link
Contributor

When a youtube video is left paused in mpv for a long time, the session becomes invalidated (naturally). However, when resumed and the cached amount is consumed, mpv simply exits as it thinks the EOF has been reached. The expected behaviour would be to reload the video from its original url.

The following error messages are the only ones which appear after the youtube session has been invalidated:

[ffmpeg] https: HTTP error 403 Forbidden
[ffmpeg] tls: The specified session has been invalidated for some reason.
[ffmpeg] https: Will reconnect at 95321392 in X second(s), error=Input/output error.

where X takes the value of 0, 1, 3, and 7.

@4e6
Copy link
Owner

4e6 commented Nov 25, 2021

@Farzat07 thanks for reporting, I'll try to reproduce this issue. How long do I need to wait until the cache invalidation happens?

@Farzat07
Copy link
Contributor Author

I never really measured the time, but I guess around 6 hours should be enough.

@4e6
Copy link
Owner

4e6 commented Nov 29, 2021

Ugh, it'll take some time to reproduce. BTW, after reading the issue again

... mpv simply exits as it thinks the EOF has been reached.

The plugin has an option to check for more content after the EOF is reached. But it is disabled by default.

# when the end-of-file is reached, reload the stream to check
# if there is more content available.
reload_eof_enabled=no

Maybe try enabling it and see if that helps.

@Farzat07
Copy link
Contributor Author

Yeah but I believe that is supposed to be for different use cases e.g. a live stream.
When used on normal videos that setting makes mpv kinda enter into an infinite loop at the end of the video.

@4e6
Copy link
Owner

4e6 commented Nov 29, 2021

mpv kinda enter into an infinite loop at the end of the video

Hmm... it does not happen to me, at least with YouTube videos. Can use send a link that triggers this behavior when played with mpv?

@Farzat07
Copy link
Contributor Author

Ok I was wrong actually - it does not actually get into a loop, but it does get stuck at the ending which makes it seem like so. At the EOF the video reloads and as there is nothing left to play, the video just stays as it is. If you go back 5 seconds, it plays them again with distorteed voice and then exits.

I'm finding this behaviour consistent across videos, even local ones. You can reproduce with this one https://videos.lukesmith.xyz/w/jNDH1cnxNfwwJH2pZvAqdM. The only exception was youtube though - it just exited normally after discovering that this is actually the end of the file.

In the end this setting seems to effectively mimic the --keep-open option as a side effect (at least in the majority of cases). It might work as a temporary solution but I don't think it is ideal.

@4e6
Copy link
Owner

4e6 commented Nov 30, 2021

I'm trying to check the link. youtube-dl does not recognize the file format, are you using a different backend?

$ mpv 'https://videos.lukesmith.xyz/w/jNDH1cnxNfwwJH2pZvAqdM'
Failed to recognize file format.
$ youtube-dl -F 'https://videos.lukesmith.xyz/w/jNDH1cnxNfwwJH2pZvAqdM'
[generic] jNDH1cnxNfwwJH2pZvAqdM: Requesting header
WARNING: Falling back on generic information extractor.
[generic] jNDH1cnxNfwwJH2pZvAqdM: Downloading webpage
[generic] jNDH1cnxNfwwJH2pZvAqdM: Extracting information
[info] Available formats for jNDH1cnxNfwwJH2pZvAqdM:
format code  extension      resolution note
0            unknown_video  unknown

@Farzat07
Copy link
Contributor Author

Yeah I'm using yt-dlp because they applied the fix to that (peertube links).

You can use this static link though, same effect.

https://videos.lukesmith.xyz/static/webseed/9847f270-f9ab-42ff-8d33-a59da419b245-480.mp4

@4e6
Copy link
Owner

4e6 commented Dec 1, 2021

Hmm... For me, the video doesn't get stuck or get into a loop. On EOF it reloads and then exits.

$ mpv 'https://videos.lukesmith.xyz/static/webseed/9847f270-f9ab-42ff-8d33-a59da419b245-480.mp4'
 (+) Video --vid=1 (*) (h264 852x480 24.000fps)
 (+) Audio --aid=1 (*) (aac 2ch 44100Hz)
Cannot load libcuda.so.1
AO: [pulse] 44100Hz stereo 2ch float
VO: [gpu] 852x480 => 853x480 yuv420p
AV: 00:09:32 / 00:09:32 (100%) A-V:  0.000 Cache: 0.0s
[reload] eof reached, checking if more content available
[reload] reloading video from 572.232562 second
[reload] file  1 of 1 in playlist

AV: 00:09:32 / 00:09:32 (100%) A-V:  0.000 Cache: 0.0s
 (+) Video --vid=1 (*) (h264 852x480 24.000fps)
 (+) Audio --aid=1 (*) (aac 2ch 44100Hz)
AV: 00:09:32 / 00:09:32 (100%) A-V:  0.000 Cache: 0.0s
[reload] eof reached, playback ended

Exiting... (End of file)

I'm using the default youtube-dl script. Can it be an issue with how the reload plugin interacts with yt-dlp?

@Farzat07
Copy link
Contributor Author

Farzat07 commented Dec 2, 2021

Ok I tried the original youtube-dl backend, same problem.

But then I tried changing my configuration to see if one of my settings was causing this: turns out the culprit is gapless-audio=no. Once I comment that line, the error disappears.

I still need that setting though - without it replaygain settings can't be used on playlists (check mpv-player/mpv#8267).

@4e6
Copy link
Owner

4e6 commented Dec 3, 2021

gapless-audio setting has no effect to me. From the man page

     NOTE:
        This feature is implemented in a simple manner  and  relies  on  audio  output  device
        buffering  to  continue playback while moving from one file to another. If playback of
        the new file starts slowly, for example because it is played from a remote network lo‐
        cation  or because you have specified cache settings that require time for the initial
        cache fill, then the buffered audio may run out before playback of the  new  file  can
        start.

I assume it has something to do with the latency, maybe I wasn't lucky enough. Anyway, I'll try to reproduce the original issue with the timed-out YouTube session.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants