我可以使用自定义录像机像下面那样获取输出文件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()
})
}
}
答案 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