My company offers lesson video for exercise. The video is applied signed cookie from AWS cloudFront infrastructure. When play video directly in iPhone(iPad), generated cookie is set to options like as below play well.
let asset = AVURLAsset(url: url, options: cookies)
But when try to play via AirPlay2 with other device (smart tv, Apple TV), Video player shows me a can't play. Of course, I implemented resource loader delegate and wrote codes as below
func resourceLoader(
_ resourceLoader: AVAssetResourceLoader,
shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest
) -> Bool {
guard let cookie = viewModel?.cookie else { return false }
var newRequest = loadingRequest.request
newRequest.headers = HTTPHeaders(cookie)
let connection = URLSession.shared.dataTask(with: newRequest) { data, response, error in
switch data {
case let .some(data):
loadingRequest.contentInformationRequest?.contentType = (response as! HTTPURLResponse).allHeaderFields["Content-Type"] as? String
loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true
loadingRequest.contentInformationRequest?.contentLength = Int64(data.count).
loadingRequest.response = response loadingRequest.dataRequest?.respond(with: data)
loadingRequest.finishLoading()
case .none:
loadingRequest.finishLoading(with: error)
}
}
connection.resume()
return true
}
Some codes have problems? or What can I refer documents for fixing problem?