diff options
| author | Sergey M․ <dstftw@gmail.com> | 2017-01-20 00:47:04 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2017-01-20 00:47:04 +0700 | 
| commit | 1fe84be0f3b36822af804db6cf7c06a1ac5ac688 (patch) | |
| tree | 250684c49b5b60592d89846f457e4dcde29b6b36 /youtube_dl/extractor/firsttv.py | |
| parent | 1076858f76ac674f967c3e0cfaf9cd237c34ff62 (diff) | |
[1tv] Add support for hls (closes #11786)
Diffstat (limited to 'youtube_dl/extractor/firsttv.py')
| -rw-r--r-- | youtube_dl/extractor/firsttv.py | 27 | 
1 files changed, 26 insertions, 1 deletions
diff --git a/youtube_dl/extractor/firsttv.py b/youtube_dl/extractor/firsttv.py index c6fb67057..081c71842 100644 --- a/youtube_dl/extractor/firsttv.py +++ b/youtube_dl/extractor/firsttv.py @@ -86,18 +86,43 @@ class FirstTVIE(InfoExtractor):              title = item['title']              quality = qualities(QUALITIES)              formats = [] +            path = None              for f in item.get('mbr', []):                  src = f.get('src')                  if not src or not isinstance(src, compat_str):                      continue                  tbr = int_or_none(self._search_regex(                      r'_(\d{3,})\.mp4', src, 'tbr', default=None)) +                if not path: +                    path = self._search_regex( +                        r'//[^/]+/(.+?)_\d+\.mp4', src, +                        'm3u8 path', default=None)                  formats.append({                      'url': src,                      'format_id': f.get('name'),                      'tbr': tbr, -                    'quality': quality(f.get('name')), +                    'source_preference': quality(f.get('name')),                  }) +            # m3u8 URL format is reverse engineered from [1] (search for +            # master.m3u8). dashEdges (that is currently balancer-vod.1tv.ru) +            # is taken from [2]. +            # 1. http://static.1tv.ru/player/eump1tv-current/eump-1tv.all.min.js?rnd=9097422834:formatted +            # 2. http://static.1tv.ru/player/eump1tv-config/config-main.js?rnd=9097422834 +            if not path and len(formats) == 1: +                path = self._search_regex( +                    r'//[^/]+/(.+?$)', formats[0]['url'], +                    'm3u8 path', default=None) +            if path: +                if len(formats) == 1: +                    m3u8_path = ',' +                else: +                    tbrs = [compat_str(t) for t in sorted(f['tbr'] for f in formats)] +                    m3u8_path = '_,%s,%s' % (','.join(tbrs), '.mp4') +                formats.extend(self._extract_m3u8_formats( +                    'http://balancer-vod.1tv.ru/%s%s.urlset/master.m3u8' +                    % (path, m3u8_path), +                    display_id, 'mp4', +                    entry_protocol='m3u8_native', m3u8_id='hls', fatal=False))              self._sort_formats(formats)              thumbnail = item.get('poster') or self._og_search_thumbnail(webpage)  | 
