从iCloud加载视频时,我希望更新UIProgressView的进度。由于某种原因,不会调用progressHandler。我试图像在SamplePhotosApp中完成它一样(虽然会加载图像),但是无法正常工作。
这是我用于选择和请求视频的代码:
let videoRequestOptions = PHVideoRequestOptions()
videoRequestOptions.deliveryMode = .FastFormat
videoRequestOptions.version = .Original
videoRequestOptions.networkAccessAllowed = true
videoRequestOptions.progressHandler = { (progress, error, stop, info) in
dispatch_async(dispatch_get_main_queue(), {
print(progress)
self.progressView.progress = Float(progress)
})
}
PHImageManager.defaultManager().requestPlayerItemForVideo(asset, options: videoRequestOptions, resultHandler: {
result, info in
self.videoPlayer = AVPlayer(playerItem: result!)
})
该代码甚至不会打印任何内容,因此看起来根本不会调用progressHandler块。我请求的视频在iCloud中,因为如果将networkAccessAllowed设置为false,这将导致崩溃。
哪里出问题了?
最佳答案
一种解决方案是使用PHImageManager的requestAVAssetForVideo
而不是requestPlayerItemForVideo
。之后,您可以使用得到的AVAsset创建一个新的AVPlayerItem。这将与问题中使用的选项一起使用。
我认为这与视频存储在iCloud中的方式有关,因为它们可能不是iCloud中的AVPlayerItems。这只是一个有根据的猜测,对于为什么其他方法不能正常工作,我没有任何事实。
关于ios - 未调用PHVideoRequestOptions的progressHandler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34962522/