mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[fd/hls] Fix BYTERANGE logic (#11972)
				
					
				
			Closes #3578, Closes #3810, Closes #9400 Authored by: entourage8
This commit is contained in:
		| @@ -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]), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 entourage8
					entourage8