2016-01-23 124 views
1

当我从iCloud加载视频时,我想要更新UIProgressView的进度。出于某种原因,progressHandler不会被调用。我试图像SamplePhotosApp(它载入图像)那样做,但无法使其工作。PHVideoRequestOptions'progressHandler not called

下面是我使用的选项的代码,并请求视频:

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,它会崩溃。

问题在哪里?

回答

0

一个解决方案是使用PHImageManager的requestAVAssetForVideo而不是requestPlayerItemForVideo。之后,您可以使用您获得的AVAsset创建一个新的AVPlayerItem。这将与问题中使用的选项一起使用。

我认为这与视频存储在iCloud中的方式有​​关,因为它们可能不是iCloud中的AVPlayerItems。这只是一个受过教育的猜测,而且我没有任何关于为什么其他方法无法正常工作的事实。