|
|
|
@ -3023,7 +3023,16 @@ class InfoExtractor(object):
|
|
|
|
|
entries.append(media_info)
|
|
|
|
|
return entries
|
|
|
|
|
|
|
|
|
|
def _extract_akamai_formats(self, manifest_url, video_id, hosts={}):
|
|
|
|
|
def _extract_akamai_formats(self, *args, **kwargs):
|
|
|
|
|
fmts, subs = self._extract_akamai_formats_and_subtitles(*args, **kwargs)
|
|
|
|
|
if subs:
|
|
|
|
|
self.report_warning(bug_reports_message(
|
|
|
|
|
"Ignoring subtitle tracks found in the manifests; "
|
|
|
|
|
"if any subtitle tracks are missing,"
|
|
|
|
|
))
|
|
|
|
|
return fmts
|
|
|
|
|
|
|
|
|
|
def _extract_akamai_formats_and_subtitles(self, manifest_url, video_id, hosts={}):
|
|
|
|
|
signed = 'hdnea=' in manifest_url
|
|
|
|
|
if not signed:
|
|
|
|
|
# https://learn.akamai.com/en-us/webhelp/media-services-on-demand/stream-packaging-user-guide/GUID-BE6C0F73-1E06-483B-B0EA-57984B91B7F9.html
|
|
|
|
@ -3032,6 +3041,7 @@ class InfoExtractor(object):
|
|
|
|
|
'', manifest_url).strip('?')
|
|
|
|
|
|
|
|
|
|
formats = []
|
|
|
|
|
subtitles = {}
|
|
|
|
|
|
|
|
|
|
hdcore_sign = 'hdcore=3.7.0'
|
|
|
|
|
f4m_url = re.sub(r'(https?://[^/]+)/i/', r'\1/z/', manifest_url).replace('/master.m3u8', '/manifest.f4m')
|
|
|
|
@ -3050,10 +3060,11 @@ class InfoExtractor(object):
|
|
|
|
|
hls_host = hosts.get('hls')
|
|
|
|
|
if hls_host:
|
|
|
|
|
m3u8_url = re.sub(r'(https?://)[^/]+', r'\1' + hls_host, m3u8_url)
|
|
|
|
|
m3u8_formats = self._extract_m3u8_formats(
|
|
|
|
|
m3u8_formats, m3u8_subtitles = self._extract_m3u8_formats_and_subtitles(
|
|
|
|
|
m3u8_url, video_id, 'mp4', 'm3u8_native',
|
|
|
|
|
m3u8_id='hls', fatal=False)
|
|
|
|
|
formats.extend(m3u8_formats)
|
|
|
|
|
subtitles = self._merge_subtitles(subtitles, m3u8_subtitles)
|
|
|
|
|
|
|
|
|
|
http_host = hosts.get('http')
|
|
|
|
|
if http_host and m3u8_formats and not signed:
|
|
|
|
@ -3077,7 +3088,7 @@ class InfoExtractor(object):
|
|
|
|
|
formats.append(http_f)
|
|
|
|
|
i += 1
|
|
|
|
|
|
|
|
|
|
return formats
|
|
|
|
|
return formats, subtitles
|
|
|
|
|
|
|
|
|
|
def _extract_wowza_formats(self, url, video_id, m3u8_entry_protocol='m3u8_native', skip_protocols=[]):
|
|
|
|
|
query = compat_urlparse.urlparse(url).query
|
|
|
|
|