diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2023-02-28 23:03:44 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2023-02-28 23:14:37 +0530 |
commit | 5038f6d713303e0967d002216e7a88652401c22a (patch) | |
tree | 165abbcc2aaa054ebe73ad87be6d6176d16cf987 | |
parent | 4d248e29d20d983ededab0b03d4fe69dff9eb4ed (diff) | |
download | hypervideo-pre-5038f6d713303e0967d002216e7a88652401c22a.tar.lz hypervideo-pre-5038f6d713303e0967d002216e7a88652401c22a.tar.xz hypervideo-pre-5038f6d713303e0967d002216e7a88652401c22a.zip |
[extractor/youtube] Construct dash formats with `range` query
Closes #6369
-rw-r--r-- | yt_dlp/extractor/youtube.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index be82bc689..0227a1f83 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -3776,10 +3776,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 + dct.update({ + 'request_data': b'x', + 'protocol': 'http_dash_segments', + 'fragments': [{ + 'url': update_url_query(dct['url'], { + 'range': f'{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' |