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.
56 lines
1.4 KiB
56 lines
1.4 KiB
from __future__ import unicode_literals |
|
|
|
from .common import FileDownloader |
|
from .f4m import F4mFD |
|
from .hls import HlsFD |
|
from .http import HttpFD |
|
from .rtmp import RtmpFD |
|
from .dash import DashSegmentsFD |
|
from .rtsp import RtspFD |
|
from .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, |
|
} |
|
|
|
|
|
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 == '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', |
|
]
|
|
|