如何从PhotoLibrary存储所选视频的位置

时间:2019-06-20 20:42:54

标签: ios swift uiimagepickercontroller

从照片库中选择视频时,iOS会压缩视频并将其存储在tmp /文件夹中。该位置将作为“ .mediaURL”返回,并用于将视频加载到AVPlayer中。我正在尝试保存所选视频的位置,以便以后可以播放,但是我发现在关闭应用程序并重新打开后,tmp / url在某个时候被清除了。对于音乐,我可以存储“ persistentID”以在以后检索歌曲。我还没有找到一种方法来保留最初选择的视频的位置,因此以后可以重播而不必在当前会话中再次选择它。寻找建议。

我正在使用iOS的Swift 5。

谢谢...

2 个答案:

答案 0 :(得分:1)

使用imagePicker从图库中选择视频时,需要将其复制到文档文件夹中的某处,以便能够在再次打开应用程序时永久引用该视频

答案 1 :(得分:0)

这是我找到的解决方案:

要保存选定的视频,请执行以下操作:

func saveVideoToDirectory(videoUrl: NSURL) {
    let videoData = NSData(contentsOf: videoUrl as URL)
    let path = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    let newPath = path.appendingPathComponent("/backgroundVideo.mp4")
    do {
        try videoData?.write(to: newPath)
        let movieData = NSKeyedArchiver.archivedData(withRootObject: newPath)
        UserDefaults.standard.set(movieData, forKey: "movie")
        //print("movie url: ", newPath)
    } catch {
        print(error)
    }
}

获取视频:

let movieData = UserDefaults.standard.object(forKey: "movie") as? Data
let movieUrl = NSKeyedUnarchiver.unarchiveObject(with: data) as! URL
//search for current documents path       
let docPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

let videoUrl = URL(fileURLWithPath: docPath.appendingFormat("/backgroundVideo.mp4"))

let playerItem = AVPlayerItem(url: videoUrl as URL)