es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
        }
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes actualizar el token dentro del recurso mediante el método delegado shouldWaitForLoadingOfRequestedResource de AVAssetResourceLoader. Dentro de este método, puedes utilizar apiService para actualizar el token y luego actualizar request.allHTTPHeaderFields con el nuevo token. Finalmente, puedes utilizar URLSession para hacer la solicitud con el token actualizado y responder con los datos.

Comments are closed.