你不应该使用requestImageDataForAsset(_:options:resultHandler:)
对于大文件。原因是您不想将整个媒体文件加载到内存中,您将很快耗尽内存并且应用程序将崩溃。这通常意味着您不应该将其用于大图像或几乎任何视频。
根据我的经验,尝试直接从 PHAsset 资源 URL 上传将会失败。 Apple 似乎没有授予我们直接从 PHAsset 源文件上传所需的权限。参见论坛帖子here https://forums.developer.apple.com/thread/25101。这是一个痛苦,因为如果我们想上传视频,它会迫使我们使用大量额外的磁盘空间。
为了获取您要上传的视频文件的本地文件 URL,您需要使用以下任一方法:
requestExportSessionForVideo(_:options:exportPreset:resultHandler:)
or
requestAVAssetForVideo(_:options:resultHandler:)
您将使用这些方法将视频文件的副本导出到您控制的磁盘上的位置。并从该文件上传。额外功能:如果需要,这两种方法都会从 iCloud 下载文件。
查看Vimeo上传 https://github.com/vimeo/VimeoUpload有关与视频上传相关的所有内容的详细信息的库。免责声明:我是该库的作者之一。
即使您没有上传到 Vimeo 服务器,您也可以使用PHAssetExportSessionOperation
and ExportOperation
课程包含在Vimeo上传 https://github.com/vimeo/VimeoUpload做你想做的事。有关详细信息,请参阅存储库自述文件获取 PHAsset 的文件 url https://github.com/vimeo/VimeoUpload#obtaining-a-file-url-for-a-phasset。它还包括用于获取 ALAsset 的文件 url https://github.com/vimeo/VimeoUpload#obtaining-a-file-url-for-an-alasset.
如果您对使用不感兴趣PHAssetExportSessionOperation
or ExportOperation
,查看他们的实现,了解如何在幕后使用 Apple 类的详细信息。