35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
|   | // | ||
|  | //  DRMManager+Persitable.swift | ||
|  | //  react-native-video | ||
|  | // | ||
|  | //  Created by Krzysztof Moch on 19/08/2024. | ||
|  | // | ||
|  | 
 | ||
|  | import AVFoundation | ||
|  | 
 | ||
|  | extension DRMManager { | ||
|  |     func handlePersistableKeyRequest(keyRequest: AVPersistableContentKeyRequest) async throws { | ||
|  |         if let localSourceEncryptionKeyScheme = drmParams?.localSourceEncryptionKeyScheme { | ||
|  |             try handleEmbeddedKey(keyRequest: keyRequest, scheme: localSourceEncryptionKeyScheme) | ||
|  |         } else { | ||
|  |             // Offline DRM is not supported yet - if you need it please check out the following issue: | ||
|  |             // https://github.com/TheWidlarzGroup/react-native-video/issues/3539 | ||
|  |             throw RCTVideoError.offlineDRMNotSupported | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     private func handleEmbeddedKey(keyRequest: AVPersistableContentKeyRequest, scheme: String) throws { | ||
|  |         guard let uri = keyRequest.identifier as? String, | ||
|  |               let url = URL(string: uri) else { | ||
|  |             throw RCTVideoError.invalidContentId | ||
|  |         } | ||
|  | 
 | ||
|  |         guard let persistentKeyData = RCTVideoUtils.extractDataFromCustomSchemeUrl(from: url, scheme: scheme) else { | ||
|  |             throw RCTVideoError.embeddedKeyExtractionFailed | ||
|  |         } | ||
|  | 
 | ||
|  |         let persistentKey = try keyRequest.persistableContentKey(fromKeyVendorResponse: persistentKeyData) | ||
|  |         try finishProcessingContentKeyRequest(keyRequest: keyRequest, license: persistentKey) | ||
|  |     } | ||
|  | } |