diff options
| author | Philipp Hagemeister <phihag@phihag.de> | 2014-08-26 12:51:13 +0200 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2014-08-26 12:51:13 +0200 | 
| commit | 704df56da7b074697138e715027c699a54b1b95a (patch) | |
| tree | d0fbea4f9d601d6f35e4fa2203378072db05dc41 /youtube_dl/extractor/common.py | |
| parent | 33ac271ba723365ecb7e3f7cd9fd9d99d0f8615b (diff) | |
[sportdeutschland] add new extractor
Diffstat (limited to 'youtube_dl/extractor/common.py')
| -rw-r--r-- | youtube_dl/extractor/common.py | 49 | 
1 files changed, 49 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 69d5f687c..9ece30308 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -636,6 +636,55 @@ class InfoExtractor(object):          return formats +    def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None): +        formats = [{ +            'format_id': 'm3u8-meta', +            'url': m3u8_url, +            'ext': ext, +            'protocol': 'm3u8', +            'preference': -1, +            'resolution': 'multiple', +            'format_note': 'Quality selection URL', +        }] + +        m3u8_doc = self._download_webpage(m3u8_url, video_id) +        last_info = None +        kv_rex = re.compile( +            r'(?P<key>[a-zA-Z_-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)') +        for line in m3u8_doc.splitlines(): +            if line.startswith('#EXT-X-STREAM-INF:'): +                last_info = {} +                for m in kv_rex.finditer(line): +                    v = m.group('val') +                    if v.startswith('"'): +                        v = v[1:-1] +                    last_info[m.group('key')] = v +            elif line.startswith('#') or not line.strip(): +                continue +            else: +                tbr = int_or_none(last_info.get('BANDWIDTH'), scale=1000) + +                f = { +                    'format_id': 'm3u8-%d' % (tbr if tbr else len(formats)), +                    'url': line.strip(), +                    'tbr': tbr, +                    'ext': ext, +                } +                codecs = last_info.get('CODECS') +                if codecs: +                    video, audio = codecs.split(',') +                    f['vcodec'] = video.partition('.')[0] +                    f['acodec'] = audio.partition('.')[0] +                resolution = last_info.get('RESOLUTION') +                if resolution: +                    width_str, height_str = resolution.split('x') +                    f['width'] = int(width_str) +                    f['height'] = int(height_str) +                formats.append(f) +                last_info = {} +        self._sort_formats(formats) +        return formats +  class SearchInfoExtractor(InfoExtractor):      """ | 
