瀏覽代碼

[youtube] Parse player_url if format URLs are encrypted or DASH MPDs are requested

Fixes #13211
Yen Chi Hsuan 8 年之前
父節點
當前提交
a49eccdfa7
共有 2 個文件被更改,包括 8 次插入5 次删除
  1. 2 0
      ChangeLog
  2. 6 5
      youtube_dl/extractor/youtube.py

+ 2 - 0
ChangeLog

@@ -1,6 +1,8 @@
 version <unreleased>
 
 Extractors
+* [youtube] Fix DASH MPD extraction for videos with non-encrypted format URLs
+  (#13211)
 + [youku] Extract more metadata (#10433)
 
 

+ 6 - 5
youtube_dl/extractor/youtube.py

@@ -1715,12 +1715,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
                 format_id = url_data['itag'][0]
                 url = url_data['url'][0]
 
-                if 'sig' in url_data:
-                    url += '&signature=' + url_data['sig'][0]
-                elif 's' in url_data:
-                    encrypted_sig = url_data['s'][0]
+                if 's' in url_data or self._downloader.params.get('youtube_include_dash_manifest', True):
                     ASSETS_RE = r'"assets":.+?"js":\s*("[^"]+")'
-
                     jsplayer_url_json = self._search_regex(
                         ASSETS_RE,
                         embed_webpage if age_gate else video_webpage,
@@ -1741,6 +1737,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
                             video_webpage, 'age gate player URL')
                         player_url = json.loads(player_url_json)
 
+                if 'sig' in url_data:
+                    url += '&signature=' + url_data['sig'][0]
+                elif 's' in url_data:
+                    encrypted_sig = url_data['s'][0]
+
                     if self._downloader.params.get('verbose'):
                         if player_url is None:
                             player_version = 'unknown'