|
|
@ -793,6 +793,49 @@ class InfoExtractor(object): |
|
|
|
self._sort_formats(formats) |
|
|
|
return formats |
|
|
|
|
|
|
|
# TODO: improve extraction |
|
|
|
def _extract_smil_formats(self, smil_url, video_id): |
|
|
|
smil = self._download_xml( |
|
|
|
smil_url, video_id, 'Downloading SMIL file', |
|
|
|
'Unable to download SMIL file') |
|
|
|
|
|
|
|
base = smil.find('./head/meta').get('base') |
|
|
|
|
|
|
|
formats = [] |
|
|
|
rtmp_count = 0 |
|
|
|
for video in smil.findall('./body/switch/video'): |
|
|
|
src = video.get('src') |
|
|
|
if not src: |
|
|
|
continue |
|
|
|
bitrate = int_or_none(video.get('system-bitrate') or video.get('systemBitrate'), 1000) |
|
|
|
width = int_or_none(video.get('width')) |
|
|
|
height = int_or_none(video.get('height')) |
|
|
|
proto = video.get('proto') |
|
|
|
if not proto: |
|
|
|
if base: |
|
|
|
if base.startswith('rtmp'): |
|
|
|
proto = 'rtmp' |
|
|
|
elif base.startswith('http'): |
|
|
|
proto = 'http' |
|
|
|
ext = video.get('ext') |
|
|
|
if proto == 'm3u8': |
|
|
|
formats.extend(self._extract_m3u8_formats(src, video_id, ext)) |
|
|
|
elif proto == 'rtmp': |
|
|
|
rtmp_count += 1 |
|
|
|
streamer = video.get('streamer') or base |
|
|
|
formats.append({ |
|
|
|
'url': streamer, |
|
|
|
'play_path': src, |
|
|
|
'ext': 'flv', |
|
|
|
'format_id': 'rtmp-%d' % (rtmp_count if bitrate is None else bitrate), |
|
|
|
'tbr': bitrate, |
|
|
|
'width': width, |
|
|
|
'height': height, |
|
|
|
}) |
|
|
|
self._sort_formats(formats) |
|
|
|
|
|
|
|
return formats |
|
|
|
|
|
|
|
def _live_title(self, name): |
|
|
|
""" Generate the title for a live video """ |
|
|
|
now = datetime.datetime.now() |
|
|
|