Merge pull request #7769 from remitamine/sort
authorremitamine <remitamine@gmail.com>
Mon, 28 Dec 2015 18:15:14 +0000 (19:15 +0100)
committerremitamine <remitamine@gmail.com>
Mon, 28 Dec 2015 18:15:14 +0000 (19:15 +0100)
[common] lower (m3u8,rtmp,rtsp) format preference only if required program is not available

1  2 
youtube_dl/extractor/common.py

index 3d39781a494159989387631dd4835f4e62dce969,76f5b8b05fba0afe7d89e12a65db8af351925422..34a28c126e068aa55f072cc011016c63d945a409
@@@ -18,7 -18,6 +18,6 @@@ from ..compat import 
      compat_http_client,
      compat_urllib_error,
      compat_urllib_parse,
-     compat_urllib_parse_urlparse,
      compat_urlparse,
      compat_str,
      compat_etree_fromstring,
@@@ -30,7 -29,6 +29,7 @@@ from ..utils import 
      clean_html,
      compiled_regex_type,
      determine_ext,
 +    error_to_compat_str,
      ExtractorError,
      fix_xml_ampersands,
      float_or_none,
@@@ -43,6 -41,7 +42,7 @@@
      url_basename,
      xpath_text,
      xpath_with_ns,
+     determine_protocol,
  )
  
  
@@@ -333,8 -332,7 +333,8 @@@ class InfoExtractor(object)
                  return False
              if errnote is None:
                  errnote = 'Unable to download webpage'
 -            errmsg = '%s: %s' % (errnote, compat_str(err))
 +
 +            errmsg = '%s: %s' % (errnote, error_to_compat_str(err))
              if fatal:
                  raise ExtractorError(errmsg, sys.exc_info()[2], cause=err)
              else:
                  else:
                      raise netrc.NetrcParseError('No authenticators for %s' % self._NETRC_MACHINE)
              except (IOError, netrc.NetrcParseError) as err:
 -                self._downloader.report_warning('parsing .netrc: %s' % compat_str(err))
 +                self._downloader.report_warning('parsing .netrc: %s' % error_to_compat_str(err))
  
          return (username, password)
  
  
              preference = f.get('preference')
              if preference is None:
-                 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
+                 preference = 0
                  if f.get('ext') in ['f4f', 'f4m']:  # Not yet supported
                      preference -= 0.5
  
+             proto_preference = 0 if determine_protocol(f) in ['http', 'https'] else -0.1
              if f.get('vcodec') == 'none':  # audio only
                  if self._downloader.params.get('prefer_free_formats'):
                      ORDER = ['aac', 'mp3', 'm4a', 'webm', 'ogg', 'opus']
                  f.get('vbr') if f.get('vbr') is not None else -1,
                  f.get('height') if f.get('height') is not None else -1,
                  f.get('width') if f.get('width') is not None else -1,
+                 proto_preference,
                  ext_preference,
                  f.get('abr') if f.get('abr') is not None else -1,
                  audio_ext_preference,
              fatal=fatal)
  
          if manifest is False:
 -            return manifest
 +            return []
  
          formats = []
          manifest_version = '1.0'
              errnote=errnote or 'Failed to download m3u8 information',
              fatal=fatal)
          if res is False:
 -            return res
 +            return []
          m3u8_doc, urlh = res
          m3u8_url = urlh.geturl()
          last_info = None