如何使用fileURL播放视频

时间:2018-10-31 08:14:50

标签: ios swift avplayer

我可以使用自定义录像机像下面那样获取输出文件URL

file:///var/mobile/Containers/Data/Application/5EB769B8-193F-4C9F-982A-48892333A8F0/Documents/2018-Oct-31%2012:16:54output.mov

我需要使用AVPlayerViewController播放该视频。我正在使用以下代码在viewcontroller中播放视频。但这是行不通的。谁能指导我完成这项任务?

func pathVideo()

{


 if let path = Bundle.main.path(forResource: "file:///var/mobile/Containers/Data/Application/5EB769B8-193F-4C9F-982A-48892333A8F0/Documents/2018-Oct-31%2012:16:54output.mov", ofType: "mov", inDirectory: "file:///var/mobile/Containers/Data/Application/5EB769B8-193F-4C9F-982A-48892333A8F0/Documents/2018-Oct-31%2012:16:54output.mov")

 {


    let video  = AVPlayer(url: URL(fileURLWithPath: path))



    let playerViewController = AVPlayerViewController()


    playerViewController.player = video

    present(playerViewController, animated: true, completion:
    {

        video.play()

    })

    }

}

2 个答案:

答案 0 :(得分:2)

您的代码有几处错误。 如前所述,您已经将视频放置在应用程序文档目录中(通过查看视频文件路径),因此无法通过调用Bundle.main.path方法来获取路径。它用于检索应用程序本地分发包资源(放置在构建应用程序之前的文件)的路径。有关bundle类的更多信息

因此,您必须访问类似的文档目录。

let documentsPath = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first! //This piece of code will return path of document directory."
let videoPath = documentsPath.appendPathComponent("2018-Oct-31%2012:16:54output.mov").path //Append your video name so that complete path could be prepared and access path property.

现在您可以使用此视频路径并传递到URL

let video  = AVPlayer(url: URL(fileURLWithPath: videoPath))

我认为您有我的意思,希望它可以帮助您修复代码。

注意:我编写的代码段与Swift 4.0兼容,因此您可能需要在前两行中进行一些更改。

答案 1 :(得分:1)

尝试在类范围内声明let playerViewController = AVPlayerViewController(),而不是在方法范围内。我的猜测是,它被释放了。

Kamarshad的观点再次是正确的。您应该从fileManager而不是从应用程序捆绑中获取URL