1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-12-31 20:11:26 +00:00

[ie/youtube] Fix skip_player=js extractor-arg (#15428)

Authored by: bashonly
This commit is contained in:
bashonly
2025-12-29 15:41:48 -06:00
committed by GitHub
parent fcd47d2db3
commit abf29e3e72

View File

@@ -3307,6 +3307,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
def process_https_formats(): def process_https_formats():
proto = 'https' proto = 'https'
https_fmts = [] https_fmts = []
skip_player_js = 'js' in self._configuration_arg('player_skip')
for fmt_stream in streaming_formats: for fmt_stream in streaming_formats:
if fmt_stream.get('targetDurationSec'): if fmt_stream.get('targetDurationSec'):
continue continue
@@ -3344,13 +3346,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
sc = urllib.parse.parse_qs(fmt_stream.get('signatureCipher')) sc = urllib.parse.parse_qs(fmt_stream.get('signatureCipher'))
fmt_url = url_or_none(try_get(sc, lambda x: x['url'][0])) fmt_url = url_or_none(try_get(sc, lambda x: x['url'][0]))
encrypted_sig = try_get(sc, lambda x: x['s'][0]) encrypted_sig = try_get(sc, lambda x: x['s'][0])
if not all((sc, fmt_url, player_url, encrypted_sig)): if not all((sc, fmt_url, skip_player_js or player_url, encrypted_sig)):
msg = f'Some {client_name} client https formats have been skipped as they are missing a url. ' msg = f'Some {client_name} client https formats have been skipped as they are missing a URL. '
if client_name in ('web', 'web_safari'): if client_name in ('web', 'web_safari'):
msg += 'YouTube is forcing SABR streaming for this client. ' msg += 'YouTube is forcing SABR streaming for this client. '
else: else:
msg += ( msg += (
f'YouTube may have enabled the SABR-only or Server-Side Ad Placement experiment for ' f'YouTube may have enabled the SABR-only streaming experiment for '
f'{"your account" if self.is_authenticated else "the current session"}. ' f'{"your account" if self.is_authenticated else "the current session"}. '
) )
msg += 'See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details' msg += 'See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details'
@@ -3366,6 +3368,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
# signature # signature
# Attempt to load sig spec from cache # Attempt to load sig spec from cache
if encrypted_sig: if encrypted_sig:
if skip_player_js:
continue
spec_cache_id = self._sig_spec_cache_id(player_url, len(encrypted_sig)) spec_cache_id = self._sig_spec_cache_id(player_url, len(encrypted_sig))
spec = self._load_sig_spec_from_cache(spec_cache_id) spec = self._load_sig_spec_from_cache(spec_cache_id)
if spec: if spec:
@@ -3379,6 +3383,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
# n challenge # n challenge
query = parse_qs(fmt_url) query = parse_qs(fmt_url)
if query.get('n'): if query.get('n'):
if skip_player_js:
continue
n_challenge = query['n'][0] n_challenge = query['n'][0]
if n_challenge in self._player_cache: if n_challenge in self._player_cache:
fmt_url = update_url_query(fmt_url, {'n': self._player_cache[n_challenge]}) fmt_url = update_url_query(fmt_url, {'n': self._player_cache[n_challenge]})