mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +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 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): | ||||
|             decrypt_info = fragment.get('decrypt_info') | ||||
|             if not decrypt_info or decrypt_info['METHOD'] != 'AES-128': | ||||
|                 return frag_content | ||||
|             iv = decrypt_info.get('IV') or compat_struct_pack('>8xq', fragment['media_sequence']) | ||||
|             decrypt_info['KEY'] = decrypt_info.get('KEY') or self.ydl.urlopen( | ||||
|                 self._prepare_url(info_dict, info_dict.get('_decryption_key_url') or decrypt_info['URI'])).read() | ||||
|             decrypt_info['KEY'] = decrypt_info.get('KEY') or _get_key(info_dict.get('_decryption_key_url') or decrypt_info['URI']) | ||||
|             # 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, | ||||
|             # not what it decrypts to. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan