AVPlayer and AVFoundationErrorDomain Code=-11819

10
我正在开发一个应用程序,使用来自云服务的歌曲通过AVPlayer播放音乐。一切都正常工作,大多数文件都可以正常播放,但最近我遇到了一些特定文件的错误。从AVPlayer返回的消息中我无法确定它是网络通信问题还是文件本身的编码问题:

Error Domain=AVFoundationErrorDomain Code=-11819 "无法完成操作" UserInfo=0x176abd80 {NSLocalizedRecoverySuggestion=稍后再试。, NSLocalizedDescription=无法完成操作}

通过查阅文档,我发现代码11819的含义是: AVErrorMediaServicesWereReset - 由于媒体服务不可用,无法完成操作。
有人经历过这种情况吗?
3个回答

7

在加载AVURLAsset到AVPlayerItem之前,我通过使用以下方法找到了解决方案:

  • (void)loadValuesAsynchronouslyForKeys:(NSArray *)keys completionHandler:(void (^)(void))handler

之所以在特定的曲目中崩溃,是因为其中一些是mp3文件,并且它们并没有立即提供关于歌曲的所有信息(例如持续时间)。


如果你不介意的话,你在这里传递了哪些键来使它工作?只是持续时间吗? - Alexander
我希望这也能解决我的播放器问题。 - abhimuralidharan
FYI...这对我没有解决问题。不过答案还是值得一赞的。 - picciano

3

正如之前所述,keys 是 AVAsset 的属性。苹果公司在其文档中表示,在 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()
        }
    }

0

同样的解决方案也适用于播放电影。如果您在使用mp4资产时遇到“无法完成操作”错误,请添加:

asset.loadValuesAsynchronously(forKeys: ["metadata"]) {
    self.runMovie()
}

在将AVURLAsset加载到AVPlayerItem之前


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