我正在尝试使用UIImagePickerController保存使用相机录制的视频。我尝试过两种不同的方式,两种方式都没有用。
首次尝试:
if let pathURL = info["UIImagePickerControllerMediaURL"] as! URL?, mediaType == kUTTypeMovie {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: pathURL)
}, completionHandler: { (isSuccessfull, error) in
if error != nil {
// ERROR
// error.localizedDescription value below
// "The operation couldn’t be completed. (Cocoa error -1.)"
} else if isSuccessfull {
// SUCCESS
}
})
}
在那次尝试中,我总是收到错误"The operation couldn’t be completed. (Cocoa error -1.)"
第二次尝试:
if let filePath = info["UIImagePickerControllerMediaURL"] as! NSURL,
let stringPath = filePath.path {
UISaveVideoAtPathToSavedPhotosAlbum(stringPath, self, #selector(Controller.videoSaved(videoPath:didFinishSavingWithError:contextInfo:)), nil)
}
这也不起作用......回调,错误为零,但视频未保存到相机胶卷中。此外,当我使用UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(stringPath)
时,此方法也会一直返回false
。我无法理解为什么录制的视频与保存不兼容。
我真的不知道我做错了什么。我错过了什么? plist中的配置?
以下是info["UIImagePickerControllerMediaURL"]
的价值:
file:///private/var/mobile/Containers/Data/Application/2B9BE04A-17B3-49CE-B4BA-C45F183E9A64/tmp/837294779101__C4825AFE-8140-420F-ACD0-64623C7A4753.MOV
对于使用相机拍摄的照片,PHPhotoLibrary方法效果非常好......这只是无法保存的视频。
答案 0 :(得分:0)
不确定100%,但我相信它对我不起作用,因为我只是在我的API请求成功后才保存视频。我的假设是路径URL是临时的,并且生命周期很短。当我将它传递给另一个控制器并进行API调用时,它不起作用。但是如果我直接在UIImagePickerViewController的委托方法中保存视频,那么它可以正常工作。