diff options
| author | Antti Ajanki <antti.ajanki@iki.fi> | 2015-02-22 10:16:51 +0200 | 
|---|---|---|
| committer | Antti Ajanki <antti.ajanki@iki.fi> | 2015-02-24 21:22:59 +0200 | 
| commit | 637570326bfa12575fe210e52e2a39d6585891d8 (patch) | |
| tree | 7fd8791b7ca1d01515c29f0657050aca0bb1f04b | |
| parent | 37f885650c323e040a200bda9376bc7dbdf2ca25 (diff) | |
[extractor/common] Extract the first of a seq of videos in a .smil file
| -rw-r--r-- | youtube_dl/extractor/common.py | 68 | 
1 files changed, 39 insertions, 29 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 87fce9cd8..4fe99d25d 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -921,39 +921,49 @@ class InfoExtractor(object):          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, -                }) +        if smil.findall('./body/seq/video'): +            video = smil.findall('./body/seq/video')[0] +            fmts, rtmp_count = self._parse_smil_video(video, base, rtmp_count) +            formats.extend(fmts) +        else: +            for video in smil.findall('./body/switch/video'): +                fmts, rtmp_count = self._parse_smil_video(video, base, rtmp_count) +                formats.extend(fmts) +          self._sort_formats(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):          """ Generate the title for a live video """          now = datetime.datetime.now() | 
