У меня проблема при попытке получить видеофайл с устройства пользователя.
Это функция, которая работала на iOS 12, которая мне кажется правильной. Функция requestExportSession вызывается, но никогда не выполняет код обратного вызова. Я пользуюсь Swift 4.
private func getVideo(asset:AssetViewModel, completion: @escaping (contentData?) -> ()) {
guard let avAsset = asset.video else {completion(nil); return}
guard self.createTempDirectory() == true else {completion(nil); return}
let options = PHVideoRequestOptions()
options.isNetworkAccessAllowed = true
let fileName = (avAsset as! AVURLAsset).url.lastPathComponent
let exportFileName = "\(asset.uuid).\(self.vidExt)"
let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("upload").appendingPathComponent(exportFileName)
var fileSize: Int = 0
var success:Bool = false
let videoGroup = DispatchGroup()
videoGroup.enter()
PHImageManager.default().requestExportSession(forVideo: asset.image, options: options, exportPreset: AVAssetExportPreset1280x720) { (exportSession, info) in
guard let exportSession = exportSession else {success = false; videoGroup.leave(); return}
exportSession.outputURL = fileURL
exportSession.outputFileType = AVFileType.mp4
exportSession.exportAsynchronously(completionHandler: {
if exportSession.status == AVAssetExportSessionStatus.completed {
let asset = AVURLAsset(url: fileURL)
fileSize = asset.fileSize ?? 0
success = true
videoGroup.leave()
}
})
}
videoGroup.wait()
if success {
completion(contentData(imageURL: fileURL, fileSize: fileSize, uuid: asset.uuid, fileName: fileName, ext: self.vidExt))
} else {
completion(nil)
}
}