mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[zdf] Use centralized sorting
This commit is contained in:
		| @@ -1014,6 +1014,8 @@ class YoutubeDL(object): | |||||||
|     def list_formats(self, info_dict): |     def list_formats(self, info_dict): | ||||||
|         def format_note(fdict): |         def format_note(fdict): | ||||||
|             res = u'' |             res = u'' | ||||||
|  |             if f.get('ext') in ['f4f', 'f4m']: | ||||||
|  |                 res += u'(unsupported) ' | ||||||
|             if fdict.get('format_note') is not None: |             if fdict.get('format_note') is not None: | ||||||
|                 res += fdict['format_note'] + u' ' |                 res += fdict['format_note'] + u' ' | ||||||
|             if (fdict.get('vcodec') is not None and |             if (fdict.get('vcodec') is not None and | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import xml.etree.ElementTree | |||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     compat_http_client, |     compat_http_client, | ||||||
|     compat_urllib_error, |     compat_urllib_error, | ||||||
|  |     compat_urllib_parse_urlparse, | ||||||
|     compat_str, |     compat_str, | ||||||
|  |  | ||||||
|     clean_html, |     clean_html, | ||||||
| @@ -62,6 +63,9 @@ class InfoExtractor(object): | |||||||
|                     * vcodec     Name of the video codec in use |                     * vcodec     Name of the video codec in use | ||||||
|                     * filesize   The number of bytes, if known in advance |                     * filesize   The number of bytes, if known in advance | ||||||
|                     * player_url SWF Player URL (used for rtmpdump). |                     * player_url SWF Player URL (used for rtmpdump). | ||||||
|  |                     * protocol   The protocol that will be used for the actual | ||||||
|  |                                  download, lower-case. | ||||||
|  |                                  "http", "https", "rtsp", "rtmp" or so. | ||||||
|                     * preference Order number of this format. If this field is |                     * preference Order number of this format. If this field is | ||||||
|                                  present, the formats get sorted by this field. |                                  present, the formats get sorted by this field. | ||||||
|                                  -1 for default (order by other properties), |                                  -1 for default (order by other properties), | ||||||
| @@ -445,7 +449,11 @@ class InfoExtractor(object): | |||||||
|  |  | ||||||
|             preference = f.get('preference') |             preference = f.get('preference') | ||||||
|             if preference is None: |             if preference is None: | ||||||
|                 preference = 0 if f.get('url', '').startswith('http') else -0.1 |                 proto = f.get('protocol') | ||||||
|  |                 if proto is None: | ||||||
|  |                     proto = compat_urllib_parse_urlparse(f.get('url', '')).scheme | ||||||
|  |  | ||||||
|  |                 preference = 0 if proto in ['http', 'https'] else -0.1 | ||||||
|                 if f.get('ext') in ['f4f', 'f4m']:  # Not yet supported |                 if f.get('ext') in ['f4f', 'f4m']:  # Not yet supported | ||||||
|                     preference -= 0.5 |                     preference -= 0.5 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -67,29 +67,13 @@ class ZDFIE(InfoExtractor): | |||||||
|             ''', format_id) |             ''', format_id) | ||||||
|  |  | ||||||
|             ext = format_m.group('container') |             ext = format_m.group('container') | ||||||
|             is_supported = ext != 'f4f' |             proto = format_m.group('proto') | ||||||
|  |  | ||||||
|             PROTO_ORDER = ['http', 'rtmp', 'rtsp'] |  | ||||||
|             try: |  | ||||||
|                 proto_pref = -PROTO_ORDER.index(format_m.group('proto')) |  | ||||||
|             except ValueError: |  | ||||||
|                 proto_pref = -999 |  | ||||||
|  |  | ||||||
|             quality = fnode.find('./quality').text |             quality = fnode.find('./quality').text | ||||||
|             QUALITY_ORDER = ['veryhigh', '300', 'high', 'med', 'low'] |  | ||||||
|             try: |  | ||||||
|                 quality_pref = -QUALITY_ORDER.index(quality) |  | ||||||
|             except ValueError: |  | ||||||
|                 quality_pref = -999 |  | ||||||
|  |  | ||||||
|             abr = int(fnode.find('./audioBitrate').text) // 1000 |             abr = int(fnode.find('./audioBitrate').text) // 1000 | ||||||
|             vbr = int(fnode.find('./videoBitrate').text) // 1000 |             vbr = int(fnode.find('./videoBitrate').text) // 1000 | ||||||
|             pref = (is_available, is_supported, |  | ||||||
|                     proto_pref, quality_pref, vbr, abr) |  | ||||||
|  |  | ||||||
|             format_note = u'' |             format_note = u'' | ||||||
|             if not is_supported: |  | ||||||
|                 format_note += u'(unsupported)' |  | ||||||
|             if not format_note: |             if not format_note: | ||||||
|                 format_note = None |                 format_note = None | ||||||
|  |  | ||||||
| @@ -105,14 +89,16 @@ class ZDFIE(InfoExtractor): | |||||||
|                 'height': int(fnode.find('./height').text), |                 'height': int(fnode.find('./height').text), | ||||||
|                 'filesize': int(fnode.find('./filesize').text), |                 'filesize': int(fnode.find('./filesize').text), | ||||||
|                 'format_note': format_note, |                 'format_note': format_note, | ||||||
|                 '_pref': pref, |                 'protocol': format_m.group('proto').lower(), | ||||||
|                 '_available': is_available, |                 '_available': is_available, | ||||||
|             } |             } | ||||||
|  |  | ||||||
|         format_nodes = doc.findall('.//formitaeten/formitaet') |         format_nodes = doc.findall('.//formitaeten/formitaet') | ||||||
|         formats = sorted(filter(lambda f: f['_available'], |         formats = list(filter( | ||||||
|                                 map(xml_to_format, format_nodes)), |             lambda f: f['_available'], | ||||||
|                          key=operator.itemgetter('_pref')) |             map(xml_to_format, format_nodes))) | ||||||
|  |  | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|         return { |         return { | ||||||
|             'id': video_id, |             'id': video_id, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister