我需要连续播放存储在临时目录中的视频。
func setVideo(url vid: String!) {
let directory = NSTemporaryDirectory()
let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("tempMovie\(Date().timeIntervalSince1970)").appendingPathExtension("mp4")
let tempFile = NSURL.fileURL(withPathComponents: [directory])
let file = vid.components(separatedBy: ".")
guard let path = Bundle.main.path(forResource: "\(tempURL)", ofType:file[2]) else {
debugPrint( "\(file.joined(separator: ".")) not found with path: \(file[0] + "." + file[1])")
return
}
let player = AVPlayer(url: URL(fileURLWithPath: path))
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.videoView.layer.addSublayer(playerLayer)
player.play()
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
self.player?.seek(to: kCMTimeZero)
self.player?.play()
}
})
}
视频位置和文件网址为:
file:///private/var/mobile/Containers/Data/Application/E7D12401-F147-4905-83BE-72909F91E004/tmp/tempMovie1501672791.33525.mp4
连续循环部分来自之前的项目但是我似乎无法将临时存储的视频加载到播放器内部。我已经尝试手动获取临时目录,但它没有工作。
答案 0 :(得分:2)
将视频从tmp移动到Documents目录对我有用。
您就是这样做的:
let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let destinationURL = documentsDirectoryURL.appendingPathComponent("filename.fileExtension")
do {
try FileManager.default.moveItem(at: previousTempLocation, to: destinationURL)
} catch let error as NSError { print(error.localizedDescription)}
let player = AVPlayer(url: destinationURL)
Apple在/ tmp目录
上说这个使用此目录编写不需要的临时文件 在您的应用发布之间保持不变。您的应用应删除文件 从这个目录不再需要它们;然而 当您的应用未运行时,系统可能会清除此目录。
Apple还建议将此用于用户数据
将用户数据放入Documents /。用户数据通常包括任何文件 您可能希望向用户公开您可能想要用户的任何内容 创建,导入,删除或编辑。视频和音频应用甚至可能包含 用户已下载的文件,以便稍后观看或收听。