当我从 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 block 。我请求的视频在 iCloud 中,因为如果 networkAccessAllowed 设置为 false,这会崩溃。
问题出在哪里?
最佳答案
一种解决方案是使用 PHImageManager 的 requestAVAssetForVideo
而不是 requestPlayerItemForVideo
。之后,您可以使用您获得的 AVAsset 创建一个新的 AVPlayerItem。这将与问题中使用的选项一起使用。
我认为这与视频在 iCloud 中的存储方式有关,因为它们可能不是 iCloud 中的 AVPlayerItems。这只是一个有根据的猜测,我不知道为什么其他方法不能正常工作。
关于ios - PHVideoRequestOptions 的 progressHandler 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962522/