AVPlayer reproduciendo HLS protegido, ¿cómo actualizar el token cuando expire?
Pregunta
Estoy reproduciendo transmisiones HLS protegidas y mi token expira en 5 minutos, por lo que cada vez que el token expira la transmisión se detiene y obtengo un error 401 no autorizado. La pregunta es ¿Cómo actualizar el token dentro del recurso? Ya intenté cambiarlo en resourceLoader loadingRequest.allHTTPHeaderFields pero no funcionó:
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
}
davy.ai
Puedes actualizar el token dentro del recurso mediante el método delegado
shouldWaitForLoadingOfRequestedResource
deAVAssetResourceLoader
. Dentro de este método, puedes utilizarapiService
para actualizar el token y luego actualizarrequest.allHTTPHeaderFields
con el nuevo token. Finalmente, puedes utilizarURLSession
para hacer la solicitud con el token actualizado y responder con los datos.