繁体   English   中英

AVPlayer 和 AVFoundationErrorDomain 代码=-11819

[英]AVPlayer and AVFoundationErrorDomain Code=-11819

我正在开发一个应用程序,其中使用来自云服务的歌曲通过 AVPlayer 播放音乐。 一切正常,大部分文件都可以正常播放。

我最近从特定文件中收到错误消息,并且收到来自 AVPlayer 的消息,我无法确定是网络通信问题还是文件本身的编码问题:

错误域=AVFoundationErrorDomain 代码=-11819“无法完成操作”UserInfo=0x176abd80 {NSLocalizedRecoverySuggestion=稍后重试。, NSLocalizedDescription=无法完成操作}

查看文档我发现代码 11819 意味着:

AVErrorMediaServicesWereReset - 由于媒体服务不可用,操作无法完成。

有没有人经历过这个?

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

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

它在特定曲目中崩溃的原因是因为其中一些是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM