|
@ -140,28 +140,28 @@ class VimeoBaseInfoExtractor(InfoExtractor): |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
# TODO: fix handling of 308 status code returned for live archive manifest requests |
|
|
# TODO: fix handling of 308 status code returned for live archive manifest requests |
|
|
|
|
|
sep_pattern = r'/sep/video/' |
|
|
for files_type in ('hls', 'dash'): |
|
|
for files_type in ('hls', 'dash'): |
|
|
for cdn_name, cdn_data in config_files.get(files_type, {}).get('cdns', {}).items(): |
|
|
for cdn_name, cdn_data in config_files.get(files_type, {}).get('cdns', {}).items(): |
|
|
manifest_url = cdn_data.get('url') |
|
|
manifest_url = cdn_data.get('url') |
|
|
if not manifest_url: |
|
|
if not manifest_url: |
|
|
continue |
|
|
continue |
|
|
format_id = '%s-%s' % (files_type, cdn_name) |
|
|
format_id = '%s-%s' % (files_type, cdn_name) |
|
|
if files_type == 'hls': |
|
|
|
|
|
formats.extend(self._extract_m3u8_formats( |
|
|
|
|
|
manifest_url, video_id, 'mp4', |
|
|
|
|
|
'm3u8' if is_live else 'm3u8_native', m3u8_id=format_id, |
|
|
|
|
|
note='Downloading %s m3u8 information' % cdn_name, |
|
|
|
|
|
fatal=False)) |
|
|
|
|
|
elif files_type == 'dash': |
|
|
|
|
|
mpd_pattern = r'/%s/(?:sep/)?video/' % video_id |
|
|
|
|
|
mpd_manifest_urls = [] |
|
|
|
|
|
if re.search(mpd_pattern, manifest_url): |
|
|
|
|
|
for suffix, repl in (('', 'video'), ('_sep', 'sep/video')): |
|
|
|
|
|
mpd_manifest_urls.append((format_id + suffix, re.sub( |
|
|
|
|
|
mpd_pattern, '/%s/%s/' % (video_id, repl), manifest_url))) |
|
|
|
|
|
else: |
|
|
|
|
|
mpd_manifest_urls = [(format_id, manifest_url)] |
|
|
|
|
|
for f_id, m_url in mpd_manifest_urls: |
|
|
|
|
|
|
|
|
sep_manifest_urls = [] |
|
|
|
|
|
if re.search(sep_pattern, manifest_url): |
|
|
|
|
|
for suffix, repl in (('', 'video'), ('_sep', 'sep/video')): |
|
|
|
|
|
sep_manifest_urls.append((format_id + suffix, re.sub( |
|
|
|
|
|
sep_pattern, '/%s/' % repl, manifest_url))) |
|
|
|
|
|
else: |
|
|
|
|
|
sep_manifest_urls = [(format_id, manifest_url)] |
|
|
|
|
|
for f_id, m_url in sep_manifest_urls: |
|
|
|
|
|
if files_type == 'hls': |
|
|
|
|
|
formats.extend(self._extract_m3u8_formats( |
|
|
|
|
|
m_url, video_id, 'mp4', |
|
|
|
|
|
'm3u8' if is_live else 'm3u8_native', m3u8_id=f_id, |
|
|
|
|
|
note='Downloading %s m3u8 information' % cdn_name, |
|
|
|
|
|
fatal=False)) |
|
|
|
|
|
elif files_type == 'dash': |
|
|
if 'json=1' in m_url: |
|
|
if 'json=1' in m_url: |
|
|
real_m_url = (self._download_json(m_url, video_id, fatal=False) or {}).get('url') |
|
|
real_m_url = (self._download_json(m_url, video_id, fatal=False) or {}).get('url') |
|
|
if real_m_url: |
|
|
if real_m_url: |
|
@ -170,11 +170,6 @@ class VimeoBaseInfoExtractor(InfoExtractor): |
|
|
m_url.replace('/master.json', '/master.mpd'), video_id, f_id, |
|
|
m_url.replace('/master.json', '/master.mpd'), video_id, f_id, |
|
|
'Downloading %s MPD information' % cdn_name, |
|
|
'Downloading %s MPD information' % cdn_name, |
|
|
fatal=False) |
|
|
fatal=False) |
|
|
for f in mpd_formats: |
|
|
|
|
|
if f.get('vcodec') == 'none': |
|
|
|
|
|
f['preference'] = -50 |
|
|
|
|
|
elif f.get('acodec') == 'none': |
|
|
|
|
|
f['preference'] = -40 |
|
|
|
|
|
formats.extend(mpd_formats) |
|
|
formats.extend(mpd_formats) |
|
|
|
|
|
|
|
|
live_archive = live_event.get('archive') or {} |
|
|
live_archive = live_event.get('archive') or {} |
|
@ -186,6 +181,12 @@ class VimeoBaseInfoExtractor(InfoExtractor): |
|
|
'preference': 1, |
|
|
'preference': 1, |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
for f in formats: |
|
|
|
|
|
if f.get('vcodec') == 'none': |
|
|
|
|
|
f['preference'] = -50 |
|
|
|
|
|
elif f.get('acodec') == 'none': |
|
|
|
|
|
f['preference'] = -40 |
|
|
|
|
|
|
|
|
subtitles = {} |
|
|
subtitles = {} |
|
|
text_tracks = config['request'].get('text_tracks') |
|
|
text_tracks = config['request'].get('text_tracks') |
|
|
if text_tracks: |
|
|
if text_tracks: |
|
|