diff options
Diffstat (limited to 'youtube_dl/extractor/common.py')
| -rw-r--r-- | youtube_dl/extractor/common.py | 50 | 
1 files changed, 47 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 2faaf6226..2277ec6ab 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -174,9 +174,10 @@ class InfoExtractor(object):      _type "url" indicates that the video must be extracted from another      location, possibly by a different extractor. Its only required key is:      "url" - the next URL to extract. - -    Additionally, it may have properties believed to be identical to the -    resolved entity, for example "title" if the title of the referred video is +    The key "ie_key" can be set to the class name (minus the trailing "IE", +    e.g. "Youtube") if the extractor class is known in advance. +    Additionally, the dictionary may have any properties of the resolved entity +    known in advance, for example "title" if the title of the referred video is      known ahead of time. @@ -792,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() | 
