4 ms·
There are workarounds (detailed very nicely in dirkf’s pull request for youtube-dl): https://github.com/ytdl-org/youtube-dl/pull/30184 https://github.com/ytdl-
by arm 5y ago
There are workarounds (detailed very nicely in dirkf’s pull request for youtube-dl):
https://github.com/ytdl-org/youtube-dl/pull/30184 https://github.com/ytdl-org/youtube-dl/pull/30184
Pasting the content here for convenience:
Since summer 2021, YouTube has started serving media URLs with a query parameter such as …&n=SXiXBH-xzrjeioPN&…. This now appears to be the default behaviour. Unless the value of this parameter is transformed according to an algorithm delivered in the site player JS, the download speed for the URL is throttled to ~50kB/s.
Solutions for this include:
• implementing a more complete JS interpreter, eg based on PR [jsinterp] Actual JS interpreter¹ #11272;
• using an external JS interpreter (PhantomJS, now unmaintained, is used by some extractors);
• spoofing the Android or iOS client to acquire unthrottled links, as successfully implemented in yt-dlp².
This PR takes a different approach derived from the successful solution used in VLC's youtube.lua (also implemented differently in pytube³). The approach relies on the fact that the challenge algorithm is served in a mini-language within the minified player JS and therefore the specific algorithm can be extracted and executed by interpreting the mini-language without actually running the JS itself. [In parallel with this PR, a separate implementation of this approach was added to yt-dlp⁴.]
The implementation of the mini-language interpreter is directly translated from VLC's n_descramble() Lua function⁵. The result sufficiently resembles the original that it should be straightforward to share changes between the two implementations.
――――――
¹ — https://github.com/ytdl-org/youtube-dl/pull/11272 https://github.com/ytdl-org/youtube-dl/pull/11272
² — https://github.com/yt-dlp/yt-dlp/commit/c888ffb95ab0ab4f4cd1d6c93eda014f80479551 https://github.com/yt-dlp/yt-dlp/commit/c888ffb95ab0ab4f4cd1...
³ — https://github.com/tfdahlin/pytube/blob/bb890af3b271a616bbe1d08abc8c65bac9266b0a/pytube/cipher.py https://github.com/tfdahlin/pytube/blob/bb890af3b271a616bbe1...
⁴ — https://github.com/yt-dlp/yt-dlp/commit/404f611f1c4aa516fbc4301aa7b8f734ee4bc67b https://github.com/yt-dlp/yt-dlp/commit/404f611f1c4aa516fbc4...
⁵ — https://code.videolan.org/videolan/vlc/-/blob/4fb284e5af69aa9ac2100ccbdd3b88debec9987f/share/lua/playlist/youtube.lua#L116 https://code.videolan.org/videolan/vlc/-/blob/4fb284e5af69aa...