mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-01 02:37:29 +01:00
[zdf] Use centralized sorting
This commit is contained in:
parent
e6812ac99d
commit
c7deaa4c74
@ -1014,6 +1014,8 @@ def format_resolution(format, default='unknown'):
|
|||||||
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 @@
|
|||||||
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 @@ def _formats_key(f):
|
|||||||
|
|
||||||
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 @@ def xml_to_format(fnode):
|
|||||||
''', 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 @@ def xml_to_format(fnode):
|
|||||||
'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,
|
||||||
|
Loading…
Reference in New Issue
Block a user