2017-01-08 4 views
0

Я записываю видео с AVFoundation, и я создал предварительный просмотр с видео, когда я заканчиваю запись видео, видео воспроизводится в предварительный просмотр, но когда я сохранить видео с помощью:Я не могу воспроизвести видео, сохраненное в пути каталога, и AVPlayer в swift 2.3

var fileName = "\(self.tField.text!).mp4" 
fileName = fileName.stringByReplacingOccurrencesOfString(" ", withString: "_") 

let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] 
//let originVideoFile = self.filePath 
let destinationVideoFile = path.URLByAppendingPathComponent(fileName) 
let data = NSData(contentsOfURL: self.filePath) 

//try data!.writeToURL(destinationVideoFile!, options: []) 
let fileManager = NSFileManager() 
fileManager.createFileAtPath((destinationVideoFile?.path)!, contents: data, attributes: nil) 

видеофайл создается, но у меня нет доступа к этому файлу, когда я хочу снова играть видео, но рулон камера может воспроизводить видео.

This is the preview of video

and this is the problem when I try to re play the video

, чтобы получить "filePath" Я использую метод делегата от AVFoundation:

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) { 

    print("capture did finish") 
    print(captureOutput); 
    print(outputFileURL); 
    self.filePath = outputFileURL 
    performSegueWithIdentifier("previewVideo", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "previewVideo"{ 
     let destination = segue.destinationViewController as! PreviewVC 
     destination.filePath = self.filePath 
     destination.videoDelegate = self.videoDelegate 
    } 
} 

и передавать данные с "prepareForSegue"

I вернуть видеообъект с необходимой информацией, и когда я хочу снова воспроизвести видео, я с помощью метода «didSelect» из CollectionView создать «AVPlayer» и использовать имя файла, нашел путь к видео, то файл существует, но не может играть

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 


    videoSingleObject = videoObjects[indexPath.item] 
    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
    let url = NSURL(fileURLWithPath: path) 
    let filePath = url.URLByAppendingPathComponent(videoSingleObject.nameOfFile)!.path! 
    let fileManager = NSFileManager.defaultManager() 
    if fileManager.fileExistsAtPath(filePath) { 
     print("FILE AVAILABLE") 
     UISaveVideoAtPathToSavedPhotosAlbum(filePath, nil, nil, nil) 
     print("PATH: \(filePath)") 
     let videoPath = NSURL(string: filePath)! 
     //filePathURL = videoPath 
     print(videoPath) 
     asset = AVAsset(URL: videoPath) 
     playerItem = AVPlayerItem(asset: asset) 
     print("DURATION: \(CMTimeGetSeconds(asset.duration))") 
     player = AVPlayer(playerItem: playerItem) 
     playerViewController.player = player 
     self.presentViewController(playerViewController, animated: true, completion: nil) 
     player.play() 
     }else { 
     print("THE DIRECTORY NOT EXIST") 
    } 
} 

но Я использую «UISaveVideoAtPathToSavedPhotosAlbum(filePath, nil, nil, nil)», чтобы разделить видео в CameraRoll, и в CameraRoll может воспроизводиться видео.

+0

Большого рабочего кода! –

ответ

4

я нашел ошибку, проблема ссылки URL, я использую NSURL (строку: Filepath), я решил проблему с помощью NSURL (fileURLwithPath: Filepath)