[downloader] Improve downloader selection
[youtube-dl] / youtube_dl / downloader / __init__.py
index 31e28df58e828f8c5434390ff18a63358215924a..2aca3cab571a627b3d20e2109e7345487ff2627d 100644 (file)
@@ -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',