PHCacheImageManager.requestAVAsset(forVideo:...) 返回空值 AVAsset

7
我正在使用[PHCachingImageManager]来缓存集合视图中的视频。我可以显示使用缓存管理器生成的图像,但是没有办法拉取AVAssets。
我尝试使用.requestAVAsset(forVideo:...) 方法获取AVAsset,但是传递给结果处理程序的[asset]为nil。尝试解包返回的[asset]时出现错误。
我还查看了返回给结果处理程序的[audioMix]和[info]参数,它们也为空。有人知道我在这里做错/遗漏了什么吗?
viewDidLoad() {
    let videosAlbum = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumVideos, options: nil)
    self.videoAssets = PHAsset.fetchAssets(in: videosAlbum.object(at: 0), options: nil)

    self.imgCacheManager.startCachingImages(for: self.videoAssets.objects(at: [0, videoAssets.count-1]), targetSize: CGSize(width: 150, height: 150), contentMode: .aspectFit, options: nil)
}

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let selectedAsset = self.imgCacheManager.requestAVAsset(forVideo: self.videoAssets.object(at: indexPath.item), options: nil, resultHandler: {
        asset,_,_ in

        self.delegate.selectedVideo(Asset: asset!) // this is the line I get the error
    })
}

我的代理是可选的,但肯定有一些内容,所以我很自信它是未解包的[asset]引发了错误。

1个回答

24

看起来我试图从iCloud请求视频资源,但是没有设置视频请求选项以允许网络访问。

当从PHCachingImageManager请求视频时,我没有传递任何PHVideoRequestOptions对象。在请求资产之前添加以下行就可以解决这个问题。

let options = PHVideoRequestOptions()
options.isNetworkAccessAllowed = true

我在一个使用Photos框架的开源图像选择器上发现了这个线程。我测试时使用的视频确实在iCloud上,这导致我的返回资产为nil。该链接的线程还提供了一个很好的目标C进度处理程序的示例:

options.networkAccessAllowed = YES;
options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info)
{
...
};

谢谢!我在将代码升级到Swift4后遇到了这个问题,options.isNetworkAccessAllowed = true帮了我很多。 - olha
使用react-native-image-crop-picker对我很有效!https://github.com/ivpusic/react-native-image-crop-picker/pull/772 - Chris Bobbe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接