Explorar o código

[youtube] Prefer DASH formats (closes #28070)

Sergey M․ %!s(int64=4) %!d(string=hai) anos
pai
achega
7215691ab7
Modificáronse 1 ficheiros con 9 adicións e 3 borrados
  1. 9 3
      youtube_dl/extractor/youtube.py

+ 9 - 3
youtube_dl/extractor/youtube.py

@@ -1549,16 +1549,22 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
         if self._downloader.params.get('youtube_include_dash_manifest'):
         if self._downloader.params.get('youtube_include_dash_manifest'):
             dash_manifest_url = streaming_data.get('dashManifestUrl')
             dash_manifest_url = streaming_data.get('dashManifestUrl')
             if dash_manifest_url:
             if dash_manifest_url:
+                dash_formats = []
                 for f in self._extract_mpd_formats(
                 for f in self._extract_mpd_formats(
                         dash_manifest_url, video_id, fatal=False):
                         dash_manifest_url, video_id, fatal=False):
-                    if f['format_id'] in itags:
-                        continue
                     filesize = int_or_none(self._search_regex(
                     filesize = int_or_none(self._search_regex(
                         r'/clen/(\d+)', f.get('fragment_base_url')
                         r'/clen/(\d+)', f.get('fragment_base_url')
                         or f['url'], 'file size', default=None))
                         or f['url'], 'file size', default=None))
                     if filesize:
                     if filesize:
                         f['filesize'] = filesize
                         f['filesize'] = filesize
-                    formats.append(f)
+                    dash_formats.append(f)
+                # Until further investigation prefer DASH formats as non-DASH
+                # may not be available (see [1])
+                # 1. https://github.com/ytdl-org/youtube-dl/issues/28070
+                if dash_formats:
+                    dash_formats_keys = [f['format_id'] for f in dash_formats]
+                    formats = [f for f in formats if f['format_id'] not in dash_formats_keys]
+                    formats.extend(dash_formats)
 
 
         if not formats:
         if not formats:
             if streaming_data.get('licenseInfos'):
             if streaming_data.get('licenseInfos'):