youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

__init__.py (1576B)


      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 ]