|
|
|
@ -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':
|
|
|
|
|
continue
|
|
|
|
|
if not f.get('height'):
|
|
|
|
|
f['vcodec'] = 'none'
|
|
|
|
|
else:
|
|
|
|
|
f['acodec'] = 'none'
|
|
|
|
|
formats.extend(hls_formats)
|
|
|
|
|
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
|
|
|
|
|
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'])
|
|
|
|
|
|
|
|
|
|