J'essaie de sauvegarder à la fois le chemin du fichier d'une vidéo enregistrée et une vignette de la vidéo dans le répertoire des documents. Puis de définir ces deux valeurs dans un objet en utilisant les chemins d'accès aux fichiers afin de pouvoir utiliser l'objet pour remplir une vue de collection. Avec le code que j'ai actuellement (ci-dessous), après avoir enregistré une vidéo, le chemin d'accès à la vidéo est sauvegardé dans le répertoire des documents, et le chemin d'accès à la vidéo et la vignette sont définis dans mon objet Post
et la vignette apparaît correctement dans la vue de ma collection. Tout va bien jusqu'à présent.
Cependant, seul le chemin d'accès à la vidéo persiste entre les relances de l'application puisqu'il se trouve dans le répertoire, alors que la vignette ne l'est pas. J'aimerais enregistrer la vignette à cet endroit également, mais je ne sais pas comment m'y prendre puisqu'il semble que l'on ne puisse écrire des URL que dans le répertoire.
C'est la première fois que j'utilise le répertoire des documents. Toute aide sera donc la bienvenue ! Comment puis-je écrire la vignette (UIImage) dans mon répertoire de documents avec la vidéo dont elle est issue ?
Voici mon code jusqu'à présent :
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as! NSString
dismiss(animated: true, completion: nil)
if mediaType == kUTTypeMovie {
// Componenets for a unique ID for the video
var uniqueVideoID = ""
var videoURL:NSURL? = NSURL()
var uniqueID = ""
uniqueID = NSUUID().uuidString
// Get the path as URL
videoURL = info[UIImagePickerControllerMediaURL] as? URL as NSURL?
let myVideoVarData = try! Data(contentsOf: videoURL! as URL)
// Write the video to the Document Directory at myVideoVarData (and set the video's unique ID)
let docPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
let documentsDirectory: AnyObject = docPaths[0] as AnyObject
uniqueVideoID = uniqueID + "VIDEO.MOV"
let docDataPath = documentsDirectory.appendingPathComponent(uniqueVideoID) as String
try? myVideoVarData.write(to: URL(fileURLWithPath: docDataPath), options: [])
print("docDataPath under picker ", docDataPath)
print("Video saved to documents directory")
// Create a thumbnail image from the video (first frame)
let asset = AVAsset(url: URL(fileURLWithPath: docDataPath))
let assetImageGenerate = AVAssetImageGenerator(asset: asset)
assetImageGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(asset.duration.value / 3, asset.duration.timescale)
if let videoImage = try? assetImageGenerate.copyCGImage(at: time, actualTime: nil) {
// Add thumbnail & video path to Post object
let video = Post(pathToVideo: URL(fileURLWithPath: docDataPath), thumbnail: UIImage(cgImage: videoImage))
posts.append(video)
print("Video saved to Post object")
}
}
}