使用AirPlay的AVPlayer与AWS Cookie

7
我尝试播放由CloudFront提供的HLS流。在应用程序中它可以正常工作,我只需在AVURLAsset中设置cookies就可以了。但是当我在AirPlay提供的设备列表中选择一个设备(例如:Apple TV)时,问题就出现了。流无法启动。我收到了错误消息:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedFailureReason=An unknown error occurred (-12926), NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x28312ed90 {Error Domain=NSOSStatusErrorDomain Code=-12926 "(null)"}}

我正在使用以下代码来设置Cookies:

let url = URL(string: "https://YOUR_VIDEO_URL.m3u8");
var cookies = [HTTPCookie]()
    if let cookie = json["cookie"] as? [String: String] {
    for key in cookie.keys {
        let cookieField = ["Set-Cookie": "\(key)=\(cookie[key] ?? "")"]
        let cookie = HTTPCookie.cookies(withResponseHeaderFields: cookieField, for: url)
        cookies.append(contentsOf: cookie)
    }
}

// Assign cookies to AVPlayer
let values = HTTPCookie.requestHeaderFields(with: cookies)
let cookieOptions = ["AVURLAssetHTTPHeaderFieldsKey": values]
let assets = AVURLAsset(url: url, options: cookieOptions)
let item = AVPlayerItem(asset: assets)
let player = AVPlayer(playerItem: item)

你找到解决方案了吗? - Mukul More
1
是的,您必须使用AVAssetResourceLoaderDelegate,然后使用AVAssetResourceLoadingRequest发出请求,以便能够验证块。 - Josué Santos
你能在Apple TV上流媒体播放吗?AVAssetResourceLoading对我没用...你有样例吗? - Mukul More
1
Josué Santos,请问您能否分享一下如何使用AVAssetResourceLoaderDelegate的示例代码,然后使用AVAssetResourceLoadingRequest进行请求的方法? - Mohan
这是一个示例。 https://gist.github.com/josuesasilva/e56ce6550f5cc00edf053b5a38e622a3 - Josué Santos
2个回答

0
你需要使用AVAssetResourceLoaderDelegate并使用AVAssetResourceLoadingRequest发出请求,以便能够对块进行身份验证。来自OP自己的评论

-1

当AirPlay设备没有连接到互联网时,也会发生相同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接