iOS14获取iCloud视频失败问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS14获取iCloud视频失败问题相关的知识,希望对你有一定的参考价值。

参考技术A         使用PHVideoRequestOptions的requestAVAssetForVideo方法获取云端视频,然后AVAssetExportSession进行压缩发现压缩失败,后来发现是获取云端视频出了问题。

//PHVideoRequestOptions获取iCloud视频

PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];

options.version = PHVideoRequestOptionsVersionOriginal;

options.deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat;

options.networkAccessAllowed = YES ;

其中,deliveryMode不能用PHVideoRequestOptionsDeliveryModeMediumQualityFormat和PHVideoRequestOptionsDeliveryModeFastFormat,不然可能获取不到云端视频,最好用PHVideoRequestOptionsDeliveryModeHighQualityFormat,保证能够获取到视频;networkAccessAllowed要记得设置为YES,否则也会获取不到云端视频。

//AVAssetExportSession压缩视频

AVAssetExportSession压缩视频的outputURL参数,注意要用[NSURLfileURLWithPath:@"path"]方法构造,不能用[NSURL URLWithString:@"path"]方法构造,否则会压缩失败!

ios swift图库库性能问题,一旦加载图像/视频列表,数据来自iCloud

【中文标题】ios swift图库库性能问题,一旦加载图像/视频列表,数据来自iCloud【英文标题】:Ios swift gallery library Performance issue, once loading image/Video list, the data is from ICloud 【发布时间】:2020-04-17 05:32:16 【问题描述】:

我是 IOS 新手,我正在使用第三方库来集成我的多个图像/视频选择器。图书馆链接https://github.com/hyperoslo/Gallery

本地图像/视频显示速度足够快,但问题是一旦我使用 iCloud 包含 500 多张图像,几乎需要 1 分钟。第一次加载,是他们的任何解决方案减少或几乎消除加载时间。

这是我的代码快照,可能会有所帮助

class MyGalleryViewController: UIViewController,     GalleryControllerDelegate,UITabBarControllerDelegate
let gallery = GalleryController()
override func viewDidLoad() 
super.viewDidLoad()

    openGallery()     

private func openGallery()
    gallery.delegate = self
    gallery.modalPresentationStyle = .fullScreen
    present(gallery, animated: true, completion: nil)

//Rest of galleryController function

提前非常感谢。

【问题讨论】:

【参考方案1】:

您需要遵循以下步骤:

为 iCloud 上的图像获取 PHAsset
 PHAsset.fetchAssets(with: .image, options: PHFetchOptions())
    // Images on iCloud will be included
请求资产图片
let imageRequestOptions = PHImageRequestOptions()
imageRequestOptions.deliveryMode = .opportunistic
imageRequestOptions.isNetworkAccessAllowed = true // allowing iCloud image downloaded from network
imageRequestOptions.progressHandler = progressHandler // progressHandler is outer callback, may be called multiple times

PHCachingImageManager.default().requestImage(for: asset)
在 PHAssetImageProgressHandler 中处理图片下载进度
let progressHandler: PHAssetImageProgressHandler =  (progress, _, stop, _) in
    cell.updateProgress(CGFloat(progress))

iCloud 镜像的关键:

    PHImageRequestOptions.isNetworkAccessAllowed PHImageRequestOptions.progressHandler

【讨论】:

感谢 Rango,快速回答,但我很困惑如何使用 Gallery 库配置“PHImageRequestOptions”? 有一个 PHImageRequestOptions()。检查库源文件的第 18 行“UIImageView+Extensions.swift”。您可以修改选项并添加progressHandler来自行处理下载进度。 谢谢,我一定会试试的。 :)

以上是关于iOS14获取iCloud视频失败问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS 从iCloud中获取文件

获取 iCloud 帐户详细信息

ios swift图库库性能问题,一旦加载图像/视频列表,数据来自iCloud

iOS选取相册中iCloud云上图片和视频的处理

iOS 14 iCloud钥匙串可提醒/帮助用户创建强密码!

Core Data、iCloud 和两个持久性存储失败