You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.1 KiB

  1. from __future__ import unicode_literals
  2. from .common import FileDownloader
  3. from .external import get_external_downloader
  4. from .f4m import F4mFD
  5. from .hls import HlsFD
  6. from .hls import NativeHlsFD
  7. from .http import HttpFD
  8. from .rtsp import RtspFD
  9. from .rtmp import RtmpFD
  10. from .dash import DashSegmentsFD
  11. from ..utils import (
  12. determine_protocol,
  13. )
  14. PROTOCOL_MAP = {
  15. 'rtmp': RtmpFD,
  16. 'm3u8_native': NativeHlsFD,
  17. 'm3u8': HlsFD,
  18. 'mms': RtspFD,
  19. 'rtsp': RtspFD,
  20. 'f4m': F4mFD,
  21. 'http_dash_segments': DashSegmentsFD,
  22. }
  23. def get_suitable_downloader(info_dict, params={}):
  24. """Get the downloader class that can handle the info dict."""
  25. protocol = determine_protocol(info_dict)
  26. info_dict['protocol'] = protocol
  27. external_downloader = params.get('external_downloader')
  28. if external_downloader is not None:
  29. ed = get_external_downloader(external_downloader)
  30. if ed.supports(info_dict):
  31. return ed
  32. if protocol == 'm3u8' and params.get('hls_prefer_native'):
  33. return NativeHlsFD
  34. return PROTOCOL_MAP.get(protocol, HttpFD)
  35. __all__ = [
  36. 'get_suitable_downloader',
  37. 'FileDownloader',
  38. ]