1
0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2026-04-26 08:43:23 +00:00
Files
youtube-dl/youtube_dl/downloader/__init__.py
T

74 lines
2.0 KiB
Python
Raw Normal View History

2014-01-27 05:47:30 +01:00
from __future__ import unicode_literals
2021-12-07 23:30:30 +00:00
from ..utils import (
determine_protocol,
)
def get_suitable_downloader(info_dict, params={}):
info_dict['protocol'] = determine_protocol(info_dict)
info_copy = info_dict.copy()
return _get_suitable_downloader(info_copy, params)
# Some of these require get_suitable_downloader
from .common import FileDownloader
2021-12-07 23:30:30 +00:00
from .dash import DashSegmentsFD
from .f4m import F4mFD
from .hls import HlsFD
from .http import HttpFD
from .rtmp import RtmpFD
from .rtsp import RtspFD
from .ism import IsmFD
2021-12-07 23:30:30 +00:00
from .niconico import NiconicoDmcFD
from .external import (
get_external_downloader,
FFmpegFD,
)
2015-01-23 23:50:31 +01:00
PROTOCOL_MAP = {
'rtmp': RtmpFD,
'm3u8_native': HlsFD,
'm3u8': FFmpegFD,
'mms': RtspFD,
'rtsp': RtspFD,
2015-01-23 23:50:31 +01:00
'f4m': F4mFD,
2015-06-04 22:27:29 +08:00
'http_dash_segments': DashSegmentsFD,
'ism': IsmFD,
2021-12-07 23:30:30 +00:00
'niconico_dmc': NiconicoDmcFD,
2015-01-23 23:50:31 +01:00
}
2014-01-25 12:02:43 +01:00
2015-01-23 23:50:31 +01:00
2021-12-07 23:30:30 +00:00
def _get_suitable_downloader(info_dict, params={}):
"""Get the downloader class that can handle the info dict."""
2015-01-23 23:50:31 +01:00
# 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
# Avoid using unwanted args since external_downloader was rejected
if params.get('external_downloader_args'):
params['external_downloader_args'] = None
2021-12-07 23:30:30 +00:00
protocol = info_dict['protocol']
if protocol.startswith('m3u8') and info_dict.get('is_live'):
return FFmpegFD
2016-04-21 23:02:17 +06:00
if protocol == 'm3u8' and params.get('hls_prefer_native') is True:
return HlsFD
2016-04-21 23:02:17 +06:00
if protocol == 'm3u8_native' and params.get('hls_prefer_native') is False:
return FFmpegFD
2015-01-23 23:50:31 +01:00
return PROTOCOL_MAP.get(protocol, HttpFD)
2014-11-23 22:25:12 +01:00
__all__ = [
'get_suitable_downloader',
'FileDownloader',
]