Подтвердить что ты не робот

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)
4b9b3361

Ответ 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)