summaryrefslogtreecommitdiff
path: root/youtube_dl/downloader/__init__.py
blob: 2e485df9dac09e197af6183ded3570e57805fad2 (plain)
    1 from __future__ import unicode_literals
    2 
    3 from .common import FileDownloader
    4 from .f4m import F4mFD
    5 from .hls import HlsFD
    6 from .http import HttpFD
    7 from .rtmp import RtmpFD
    8 from .dash import DashSegmentsFD
    9 from .rtsp import RtspFD
   10 from .ism import IsmFD
   11 from .external import (
   12     get_external_downloader,
   13     FFmpegFD,
   14 )
   15 
   16 from ..utils import (
   17     determine_protocol,
   18 )
   19 
   20 PROTOCOL_MAP = {
   21     'rtmp': RtmpFD,
   22     'm3u8_native': HlsFD,
   23     'm3u8': FFmpegFD,
   24     'mms': RtspFD,
   25     'rtsp': RtspFD,
   26     'f4m': F4mFD,
   27     'http_dash_segments': DashSegmentsFD,
   28     'ism': IsmFD,
   29 }
   30 
   31 
   32 def get_suitable_downloader(info_dict, params={}):
   33     """Get the downloader class that can handle the info dict."""
   34     protocol = determine_protocol(info_dict)
   35     info_dict['protocol'] = protocol
   36 
   37     # if (info_dict.get('start_time') or info_dict.get('end_time')) and not info_dict.get('requested_formats') and FFmpegFD.can_download(info_dict):
   38     #     return FFmpegFD
   39 
   40     external_downloader = params.get('external_downloader')
   41     if external_downloader is not None:
   42         ed = get_external_downloader(external_downloader)
   43         if ed.can_download(info_dict):
   44             return ed
   45 
   46     if protocol.startswith('m3u8') and info_dict.get('is_live'):
   47         return FFmpegFD
   48 
   49     if protocol == 'm3u8' and params.get('hls_prefer_native') is True:
   50         return HlsFD
   51 
   52     if protocol == 'm3u8_native' and params.get('hls_prefer_native') is False:
   53         return FFmpegFD
   54 
   55     return PROTOCOL_MAP.get(protocol, HttpFD)
   56 
   57 
   58 __all__ = [
   59     'get_suitable_downloader',
   60     'FileDownloader',
   61 ]

Generated by cgit