gpt4 book ai didi

ios - 当用户尝试使用 PHPickerViewController 在 IOS 14、swift 5 中使用选定的照片权限检索视频时获取视频数据为零

转载 作者:行者123 更新时间:2023-12-04 07:38:48 64 4
gpt4 key购买 nike

在 iOS 14 中,Apple 引入了 PHPickerViewController用户有权访问所有照片库视频或选定视频的权限。
在第一种情况下,当我们为所有视频提供许可时,
我们能够从照片库中获取视频并将其转换为视频数据以将其发送到后端服务器。
但是在第二种情况下,当用户提供对所选视频的权限时,
在这种情况下,我们可以从照片库中获取视频,但无法将其转换为来自本地视频 url 的数据。此时数据始终为零。
我们使用以下代码从照片库 url 中检索视频并将其转换为数据。

// MARK: PHPickerViewControllerDelegate Methods
extension PhotoPickerVC: PHPickerViewControllerDelegate {

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
// Always dismiss the picker first
dismiss(animated: true)
if !results.isEmpty {
guard let itemProvider = results.first?.itemProvider else { return }

itemProvider.loadItem(forTypeIdentifier: "public.movie", options: nil) { [weak self] (fileURL, _) in
DispatchQueue.main.async {
guard let videoURL = fileURL as? URL, let _ = self else { return }
do {
//mediaURL video loading
print(videoURL)
let VideoData = try Data(contentsOf: videoURL, options: Data.ReadingOptions.alwaysMapped)
print(VideoData)
} catch _ {
print("Received nil VideoData")
}
}
}

}
}
}

最佳答案

这一行是错误的:

itemProvider.loadItem(forTypeIdentifier: "public.movie", options: nil) { [weak self] (fileURL, _) in
您不应该尝试加载任何项目。你不能在内存中保存视频!您应该要求提供商将数据保存到磁盘。我使用这种代码:
let movie = UTType.movie.identifier
itemProvider.loadFileRepresentation(forTypeIdentifier: movie) { url, err in
请注意,您必须立即检索 URL,因为这是一个临时位置,文件将被删除。如果您想将文件保存在磁盘上,您必须将它同步(在后台线程上)复制到其他地方。
同样,不要将文件中的数据直接读入内存。保存后,您可以从磁盘播放视频;这就是它的用途。

关于ios - 当用户尝试使用 PHPickerViewController 在 IOS 14、swift 5 中使用选定的照片权限检索视频时获取视频数据为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67600817/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com