Im playing the protected HLS streams and my token expires in 5 minutes, so each time stream drops when token expires and I'm getting an error 401 Unauthorized. Question is how to update the token inside asset? I've already tried to change it in resourceLoader loadingRequest.allHTTPHeaderFields but it didn't help:
func resourceLoader(_ resourceLoader: AVAssetResourceLoader,
shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
DispatchQueue.main.async { [unowned self] in
var request = loadingRequest.request
let service = apiService as! APIServiceImplementation
service.networkService.resfreshToken { result in
let data = apiService.prepareForLiveRequest(url: request.url!)
request.url = data.url
var mergedHeaders = request.allHTTPHeaderFields
mergedHeaders!["Cookie"] = (data.1.values.first! as! [String: String])["Cookie"]
request.allHTTPHeaderFields = mergedHeaders
URLSession(configuration: URLSessionConfiguration.default).dataTask(with: request) {
data, response, error in
if let error = error {
print(error)
loadingRequest.finishLoading(with: error)
} else {
loadingRequest.dataRequest?.respond(with: data!)
loadingRequest.finishLoading()
}
}.resume()
}
}
return true
}
There is no way to update AVAsset inside AVPlayerItem, the only thing you can do is to use local server, good example is https://cocoapods.org/pods/HLSCachingReverseProxyServer