diff options
Diffstat (limited to 'youtube_dl/extractor')
| -rw-r--r-- | youtube_dl/extractor/ted.py | 82 | 
1 files changed, 47 insertions, 35 deletions
diff --git a/youtube_dl/extractor/ted.py b/youtube_dl/extractor/ted.py index db5a4f44e..63e2455b2 100644 --- a/youtube_dl/extractor/ted.py +++ b/youtube_dl/extractor/ted.py @@ -182,20 +182,29 @@ class TEDIE(InfoExtractor):          title = talk_info['title'].strip() -        native_downloads = try_get( -            talk_info, -            (lambda x: x['downloads']['nativeDownloads'], -             lambda x: x['nativeDownloads']), -            dict) or {} +        downloads = talk_info.get('downloads') or {} +        native_downloads = downloads.get('nativeDownloads') or talk_info.get('nativeDownloads') or {}          formats = [{              'url': format_url,              'format_id': format_id, -            'format': format_id,          } for (format_id, format_url) in native_downloads.items() if format_url is not None] + +        subtitled_downloads = downloads.get('subtitledDownloads') or {} +        for lang, subtitled_download in subtitled_downloads.items(): +            for q in self._NATIVE_FORMATS: +                q_url = subtitled_download.get(q) +                if not q_url: +                    continue +                formats.append({ +                    'url': q_url, +                    'format_id': '%s-%s' % (q, lang), +                    'language': lang, +                }) +          if formats:              for f in formats: -                finfo = self._NATIVE_FORMATS.get(f['format_id']) +                finfo = self._NATIVE_FORMATS.get(f['format_id'].split('-')[0])                  if finfo:                      f.update(finfo) @@ -215,34 +224,7 @@ class TEDIE(InfoExtractor):          http_url = None          for format_id, resources in 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': h264_url, -                        'format_id': '%s-%sk' % (format_id, bitrate), -                        'tbr': bitrate, -                    }) -                    if re.search(r'\d+k', h264_url): -                        http_url = h264_url -            elif format_id == 'rtmp': -                streamer = talk_info.get('streamer') -                if not streamer: -                    continue -                for resource in resources: -                    formats.append({ -                        'format_id': '%s-%s' % (format_id, resource.get('name')), -                        'url': streamer, -                        'play_path': resource['file'], -                        'ext': 'flv', -                        'width': int_or_none(resource.get('width')), -                        'height': int_or_none(resource.get('height')), -                        'tbr': int_or_none(resource.get('bitrate')), -                    }) -            elif format_id == 'hls': +            if format_id == 'hls':                  if not isinstance(resources, dict):                      continue                  stream_url = url_or_none(resources.get('stream')) @@ -251,6 +233,36 @@ class TEDIE(InfoExtractor):                  formats.extend(self._extract_m3u8_formats(                      stream_url, video_name, 'mp4', m3u8_id=format_id,                      fatal=False)) +            else: +                if not isinstance(resources, list): +                    continue +                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': h264_url, +                            'format_id': '%s-%sk' % (format_id, bitrate), +                            'tbr': bitrate, +                        }) +                        if re.search(r'\d+k', h264_url): +                            http_url = h264_url +                elif format_id == 'rtmp': +                    streamer = talk_info.get('streamer') +                    if not streamer: +                        continue +                    for resource in resources: +                        formats.append({ +                            'format_id': '%s-%s' % (format_id, resource.get('name')), +                            'url': streamer, +                            'play_path': resource['file'], +                            'ext': 'flv', +                            'width': int_or_none(resource.get('width')), +                            'height': int_or_none(resource.get('height')), +                            'tbr': int_or_none(resource.get('bitrate')), +                        })          m3u8_formats = list(filter(              lambda f: f.get('protocol') == 'm3u8' and f.get('vcodec') != 'none',  | 
