mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[fragment] Avoid repeated request for AES key
This commit is contained in:
		| @@ -369,13 +369,19 @@ class FragmentFD(FileDownloader): | |||||||
|                 return False, frag_index |                 return False, frag_index | ||||||
|             return frag_content, frag_index |             return frag_content, frag_index | ||||||
|  |  | ||||||
|  |         _key_cache = {} | ||||||
|  |  | ||||||
|  |         def _get_key(url): | ||||||
|  |             if url not in _key_cache: | ||||||
|  |                 _key_cache[url] = self.ydl.urlopen(self._prepare_url(info_dict, url)).read() | ||||||
|  |             return _key_cache[url] | ||||||
|  |  | ||||||
|         def decrypt_fragment(fragment, frag_content): |         def decrypt_fragment(fragment, frag_content): | ||||||
|             decrypt_info = fragment.get('decrypt_info') |             decrypt_info = fragment.get('decrypt_info') | ||||||
|             if not decrypt_info or decrypt_info['METHOD'] != 'AES-128': |             if not decrypt_info or decrypt_info['METHOD'] != 'AES-128': | ||||||
|                 return frag_content |                 return frag_content | ||||||
|             iv = decrypt_info.get('IV') or compat_struct_pack('>8xq', fragment['media_sequence']) |             iv = decrypt_info.get('IV') or compat_struct_pack('>8xq', fragment['media_sequence']) | ||||||
|             decrypt_info['KEY'] = decrypt_info.get('KEY') or self.ydl.urlopen( |             decrypt_info['KEY'] = decrypt_info.get('KEY') or _get_key(info_dict.get('_decryption_key_url') or decrypt_info['URI']) | ||||||
|                 self._prepare_url(info_dict, info_dict.get('_decryption_key_url') or decrypt_info['URI'])).read() |  | ||||||
|             # Don't decrypt the content in tests since the data is explicitly truncated and it's not to a valid block |             # Don't decrypt the content in tests since the data is explicitly truncated and it's not to a valid block | ||||||
|             # size (see https://github.com/ytdl-org/youtube-dl/pull/27660). Tests only care that the correct data downloaded, |             # size (see https://github.com/ytdl-org/youtube-dl/pull/27660). Tests only care that the correct data downloaded, | ||||||
|             # not what it decrypts to. |             # not what it decrypts to. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan