iOS 10 HLS 404播放列表错误处理

iOS 10 HLS 404 playlist error handling

在 iOS 10 中,如果 m3u8 主播放列表请求 returns 404,AVPlayerItem 上的状态 属性 不会转换为失败状态 (AVPlayerItemStatusFailed)。这使得错误处理程序无法运行,如 https://developer.apple.com/reference/avfoundation/avplayeritem

的 AVPlayerItem 文档中所述

有没有人找到替代品?

如果你的意思是 URL returns 404 代码状态,比播放或添加项目之前,你可以制作一个 URLSession 与包含 URL 的请求,然后您可以检查返回的响应。如果它的状态码为 200,则表示一切正常,如果它的值为 404,则表示有故障。

示例 Swift 3

    let request = NSMutableURLRequest(url: URL(string: "http://yourstringhere.com")!)
            request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in
        //handle if error != nil and if response.statusCode is 200 or 404
    }

    task.resume()

Swift 4 解

您可以跟踪 AVPlayerItemNewErrorLogEntry 通知。对于 404 错误,以下代码将打印“HTTP 404:未找到文件”

NotificationCenter.default.addObserver(forName: .AVPlayerItemNewErrorLogEntry, object: avPlayer?.currentItem, queue: .main) { [weak self] _ in
        print(avPlayer.currentItem?.errorLog()?.events.last?.errorComment)
}

此外,该视频的后半部分包含有关 client-side 错误处理最佳实践的有用信息。 https://developer.apple.com/library/content/technotes/tn2224/_index.html