2017-09-12 7 views
0

Ich erstelle Video-Player-Anwendung in IOS, wenn ich MP4-Datei im Bundle-Ressource speichern oder wenn ich url streamen funktioniert es gut, aber wenn ich eine Datei in Dokument Directory speichern und ich bin versucht, mit avplayer spielen sie nicht spielen wird, sollte ich anders behandeln mit offline-Datei in DokumentenverzeichnisWie man Videodatei von Dokumentverzeichnis mit avplayer

Code:

let fileManager = FileManager() 
     let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/myvideo.mp4")) 
    self.playVideo(filePath: destinationURLForFile.path) 


    func playVideo(filePath:String) 
    { 
     var playerItem = AVPlayerItem.init(url:URL.init(string: filePath)!) 

     var player = AVPlayer(playerItem: playerItem) 
     var playerLayer = AVPlayerLayer(player: player) 
     playerLayer.frame = self.view.frame 
     self.view.layer.addSublayer(playerLayer) 
     player.play() 

    } 

Antwort

0

swift 3/4 100 %%%%%%% bearbeitbar

Recorder öffnen Videokamera

@IBAction func RecordAction(_ sender: Any) { 

     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){ 
      print("CameraAvailable") 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = .camera 
      imagePicker.mediaTypes = [kUTTypeMovie as String] 
      imagePicker.allowsEditing = false 
      imagePicker.showsCameraControls = true 

      self.present(imagePicker,animated: true, completion: nil) 
     } 

     else{ 
      print("CameraNotAvailable") 
     } 
    } 

speichern zu Dokumentenverzeichnis

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     // recover video URL 
     let url = info[UIImagePickerControllerMediaURL] as? URL 
     // check if video is compatible with album 
     let compatible: Bool = UIVideoAtPathIsCompatibleWithSavedPhotosAlbum((url?.path)!) 
     // save 
     if compatible { 
      UISaveVideoAtPathToSavedPhotosAlbum((url?.path)!, self, nil, nil) 
      print("saved!!!! \(String(describing: url?.path))") 

     } 
     videopath = url //save url to send next function play video 
     dismiss(animated: true, completion: nil) 
    } 
// error 
    func video(_ videoPath: String, didFinishSavingWithError error: Error?, contextInfo: UnsafeMutableRawPointer) { 
    } 

Play-Video von Dokumentenverzeichnis

@IBAction func playvideo(_ sender: Any) 
    { 
     let player = AVPlayer(url: videopath!) // video path coming from above function 

     let playerViewController = AVPlayerViewController() 
     playerViewController.player = player 
     self.present(playerViewController, animated: true) { 
      playerViewController.player!.play() 
     } 
} 
0

die sie interessieren, geschrieben in Swift 3.0,

let fm = FileManager.default 
let docsurl = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
let path = docsurl.appendingPathComponent("myvideo.mp4") 
playVideo(filePath: path) 

func playVideo(filePath:String) 
{ 
    var playerItem = AVPlayerItem(url: URL(fileURLWithPath: filePath) 
    var player = AVPlayer(playerItem: playerItem) 
    var playerLayer = AVPlayerLayer(player: player) 
    playerLayer.frame = self.view.frame 
    self.view.layer.addSublayer(playerLayer) 
    player.play() 

} 
+0

beide sind gleich, es gibt keinen Unterschied – skyshine

+0

Sie Die Codezeile wurde verpasst, um den Dokumentpfad in der Frage abzurufen. – AshokPolu