Swift: сохранить видеоролик из NSURL в рулон камеры пользователя
У меня есть переменная videoURL
типа NSURL.
Если я назову println(videoURL)
, он вернет что-то вроде этого:
http://files.parsetfss.com/d540f71f-video.mp4
У меня есть кнопка, которая должна взять этот видеоролик и сохранить видео в рулоне камеры пользователя.
Лучшее, что я сделал, это:
UISaveVideoAtPathToSavedPhotosAlbum(videoPath: String!, completionTarget: AnyObject!, completionSelector: Selector, contextInfo: UnsafeMutablePointer<Void>)
Хотя я даже не уверен, что это сработает или нет, я не могу понять, как преобразовать videoFile:NSURL
в videoPath
.
Любая помощь приветствуется.
Edit:
Не удалось выполнить следующее:
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, self, nil, nil)
Ответы
Ответ 1
AssetsLibrary устарела
1: импортировать фотографии
import Photos
2: используйте этот код, чтобы сохранить видеоролик из url в библиотеку камеры.
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(nsUrlToYourVideo)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .Alert)
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alertController.addAction(defaultAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
Swift 3
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: urlToYourVideo)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
Ответ 2
Принятый ответ больше не работает с Swift 3.0 и iOS 10.
Сначала вам нужно установить следующее разрешение в файле plist приложения:
Конфиденциальность - Использование библиотеки фотографий
Укажите строку, которая будет представлена пользователю, объясняя, почему вы запрашиваете разрешение.
Затем импортируйте фотографии:
import Photos
Наконец, вот обновленный код для Swift 3.0:
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL)
}) { saved, error in
if saved {
let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
Ответ 3
Чтобы сохранить видеоролик из NSURL в рулон камеры пользователя
func video(videoPath: NSString, didFinishSavingWithError error: NSError?, contextInfo info: AnyObject)
{
if let _ = error {
print("Error,Video failed to save")
}else{
print("Successfully,Video was saved")
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let conversationField = self.conversation {
if (mediaType?.isEqual((kUTTypeMovie as NSString) as String))!
{
let theVideoURL: URL? = (info[UIImagePickerControllerMediaURL] as? URL)
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum((theVideoURL?.path)!))
{
UISaveVideoAtPathToSavedPhotosAlbum((theVideoURL?.path)!, self, #selector(ConversationDetailsViewController.video(videoPath:didFinishSavingWithError:contextInfo:)), nil)
}
}
self.dismiss(animated: true, completion: nil)
}
Ссылка из:: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-swift
Ответ 4
устарел с iOS 9
1: import AssetsLibrary
import AssetsLibrary
2: Используйте этот код, чтобы сохранить видеоролик из url в библиотеку камеры.
ALAssetsLibrary().writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: nil)