ios - docs parse platform
Swift: guarde el video de NSURL en el rollo de la cámara del usuario (4)
Tengo un videoURL
variable de tipo NSURL.
Si llamo a println(videoURL)
devolvería algo como esto: http://files.parsetfss.com/d540f71f-video.mp4
Tengo un botón configurado que debería tomar este videoURL y guardar el video en el rollo de la cámara del usuario.
Lo mejor que he hecho es esto:
UISaveVideoAtPathToSavedPhotosAlbum(videoPath: String!, completionTarget: AnyObject!, completionSelector: Selector, contextInfo: UnsafeMutablePointer<Void>)
Aunque no estoy seguro de si esto funcionará o no, no puedo encontrar la manera de convertir videoFile:NSURL
en un videoPath
.
Cualquier ayuda es apreciada en esto.
Editar:
Lo siguiente no tiene éxito:
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, self, nil, nil)
obsoleto a partir de iOS 9
1: importar AssetsLibrary
import AssetsLibrary
2: use este código para guardar videos de la url a la biblioteca de la cámara.
ALAssetsLibrary().writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: nil)
La respuesta aceptada ya no funciona con Swift 3.0 y iOS 10.
Primero, debe configurar los siguientes permisos en el archivo plist de su aplicación:
Privacidad - Descripción de uso de la biblioteca de fotos
Proporcione una cadena que se presenta al usuario explicando por qué está solicitando el permiso.
A continuación, importar fotos:
import Photos
Finalmente, aquí está el código actualizado para Swift 3.0 :
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
Para guardar video de NSURL a la cámara del usuario
func video(videoPath: NSString, didFinishSavingWithError error: NSError?, contextInfo info: AnyObject)
{
if let _ = error {
print("Error,Video failed to save")
}else{
print("Successfully,Video was saved")
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let conversationField = self.conversation {
if (mediaType?.isEqual((kUTTypeMovie as NSString) as String))!
{
let theVideoURL: URL? = (info[UIImagePickerControllerMediaURL] as? URL)
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum((theVideoURL?.path)!))
{
UISaveVideoAtPathToSavedPhotosAlbum((theVideoURL?.path)!, self, #selector(ConversationDetailsViewController.video(videoPath:didFinishSavingWithError:contextInfo:)), nil)
}
}
self.dismiss(animated: true, completion: nil)
}
Referencia de :: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-swift
AssetsLibrary está en desuso
1: importar fotos
import Photos
2: use este código para guardar videos de la url a la biblioteca de la cámara.
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(nsUrlToYourVideo)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .Alert)
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alertController.addAction(defaultAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
Swift 3
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: urlToYourVideo)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}