| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | from __future__ import unicode_literalsfrom .common import FileDownloaderfrom .f4m import F4mFDfrom .hls import HlsFDfrom .http import HttpFDfrom .rtmp import RtmpFDfrom .dash import DashSegmentsFDfrom .rtsp import RtspFDfrom .ism import IsmFDfrom .external import (    get_external_downloader,    FFmpegFD,)from ..utils import (    determine_protocol,)PROTOCOL_MAP = {    'rtmp': RtmpFD,    'm3u8_native': HlsFD,    'm3u8': FFmpegFD,    'mms': RtspFD,    'rtsp': RtspFD,    'f4m': F4mFD,    'http_dash_segments': DashSegmentsFD,    'ism': IsmFD,}def get_suitable_downloader(info_dict, params={}):    """Get the downloader class that can handle the info dict."""    protocol = determine_protocol(info_dict)    info_dict['protocol'] = protocol    # 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):    #     return FFmpegFD    external_downloader = params.get('external_downloader')    if external_downloader is not None:        ed = get_external_downloader(external_downloader)        if ed.can_download(info_dict):            return ed    if protocol.startswith('m3u8') and info_dict.get('is_live'):        return FFmpegFD    if protocol == 'm3u8' and params.get('hls_prefer_native') is True:        return HlsFD    if protocol == 'm3u8_native' and params.get('hls_prefer_native') is False:        return FFmpegFD    return PROTOCOL_MAP.get(protocol, HttpFD)__all__ = [    'get_suitable_downloader',    'FileDownloader',]
 |