[ted] extract all http formats
This commit is contained in:
parent
d41ee7b774
commit
11fa3d7f99
1 changed files with 29 additions and 16 deletions
|
@ -102,9 +102,9 @@ class TEDIE(InfoExtractor):
|
|||
}]
|
||||
|
||||
_NATIVE_FORMATS = {
|
||||
'low': {'preference': 1, 'width': 320, 'height': 180},
|
||||
'medium': {'preference': 2, 'width': 512, 'height': 288},
|
||||
'high': {'preference': 3, 'width': 854, 'height': 480},
|
||||
'low': {'width': 320, 'height': 180},
|
||||
'medium': {'width': 512, 'height': 288},
|
||||
'high': {'width': 854, 'height': 480},
|
||||
}
|
||||
|
||||
def _extract_info(self, webpage):
|
||||
|
@ -171,15 +171,21 @@ class TEDIE(InfoExtractor):
|
|||
if finfo:
|
||||
f.update(finfo)
|
||||
|
||||
http_url = None
|
||||
for format_id, resources in talk_info['resources'].items():
|
||||
if format_id == 'h264':
|
||||
for resource in resources:
|
||||
h264_url = resource.get('file')
|
||||
if not h264_url:
|
||||
continue
|
||||
bitrate = int_or_none(resource.get('bitrate'))
|
||||
formats.append({
|
||||
'url': resource['file'],
|
||||
'url': h264_url,
|
||||
'format_id': '%s-%sk' % (format_id, bitrate),
|
||||
'tbr': bitrate,
|
||||
})
|
||||
if re.search('\d+k', h264_url):
|
||||
http_url = h264_url
|
||||
elif format_id == 'rtmp':
|
||||
streamer = talk_info.get('streamer')
|
||||
if not streamer:
|
||||
|
@ -195,16 +201,24 @@ class TEDIE(InfoExtractor):
|
|||
'tbr': int_or_none(resource.get('bitrate')),
|
||||
})
|
||||
elif format_id == 'hls':
|
||||
hls_formats = self._extract_m3u8_formats(
|
||||
resources.get('stream'), video_name, 'mp4', m3u8_id=format_id)
|
||||
for f in hls_formats:
|
||||
if f.get('format_id') == 'hls-meta':
|
||||
formats.extend(self._extract_m3u8_formats(
|
||||
resources.get('stream'), video_name, 'mp4', m3u8_id=format_id, fatal=False))
|
||||
|
||||
m3u8_formats = list(filter(
|
||||
lambda f: f.get('protocol') == 'm3u8' and f.get('vcodec') != 'none' and f.get('resolution') != 'multiple',
|
||||
formats))
|
||||
if http_url:
|
||||
for m3u8_format in m3u8_formats:
|
||||
bitrate = self._search_regex(r'(\d+k)', m3u8_format['url'], 'bitrate', default=None)
|
||||
if not bitrate:
|
||||
continue
|
||||
if not f.get('height'):
|
||||
f['vcodec'] = 'none'
|
||||
else:
|
||||
f['acodec'] = 'none'
|
||||
formats.extend(hls_formats)
|
||||
f = m3u8_format.copy()
|
||||
f.update({
|
||||
'url': re.sub(r'\d+k', bitrate, http_url),
|
||||
'format_id': m3u8_format['format_id'].replace('hls', 'http'),
|
||||
'protocol': 'http',
|
||||
})
|
||||
formats.append(f)
|
||||
|
||||
audio_download = talk_info.get('audioDownload')
|
||||
if audio_download:
|
||||
|
@ -212,10 +226,9 @@ class TEDIE(InfoExtractor):
|
|||
'url': audio_download,
|
||||
'format_id': 'audio',
|
||||
'vcodec': 'none',
|
||||
'preference': -0.5,
|
||||
})
|
||||
|
||||
self._sort_formats(formats)
|
||||
self._sort_formats(formats, ('width', 'height', 'tbr', 'format_id'))
|
||||
|
||||
video_id = compat_str(talk_info['id'])
|
||||
|
||||
|
|
Loading…
Reference in a new issue