J'ai une variable videoURL
de type NSURL.
Si j'appelle println(videoURL)
, le résultat obtenu est le suivant: http://files.parsetfss.com/d540f71f-video.mp4
J'ai un bouton configuré qui prend cette videoURL et enregistre la vidéo sur la pellicule de la caméra de l'utilisateur.
Le meilleur que j'ai fait est le suivant:
UISaveVideoAtPathToSavedPhotosAlbum(videoPath: String!, completionTarget: AnyObject!, completionSelector: Selector, contextInfo: UnsafeMutablePointer<Void>)
Bien que je ne sois même pas sûr que cela fonctionne ou non, je ne vois pas comment convertir videoFile:NSURL
en videoPath
.
Toute aide est appréciée à ce sujet.
Modifier:
Ce qui suit est un échec:
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, self, nil, nil)
AssetsLibrary est obsolète
1: importer des photos
import Photos
2: Utilisez ce code pour enregistrer la vidéo de l’URL à la bibliothèque de caméras.
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)
}
}
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)
}
}
La réponse acceptée ne fonctionne plus avec Swift 3.0 et iOS 10.
Tout d’abord, vous devez définir l’autorisation suivante dans le fichier Plist de votre application:
Confidentialité - Description de l'utilisation de la photothèque
Fournissez une chaîne qui est présentée à l'utilisateur pour expliquer pourquoi vous demandez l'autorisation.
Ensuite, importez des photos:
import Photos
Enfin, voici le code mis à jour pour 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)
}
}
Pour enregistrer une vidéo de NSURL sur une pellicule utilisateur
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)
}
Référence de :: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-Swift
obsolète à partir de iOS 9
1: import AssetsLibrary
import AssetsLibrary
2: Utilisez ce code pour enregistrer la vidéo de l’URL à la bibliothèque de caméras.
ALAssetsLibrary().writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: nil)
Il suffit de l'utiliser et de coller l'URL de votre vidéo:
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
let createAssetRequest: PHAssetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(NSURL(string: /* your url */)!)!
createAssetRequest.placeholderForCreatedAsset
}) { (success, error) -> Void in
if success {
//popup alert success
}
else {
//popup alert unsuccess
}
}