diff options
| author | remitamine <remitamine@gmail.com> | 2016-04-30 15:41:22 +0100 | 
|---|---|---|
| committer | remitamine <remitamine@gmail.com> | 2016-04-30 15:44:30 +0100 | 
| commit | 11fa3d7f997019dfce8b670e1b10042ac2004f69 (patch) | |
| tree | d7a60463fc59d413f132f6203e82eda2e3a3e3d5 | |
| parent | d41ee7b7745d59d398f37b435146d4036e4a7448 (diff) | |
[ted] extract all http formats
| -rw-r--r-- | youtube_dl/extractor/ted.py | 45 | 
1 files changed, 29 insertions, 16 deletions
| diff --git a/youtube_dl/extractor/ted.py b/youtube_dl/extractor/ted.py index cf8851438..aea6a02a7 100644 --- a/youtube_dl/extractor/ted.py +++ b/youtube_dl/extractor/ted.py @@ -102,9 +102,9 @@ class TEDIE(InfoExtractor):      }]      _NATIVE_FORMATS = { -        'low': {'preference': 1, 'width': 320, 'height': 180}, -        'medium': {'preference': 2, 'width': 512, 'height': 288}, -        'high': {'preference': 3, 'width': 854, 'height': 480}, +        'low': {'width': 320, 'height': 180}, +        'medium': {'width': 512, 'height': 288}, +        'high': {'width': 854, 'height': 480},      }      def _extract_info(self, webpage): @@ -171,15 +171,21 @@ class TEDIE(InfoExtractor):                  if finfo:                      f.update(finfo) +        http_url = None          for format_id, resources in talk_info['resources'].items():              if format_id == 'h264':                  for resource in resources: +                    h264_url = resource.get('file') +                    if not h264_url: +                        continue                      bitrate = int_or_none(resource.get('bitrate'))                      formats.append({ -                        'url': resource['file'], +                        'url': h264_url,                          'format_id': '%s-%sk' % (format_id, bitrate),                          'tbr': bitrate,                      }) +                    if re.search('\d+k', h264_url): +                        http_url = h264_url              elif format_id == 'rtmp':                  streamer = talk_info.get('streamer')                  if not streamer: @@ -195,16 +201,24 @@ class TEDIE(InfoExtractor):                          'tbr': int_or_none(resource.get('bitrate')),                      })              elif format_id == 'hls': -                hls_formats = self._extract_m3u8_formats( -                    resources.get('stream'), video_name, 'mp4', m3u8_id=format_id) -                for f in hls_formats: -                    if f.get('format_id') == 'hls-meta': -                        continue -                    if not f.get('height'): -                        f['vcodec'] = 'none' -                    else: -                        f['acodec'] = 'none' -                formats.extend(hls_formats) +                formats.extend(self._extract_m3u8_formats( +                    resources.get('stream'), video_name, 'mp4', m3u8_id=format_id, fatal=False)) + +        m3u8_formats = list(filter( +            lambda f: f.get('protocol') == 'm3u8' and f.get('vcodec') != 'none' and f.get('resolution') != 'multiple', +            formats)) +        if http_url: +            for m3u8_format in m3u8_formats: +                bitrate = self._search_regex(r'(\d+k)', m3u8_format['url'], 'bitrate', default=None) +                if not bitrate: +                    continue +                f = m3u8_format.copy() +                f.update({ +                    'url': re.sub(r'\d+k', bitrate, http_url), +                    'format_id': m3u8_format['format_id'].replace('hls', 'http'), +                    'protocol': 'http', +                }) +                formats.append(f)          audio_download = talk_info.get('audioDownload')          if audio_download: @@ -212,10 +226,9 @@ class TEDIE(InfoExtractor):                  'url': audio_download,                  'format_id': 'audio',                  'vcodec': 'none', -                'preference': -0.5,              }) -        self._sort_formats(formats) +        self._sort_formats(formats, ('width', 'height', 'tbr', 'format_id'))          video_id = compat_str(talk_info['id']) | 
