Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用avplayer从documentdirectory播放视频文件_Ios_Avplayer - Fatal编程技术网

Ios 如何使用avplayer从documentdirectory播放视频文件

Ios 如何使用avplayer从documentdirectory播放视频文件,ios,avplayer,Ios,Avplayer,我正在ios中创建视频播放器应用程序,如果我将mp4文件存储在捆绑资源中,或者如果我将url流式传输,它工作正常,但是如果我将文件存储在document direcory中,并且我尝试使用avplayer播放,它不在播放,我是否应该对document directory中的脱机文件进行不同的处理 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [St

我正在ios中创建视频播放器应用程序,如果我将mp4文件存储在捆绑资源中,或者如果我将url流式传输,它工作正常,但是如果我将文件存储在document direcory中,并且我尝试使用avplayer播放,它不在播放,我是否应该对document directory中的脱机文件进行不同的处理

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) {
    }
 @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()
        }
}
代码:


试试这个,用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()

}

swift 3/4 100%可行

录像机

@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")
        }
    }
保存到文档目录

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) {
    }
 @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()
        }
}
从文档目录播放视频

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) {
    }
 @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()
        }
}

我尝试了几种方法,包括上述方法,但发现每次启动应用程序时,应用程序的文档路径都会发生变化,这会改变url的第一部分

这有助于我获取文件的当前位置

                  let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
                let playerItem = AVPlayerItem(url: URL(fileURLWithPath: documentsPath.appendingFormat("/\(clipId).mp4")))
                player = AVPlayer(playerItem: playerItem)

希望这对某人有所帮助

两者都一样没有区别您错过了问题中检索文档路径的代码行。回复
playVideo(filePath:path)
with
playVideo(filePath:path.path)
它工作正常,这实际上非常聪明,您帮助了我,谢谢我看到您有clipId,我知道你正在制作一个视频应用程序,不管怎样,我正在尝试返回帮助,你想要一个能给你提供json响应的url和youtube视频url下载链接吗,我会给你的,非常感谢