当我尝试将 AVAssetURL 转换为数据时出现错误

getting error when i trying to convert AVAssetURL to Data

Error Domain=NSCocoaErrorDomain Code=257 "The file “IMG_9807.MOV” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/var/mobile/Media/DCIM/109APPLE/IMG_9807.MOV, NSUnderlyingError=0x1c1e5fe00 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"

我正在将资产 URL 发送到其他控制器并尝试转换为数据

PHImageManager.default().requestAVAsset(forVideo: self.albumView.phAsset, options: options) { (video, audioMix, info) in
                DispatchQueue.main.async {
                     let urlAsset = video as! AVURLAsset
                    self.dismiss(animated: false, completion: {
                        self.delegate?.fusumaVideoCompleted(withFileURL: urlAsset.url)
                    })
                }
            }

下面是将 AVAssetUrl 转换为数据的方法

 do {
                let data = try Data(contentsOf: product.videoURL, options: .mappedIfSafe)
                return .upload(.multipart([MultipartFormData(provider: .data(data), name: "post[video]", fileName: "video.\(pathExtension)", mimeType: "video/\(pathExtension)")]))
            } catch {
                debugPrint(error)
            }

如错误提示,您无法通过 URL 访问用户照片库中的视频文件以上传它。您应该获取视频数据并上传。一个视频很大,不要直接获取数据放在内存中;相反,将数据导出到您 允许访问的位置的文件,例如临时文件夹。

为此,您可以(例如)使用此方法:

https://developer.apple.com/documentation/photos/phassetresourcemanager/1616280-writedata

或者这个:

https://developer.apple.com/documentation/photos/phimagemanager/1616981-requestexportsession

如果您使用“邮件”应用从您自己设备的照片库中通过电子邮件发送视频,您将实际看到这种情况发生;导出视频时有一个带有进度条的暂停,然后然后 电子邮件被构建。