[英]NSError error code -11819 on iOS when trying to play media using AVPlayer
[英]AVPlayer and AVFoundationErrorDomain Code=-11819
我正在开发一个应用程序,其中使用来自云服务的歌曲通过 AVPlayer 播放音乐。 一切正常,大部分文件都可以正常播放。
我最近从特定文件中收到错误消息,并且收到来自 AVPlayer 的消息,我无法确定是网络通信问题还是文件本身的编码问题:
错误域=AVFoundationErrorDomain 代码=-11819“无法完成操作”UserInfo=0x176abd80 {NSLocalizedRecoverySuggestion=稍后重试。, NSLocalizedDescription=无法完成操作}
查看文档我发现代码 11819 意味着:
AVErrorMediaServicesWereReset
- 由于媒体服务不可用,操作无法完成。
有没有人经历过这个?
在将 AVURLAsset 加载到 AVPlayerItem 之前,我通过使用以下方法找到了解决方案
它在特定曲目中崩溃的原因是因为其中一些是 mp3 文件,并且他们没有立即可用的有关歌曲的所有信息(例如持续时间)。
如前所述, keys
是 AVAsset 上的属性。 Apple 在其文档中表示,您应该始终在 iOS 中使用它(但我怀疑基于文件的视频是否需要它)。
我为此苦苦挣扎,最后这无关紧要 - 但无论如何,这可能会对将来的某人有所帮助:
asset = AVAsset(url: videoURL)
let keys = ["duration", "playable", "preferredRate", "preferredVolume", "hasProtectedContent", "providesPreciseDurationAndTiming", "metadata"]
asset.loadValuesAsynchronously(forKeys: keys) {
for key in keys {
var error: NSError? = nil
let status = self.asset.statusOfValue(forKey: key, error: &error)
print("KEY:", key, terminator: "")
switch status {
case .loading:
print(" Loading")
case .loaded:
print(" Sucessfully loaded, continue processing")
case .failed:
print(" Failed with error \(error!)")
case .cancelled:
print(" CANCELLED")
case .unknown:
print(" Unknown")
default:
print(" DEFAULT")
}
}
print("WAIT A BIT...")
DispatchQueue.main.async {
print("...RUN IT")
self.runMovie()
}
}
同样的解决方案也适用于播放电影。 如果您在使用 mp4 资产时遇到Cannot Complete Action
错误,只需添加:
asset.loadValuesAsynchronously(forKeys: ["metadata"]) {
self.runMovie()
}
在将 AVURLAsset 加载到 AVPlayerItem 之前
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.