diff options
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 22 | 
1 files changed, 16 insertions, 6 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 4246d84f9..89711c84e 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1694,8 +1694,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):              if n_response is None:                  # give up if descrambling failed                  break -            fmt['url'] = update_url( -                parsed_fmt_url, query_update={'n': [n_response]}) +            for fmt_dct in traverse_obj(fmt, (None, (None, ('fragments', Ellipsis))), expected_type=dict): +                fmt_dct['url'] = update_url( +                    fmt_dct['url'], query_update={'n': [n_response]})      # from yt-dlp, with tweaks      def _extract_signature_timestamp(self, video_id, player_url, ytcfg=None, fatal=False): @@ -2047,10 +2048,19 @@ class YoutubeIE(YoutubeBaseInfoExtractor):              if no_video:                  dct['abr'] = tbr              if no_audio or no_video: -                dct['downloader_options'] = { -                    # Youtube throttles chunks >~10M -                    'http_chunk_size': 10485760, -                } +                CHUNK_SIZE = 10 << 20 +                # avoid Youtube throttling +                dct.update({ +                    'protocol': 'http_dash_segments', +                    'fragments': [{ +                        'url': update_url_query(dct['url'], { +                            'range': '{0}-{1}'.format(range_start, min(range_start + CHUNK_SIZE - 1, dct['filesize'])) +                        }) +                    } for range_start in range(0, dct['filesize'], CHUNK_SIZE)] +                } if dct['filesize'] else { +                    'downloader_options': {'http_chunk_size': CHUNK_SIZE}  # No longer useful? +                }) +                  if dct.get('ext'):                      dct['container'] = dct['ext'] + '_dash'              formats.append(dct)  | 
