aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorentourage8 <193440922+entourage8@users.noreply.github.com>2025-02-08 22:43:12 +0100
committerGitHub <noreply@github.com>2025-02-08 21:43:12 +0000
commit10b7ff68e98f17655e31952f6e17120b2d7dda96 (patch)
tree73bbec89f855d5d79ffea8efdf29853479b2de2d
parent0d9f061d38c3a4da61972e2adad317079f2f1c84 (diff)
[fd/hls] Fix `BYTERANGE` logic (#11972)
Closes #3578, Closes #3810, Closes #9400 Authored by: entourage8
-rw-r--r--yt_dlp/downloader/hls.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/yt_dlp/downloader/hls.py b/yt_dlp/downloader/hls.py
index da2574da7..7bd116d96 100644
--- a/yt_dlp/downloader/hls.py
+++ b/yt_dlp/downloader/hls.py
@@ -177,6 +177,7 @@ class HlsFD(FragmentFD):
if external_aes_iv:
external_aes_iv = binascii.unhexlify(remove_start(external_aes_iv, '0x').zfill(32))
byte_range = {}
+ byte_range_offset = 0
discontinuity_count = 0
frag_index = 0
ad_frag_next = False
@@ -204,6 +205,11 @@ class HlsFD(FragmentFD):
})
media_sequence += 1
+ # If the byte_range is truthy, reset it after appending a fragment that uses it
+ if byte_range:
+ byte_range_offset = byte_range['end']
+ byte_range = {}
+
elif line.startswith('#EXT-X-MAP'):
if format_index and discontinuity_count != format_index:
continue
@@ -217,10 +223,12 @@ class HlsFD(FragmentFD):
if extra_segment_query:
frag_url = update_url_query(frag_url, extra_segment_query)
+ map_byte_range = {}
+
if map_info.get('BYTERANGE'):
splitted_byte_range = map_info.get('BYTERANGE').split('@')
- sub_range_start = int(splitted_byte_range[1]) if len(splitted_byte_range) == 2 else byte_range['end']
- byte_range = {
+ sub_range_start = int(splitted_byte_range[1]) if len(splitted_byte_range) == 2 else 0
+ map_byte_range = {
'start': sub_range_start,
'end': sub_range_start + int(splitted_byte_range[0]),
}
@@ -229,7 +237,7 @@ class HlsFD(FragmentFD):
'frag_index': frag_index,
'url': frag_url,
'decrypt_info': decrypt_info,
- 'byte_range': byte_range,
+ 'byte_range': map_byte_range,
'media_sequence': media_sequence,
})
media_sequence += 1
@@ -257,7 +265,7 @@ class HlsFD(FragmentFD):
media_sequence = int(line[22:])
elif line.startswith('#EXT-X-BYTERANGE'):
splitted_byte_range = line[17:].split('@')
- sub_range_start = int(splitted_byte_range[1]) if len(splitted_byte_range) == 2 else byte_range['end']
+ sub_range_start = int(splitted_byte_range[1]) if len(splitted_byte_range) == 2 else byte_range_offset
byte_range = {
'start': sub_range_start,
'end': sub_range_start + int(splitted_byte_range[0]),