2017-01-08 55 views
0

我正在用AVFoundation錄製視頻,並且我從視頻創建了一個預覽,當我完成錄製視頻時,視頻正在播放預覽,但是當我保存使用視頻:我無法播放在目錄路徑和AVPlayer中保存的視頻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

得到的AVFoundation的 「filePath」 我使用的委託方法:

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

我傳遞數據用所需的信息返回一個視頻對象,以及何時我想重新播放一個視頻中,我使用的CollectionView的我創建了一個「AVPlayer」並使用文件名的方法「didSelect」來找到視頻的路徑,則該文件存在,但不能播放

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(字符串:文件路徑),我解決了使用NSURL(fileURLwithPath:文件路徑)問題