[extractor/common] Extract the first of a seq of videos in a .smil file

This commit is contained in:
Antti Ajanki 2015-02-22 10:16:51 +02:00
parent 37f885650c
commit 637570326b
1 changed files with 39 additions and 29 deletions

View File

@ -921,39 +921,49 @@ class InfoExtractor(object):
formats = [] formats = []
rtmp_count = 0 rtmp_count = 0
for video in smil.findall('./body/switch/video'): if smil.findall('./body/seq/video'):
src = video.get('src') video = smil.findall('./body/seq/video')[0]
if not src: fmts, rtmp_count = self._parse_smil_video(video, base, rtmp_count)
continue formats.extend(fmts)
bitrate = int_or_none(video.get('system-bitrate') or video.get('systemBitrate'), 1000) else:
width = int_or_none(video.get('width')) for video in smil.findall('./body/switch/video'):
height = int_or_none(video.get('height')) fmts, rtmp_count = self._parse_smil_video(video, base, rtmp_count)
proto = video.get('proto') formats.extend(fmts)
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) self._sort_formats(formats)
return formats return formats
def _parse_smil_video(self, video, base, rtmp_count):
src = video.get('src')
if not src:
return ([], rtmp_count)
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':
return (self._extract_m3u8_formats(src, video_id, ext), rtmp_count)
elif proto == 'rtmp':
rtmp_count += 1
streamer = video.get('streamer') or base
return ([{
'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,
}], rtmp_count)
def _live_title(self, name): def _live_title(self, name):
""" Generate the title for a live video """ """ Generate the title for a live video """
now = datetime.datetime.now() now = datetime.datetime.now()