diff options
| author | Sergey M․ <dstftw@gmail.com> | 2014-12-09 22:28:28 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2014-12-09 22:28:28 +0600 | 
| commit | e89a2aabedf24c145698a96a192a28a55a16fe1c (patch) | |
| tree | ef58c610b2f5fba627e9f88ff59e5eb1cc5aeb00 | |
| parent | f58766ce5cc5a1c6d651560591bad119787e94b2 (diff) | |
[extractor/common] Add generic SMIL formats extraction routine
| -rw-r--r-- | youtube_dl/extractor/common.py | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index cfd25cd21..2277ec6ab 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -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()  | 
