diff options
| -rw-r--r-- | youtube_dl/downloader/hls.py | 11 | ||||
| -rw-r--r-- | youtube_dl/extractor/turner.py | 15 | ||||
| -rw-r--r-- | youtube_dl/extractor/uplynk.py | 4 | 
3 files changed, 21 insertions, 9 deletions
diff --git a/youtube_dl/downloader/hls.py b/youtube_dl/downloader/hls.py index 8dd1b898e..baaff44d5 100644 --- a/youtube_dl/downloader/hls.py +++ b/youtube_dl/downloader/hls.py @@ -83,7 +83,10 @@ class HlsFD(FragmentFD):          self._prepare_and_start_frag_download(ctx) +        extra_query = None          extra_param_to_segment_url = info_dict.get('extra_param_to_segment_url') +        if extra_param_to_segment_url: +            extra_query = compat_urlparse.parse_qs(extra_param_to_segment_url)          i = 0          media_sequence = 0          decrypt_info = {'METHOD': 'NONE'} @@ -97,8 +100,8 @@ class HlsFD(FragmentFD):                          if re.match(r'^https?://', line)                          else compat_urlparse.urljoin(man_url, line))                      frag_filename = '%s-Frag%d' % (ctx['tmpfilename'], i) -                    if extra_param_to_segment_url: -                        frag_url = update_url_query(frag_url, extra_param_to_segment_url) +                    if extra_query: +                        frag_url = update_url_query(frag_url, extra_query)                      success = ctx['dl'].download(frag_filename, {'url': frag_url})                      if not success:                          return False @@ -124,8 +127,8 @@ class HlsFD(FragmentFD):                          if not re.match(r'^https?://', decrypt_info['URI']):                              decrypt_info['URI'] = compat_urlparse.urljoin(                                  man_url, decrypt_info['URI']) -                        if extra_param_to_segment_url: -                            decrypt_info['URI'] = update_url_query(decrypt_info['URI'], extra_param_to_segment_url) +                        if extra_query: +                            decrypt_info['URI'] = update_url_query(decrypt_info['URI'], extra_query)                          decrypt_info['KEY'] = self.ydl.urlopen(decrypt_info['URI']).read()                  elif line.startswith('#EXT-X-MEDIA-SEQUENCE'):                      media_sequence = int(line[22:]) diff --git a/youtube_dl/extractor/turner.py b/youtube_dl/extractor/turner.py index 0d4271f11..108caa9d8 100644 --- a/youtube_dl/extractor/turner.py +++ b/youtube_dl/extractor/turner.py @@ -11,6 +11,7 @@ from ..utils import (      parse_duration,      xpath_attr,      update_url_query, +    compat_urlparse,  ) @@ -87,8 +88,18 @@ class TurnerBaseIE(InfoExtractor):              if ext == 'smil':                  formats.extend(self._extract_smil_formats(video_url, video_id, fatal=False))              elif ext == 'm3u8': -                formats.extend(self._extract_m3u8_formats( -                    video_url, video_id, 'mp4', m3u8_id=format_id, fatal=False)) +                m3u8_formats = self._extract_m3u8_formats( +                    video_url, video_id, 'mp4', m3u8_id=format_id, fatal=False) +                if m3u8_formats: +                    # Sometimes final URLs inside m3u8 are unsigned, let's fix this +                    # ourselves +                    qs = compat_urlparse.urlparse(video_url).query +                    if qs: +                        query = compat_urlparse.parse_qs(qs) +                        for m3u8_format in m3u8_formats: +                            m3u8_format['url'] = update_url_query(m3u8_format['url'], query) +                            m3u8_format['extra_param_to_segment_url'] = qs +                    formats.extend(m3u8_formats)              elif ext == 'f4m':                  formats.extend(self._extract_f4m_formats(                      update_url_query(video_url, {'hdcore': '3.7.0'}), diff --git a/youtube_dl/extractor/uplynk.py b/youtube_dl/extractor/uplynk.py index ae529f690..2cd22cf8a 100644 --- a/youtube_dl/extractor/uplynk.py +++ b/youtube_dl/extractor/uplynk.py @@ -33,9 +33,7 @@ class UplynkIE(InfoExtractor):          formats = self._extract_m3u8_formats('http://content.uplynk.com/%s.m3u8' % path, display_id, 'mp4')          if session_id:              for f in formats: -                f['extra_param_to_segment_url'] = { -                    'pbs': session_id, -                } +                f['extra_param_to_segment_url'] = 'pbs=' + session_id          self._sort_formats(formats)          asset = self._download_json('http://content.uplynk.com/player/assetinfo/%s.json' % path, display_id)          if asset.get('error') == 1:  | 
