diff options
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 2 | ||||
| -rw-r--r-- | youtube_dl/downloader/__init__.py | 33 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 22 | 
3 files changed, 39 insertions, 18 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 521e4055e..e61e6c2a7 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -1179,7 +1179,7 @@ class YoutubeDL(object):          if not self.params.get('skip_download', False):              try:                  def dl(name, info): -                    fd = get_suitable_downloader(info)(self, self.params) +                    fd = get_suitable_downloader(info, self.params)(self, self.params)                      for ph in self._progress_hooks:                          fd.add_progress_hook(ph)                      if self.params.get('verbose'): diff --git a/youtube_dl/downloader/__init__.py b/youtube_dl/downloader/__init__.py index 31e28df58..2aca3cab5 100644 --- a/youtube_dl/downloader/__init__.py +++ b/youtube_dl/downloader/__init__.py @@ -9,27 +9,26 @@ from .rtmp import RtmpFD  from .f4m import F4mFD  from ..utils import ( -    determine_ext, +    determine_protocol,  ) +PROTOCOL_MAP = { +    'rtmp': RtmpFD, +    'm3u8_native': NativeHlsFD, +    'm3u8': HlsFD, +    'mms': MplayerFD, +    'rtsp': MplayerFD, +    'f4m': F4mFD, +} -def get_suitable_downloader(info_dict): + +def get_suitable_downloader(info_dict, params={}):      """Get the downloader class that can handle the info dict.""" -    url = info_dict['url'] -    protocol = info_dict.get('protocol') - -    if url.startswith('rtmp'): -        return RtmpFD -    if protocol == 'm3u8_native': -        return NativeHlsFD -    if (protocol == 'm3u8') or (protocol is None and determine_ext(url) == 'm3u8'): -        return HlsFD -    if url.startswith('mms') or url.startswith('rtsp'): -        return MplayerFD -    if determine_ext(url) == 'f4m': -        return F4mFD -    else: -        return HttpFD +    protocol = determine_protocol(info_dict) +    info_dict['protocol'] = protocol + +    return PROTOCOL_MAP.get(protocol, HttpFD) +  __all__ = [      'get_suitable_downloader', diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 463cc20ff..2970d02a1 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1642,3 +1642,25 @@ def is_html(first_bytes):          s = first_bytes.decode('utf-8', 'replace')      return re.match(r'^\s*<', s) + + +def determine_protocol(info_dict): +    protocol = info_dict.get('protocol') +    if protocol is not None: +        return protocol + +    url = info_dict['url'] +    if url.startswith('rtmp'): +        return 'rtmp' +    elif url.startswith('mms'): +        return 'mms' +    elif url.startswith('rtsp'): +        return 'rtsp' + +    ext = determine_ext(url) +    if ext == 'm3u8': +        return 'm3u8' +    elif ext == 'f4m': +        return 'f4m' + +    return compat_urllib_parse_urlparse(url).scheme  | 
