Как сохранить местоположение выбранного видео из PhotoLibrary - PullRequest
0 голосов
/ 20 июня 2019

При выборе видео из библиотеки фотографий iOS сжимает видео и сохраняет его в папке tmp /. Это местоположение возвращается как .mediaURL и используется для загрузки видео в AVPlayer. Я пытаюсь сохранить местоположение выбранного видео, чтобы его можно было воспроизвести позже, но я обнаружил, что tmp / url очищается в какой-то момент после закрытия приложения и его повторного открытия. Для музыки я могу сохранить «persistentID» для последующего получения песен. Мне не удалось найти хороший способ сохранить местоположение первоначально выбранного видео, чтобы его можно было воспроизвести позже, не выбрав его снова во время текущего сеанса. Ищу предложения.

Я использую Swift 5 для iOS.

Спасибо ...

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Когда вы используете imagePicker для выбора видео из галереи, вам нужно скопировать его где-нибудь, например, в папку с документами, чтобы иметь возможность постоянно ссылаться на него при повторном открытии приложения

0 голосов
/ 21 июня 2019

Это решение, которое я нашел:

Чтобы сохранить выбранное видео:

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)
...