aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--youtube_dl/extractor/youtube.py33
-rw-r--r--youtube_dl/options.py4
2 files changed, 19 insertions, 18 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py
index 044796018..7965fa08a 100644
--- a/youtube_dl/extractor/youtube.py
+++ b/youtube_dl/extractor/youtube.py
@@ -1699,16 +1699,17 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
self._player_cache = {}
def _get_player_js_version(self):
- player_js_version = self.get_param('youtube_player_js_version') or '20348@0004de42'
- sts_hash = self._search_regex(
- ('^actual$(^)?(^)?', r'^([0-9]{5,})@([0-9a-f]{8,})$'),
- player_js_version, 'player_js_version', group=(1, 2), default=None)
- if sts_hash:
- return sts_hash
- self.report_warning(
- 'Invalid player JS version "{0}" specified. '
- 'It should be "{1}" or in the format of {2}'.format(
- player_js_version, 'actual', 'SignatureTimeStamp@Hash'), only_once=True)
+ player_js_version = self.get_param('youtube_player_js_version')
+ if player_js_version:
+ sts_hash = self._search_regex(
+ ('^actual$(^)?(^)?', r'^([0-9]{5,})@([0-9a-f]{8,})$'),
+ player_js_version, 'player_js_version', group=(1, 2), default=None)
+ if sts_hash:
+ return sts_hash
+ self.report_warning(
+ 'Invalid player JS version "{0}" specified. '
+ 'It should be "{1}" or in the format of {2}'.format(
+ player_js_version, 'actual', 'SignatureTimeStamp@Hash'), only_once=True)
return None, None
# *ytcfgs, webpage=None
@@ -1723,18 +1724,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
ytcfgs = ytcfgs + ({'PLAYER_JS_URL': player_url},)
player_url = traverse_obj(
ytcfgs, (Ellipsis, 'PLAYER_JS_URL'), (Ellipsis, 'WEB_PLAYER_CONTEXT_CONFIGS', Ellipsis, 'jsUrl'),
- get_all=False, expected_type=lambda u: urljoin('https://www.youtube.com', u))
-
- player_id_override = self._get_player_js_version()[1]
+ get_all=False, expected_type=self._yt_urljoin)
- requested_js_variant = self.get_param('youtube_player_js_variant') or 'main'
+ requested_js_variant = self.get_param('youtube_player_js_variant')
variant_js = next(
(v for k, v in self._PLAYER_JS_VARIANT_MAP if k == requested_js_variant),
None)
if variant_js:
+ player_id_override = self._get_player_js_version()[1]
player_id = player_id_override or self._extract_player_info(player_url)
original_url = player_url
- player_url = '/s/player/{0}/{1}'.format(player_id, variant_js)
+ player_url = self._yt_urljoin(
+ '/s/player/{0}/{1}'.format(player_id, variant_js))
if original_url != player_url:
self.write_debug(
'Forcing "{0}" player JS variant for player {1}\n'
@@ -1748,7 +1749,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
requested_js_variant, ','.join(k for k, _ in self._PLAYER_JS_VARIANT_MAP)),
only_once=True)
- return urljoin('https://www.youtube.com', player_url)
+ return player_url
def _download_player_url(self, video_id, fatal=False):
res = self._download_webpage(
diff --git a/youtube_dl/options.py b/youtube_dl/options.py
index ce3633c41..9b0d77a23 100644
--- a/youtube_dl/options.py
+++ b/youtube_dl/options.py
@@ -421,12 +421,12 @@ def parseOpts(overrideArguments=None):
action='store', dest='youtube_player_js_variant',
help='For YouTube, the player javascript variant to use for n/sig deciphering; `actual` to follow the site; default `%default`.',
choices=('actual', 'main', 'tcc', 'tce', 'es5', 'es6', 'tv', 'tv_es6', 'phone', 'tablet'),
- default='main', metavar='VARIANT')
+ default='actual', metavar='VARIANT')
video_format.add_option(
'--youtube-player-js-version',
action='store', dest='youtube_player_js_version',
help='For YouTube, the player javascript version to use for n/sig deciphering, specified as `signature_timestamp@hash`, or `actual` to follow the site; default `%default`',
- default='20348@0004de42', metavar='STS@HASH')
+ default='actual', metavar='STS@HASH')
video_format.add_option(
'--merge-output-format',
action='store', dest='merge_output_format', metavar='FORMAT', default=None,