2017-06-26 1 views
0

Je suis en train de développer un lecteur vidéo dans lequel j'ai des fonctionnalités de recadrage. J'utilise ABVideoRangeSlider pour ça. Chaque fois que j'essaie de couper et enregistrer la vidéo, je reçois Error Domain=NSCocoaErrorDomain Code=-1 "(null)" cette erreur. Voici mon extrait de codeImpossible de montrer la vidéo dans l'appareil photo roll after trim

let composition = AVMutableComposition() 
    let track = composition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID:Int32(kCMPersistentTrackID_Invalid)) 

    try! track.insertTimeRange(CMTimeRangeMake(startTimeForCurrentSlice, endTimeForCurrentSlice), of: asset.tracks(withMediaType: AVMediaTypeVideo)[0] as AVAssetTrack, at: kCMTimeZero) 
    var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
    let documentsDirectory = paths[0] as String 
    let videoPathToSave = documentsDirectory.appending("mergeVideo-\(arc4random()%1000)-d.mp4") 
    let videoURLToSave = NSURL(fileURLWithPath: videoPathToSave) 

    PHPhotoLibrary.shared().performChanges({ 
     PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: videoURLToSave as URL) 
    }) { 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) 
     } else { 
      print("Error: \(String(describing: error!))") 
     } 
    } 

Toute aide sera appréciée.

Répondre

0

Avant d'enregistrer sur la pellicule Vous devez exporter votre AVMutableComposition avec AVAssetExportSession ou avec AVAssetWriter, et ensuite vous pouvez l'enregistrer au rouleau de la caméra.

Commander this tutoriel pour l'utilisation AVAssetExportSession. Pour enregistrer sur le rouleau de la caméra, il utilise ALAssetsLibrary, mais vous pouvez l'enregistrer avec Photos.