2017-11-25 6 views
0

Ich versuche ein Video zu speichern, das mit der Kamera mit dem UIImagePickerController aufgenommen wurde. Ich habe zwei verschiedene Wege ausprobiert, und beide funktionieren überhaupt nicht.UIImagePickerController - Gespeichertes Video auf Kamera speichern Fehler

Erster Versuch:

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 
     } 
    }) 
} 

An diesem Versuch, bin ich immer erhalte die Störung "The operation couldn’t be completed. (Cocoa error -1.)"

Zweiter Versuch:

if let filePath = info["UIImagePickerControllerMediaURL"] as! NSURL, 
    let stringPath = filePath.path { 
    UISaveVideoAtPathToSavedPhotosAlbum(stringPath, self, #selector(Controller.videoSaved(videoPath:didFinishSavingWithError:contextInfo:)), nil) 
} 

Diese nicht funktioniert entweder ... Der Rückruf Der Fehler ist null, aber das Video wird nicht in der Kamerarolle gespeichert. Auch, wenn ich das UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(stringPath) benutze, gibt mir diese Methode auch false die ganze Zeit zurück. Ich kann nicht verstehen, warum das aufgenommene Video nicht kompatibel wäre.

Ich weiß wirklich nicht, was ich falsch mache. Was vermisse ich? Eine Konfiguration in plist?

Hier ist, wie wie der Wert von info["UIImagePickerControllerMediaURL"] aussehen: file:///private/var/mobile/Containers/Data/Application/2B9BE04A-17B3-49CE-B4BA-C45F183E9A64/tmp/837294779101__C4825AFE-8140-420F-ACD0-64623C7A4753.MOV

Für mit der Kamera aufgenommenen Bilder, PHPhotoLibrary Methode sehr gut funktioniert ... Es ist nur Videos, die nicht in der Lage ist, um gerettet zu werden.

+0

check out diese Antwort in Frage https://stackoverflow.com/questions/9991332/how-to-save-recorded-video-into-photo-album –

+0

Danke Jitendra. Ich habe versucht, denselben Code direkt in die Delegate-Methode zu schreiben, und es hat funktioniert. Ich habe diese Speicheroperation ursprünglich nach einem API-Aufruf ausgeführt. Meine Annahme ist, dass die Datei auf diesem Pfad wahrscheinlich nicht nach wenigen Sekunden verfügbar ist ... – manonthemoon

+0

Sie können das Asset aus der Info mit diesem Schlüssel 'UIImagePickerControllerPHAsset' abrufen. –

Antwort

0

Nicht sicher in 100% aber ich glaube, dass es für mich nicht funktionierte, weil ich das Video nur speicherte, nachdem eine Anfrage an meine API erfolgreich war. Meine Annahme ist, dass die Pfad-URL temporär ist und eine sehr kurze Lebenszeit hat. Wenn ich es an einen anderen Controller übergebe und API aufruft, funktioniert es nicht. Aber wenn ich das Video direkt in der Delegate-Methode von UIImagePickerViewController speichern, funktioniert es gut.

Verwandte Themen