从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/

10-10 21:03