2015-06-25 1 views
2

После прочтения нескольких руководств like this и просмотра другого кода, экспортирующего видео, мы по-прежнему не можем решить проблему.Видео не всегда экспортируется в Camera Roll: NSFileManager's removeItemAtPath не блокирует?

Иногда новое видео экспортируется в Camera Roll, а иногда и нет. Мы не можем даже последовательно воспроизвести проблему.

Единственная проблема, которую мы можем представить, заключается в том, что NSFileManager.defaultManager().removeItemAtPath не является блокирующим вызовом, но никакая документация не предполагает, что он асинхронный, поэтому мы предполагаем, что это не так.

Каждый раз, когда вызывается окно «Сохраненное видео» println, происходит замыкание, указывающее, что видео было успешно записано в Camera Roll, но мы не видим видео.

Рекомендации по устранению неполадок?

Код:

 // -- Get path 
     let fileName = "/editedVideo.mp4" 
     let allPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
     let docsPath = allPaths[0] as! NSString 
     let exportPath = docsPath.stringByAppendingFormat(fileName) 
     let exportUrl = NSURL.fileURLWithPath(exportPath as String)! 

     println(exportPath) 

     // -- Remove old video? 
     if NSFileManager.defaultManager().fileExistsAtPath(exportPath as String) { 
      println("Deleting existing file\n") 
      NSFileManager.defaultManager().removeItemAtPath(exportPath as String, error: nil) 
     } 

     // -- Create exporter 
     let exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality) 
     exporter.videoComposition = mutableComposition 
     exporter.outputFileType = AVFileTypeMPEG4 
     exporter.outputURL = exportUrl 
     exporter.shouldOptimizeForNetworkUse = true 

     // -- Export video 
     exporter.exportAsynchronouslyWithCompletionHandler({ 
      self.exportDidFinish(exporter) 
     }) 
    } 


    func exportDidFinish(exporter: AVAssetExportSession) { 
     println("Finished exporting video!") 

     // Write out video to photo album 
     let assetLibrary = ALAssetsLibrary() 
     assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in 
      println("Saved video \(exporter.outputURL)") 

      if (error != nil) { 
       println("Error saving video") 
      } 
     }) 
    } 

ответ

1

Некоторые предложение, которые могут помочь решить проблему:

  1. Убедитесь, что видео является действительным/совместим с библиотекой, как это сделано here

    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:videoURL]) 
    { 
        [library writeVideoAtPathToSavedPhotosAlbum:videoURL 
               completionBlock:^(NSURL *assetURL, NSError *error){} 
        ]; 
    } 
    
  2. e Nsure, что URL-актив передается обратно не ноль как указано here

    if(error){ 
        NSLog(@"Error: Domain = %@, Code = %@", [error domain], [error localizedDescription]); 
    } else if(assetURL == nil){ 
    
        //It's possible for writing to camera roll to fail, without receiving an error message, but assetURL will be nil 
        //Happens when disk is (almost) full 
        NSLog(@"Error saving to camera roll: no error message, but no url returned"); 
    
    } else { 
        //remove temp file 
        NSError *error; 
        [[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error]; 
        if(error){ 
         NSLog(@"error: %@", [error localizedDescription]); 
        } 
    
    } 
    
  3. рассмотреть возможность использования PHPhotoLibrary вместо для экспортирующих видео

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
        let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(videoURL) 
        let assetPlaceholder = assetRequest.placeholderForCreatedAsset 
    }, 
    completionHandler: { success, error in 
        // check and handle error 
        // do something with your asset local identifier 
    }) 
    
+0

привет знак любой шанс, что вы можете помочь с этим вопросом? http://stackoverflow.com/questions/34704032/swift-video-records-at-one-size-but-renders-at-wrong-size. благодаря! – Crashalot

+0

Я ответил @ Crashalot http://stackoverflow.com/a/34794554/51700 –

+0

Большое спасибо! – Crashalot

 Смежные вопросы

  • Нет связанных вопросов^_^