Я не могу получить видео, выбранное из галереи swift

#swift #uiimagepickercontroller

#swift #uiimagepickercontroller

Вопрос:

Мой код здесь

 @IBAction func openVideo(_ sender: Any) {
        //selectVideo(delegate: self, sourceType: .savedPhotosAlbum)
        let mediaUI = UIImagePickerController()
        mediaUI.sourceType = .savedPhotosAlbum
        mediaUI.mediaTypes = [kUTTypeMovie as String]
        mediaUI.allowsEditing = true
        mediaUI.delegate = self
        self.present(mediaUI, animated: true, completion: nil)
        
    }
 

В этой части я выбираю видео.

 extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    func processVideo(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]){
        
        let url = info[UIImagePickerController.InfoKey.mediaURL] as! URL
        print("hey") 
        self.dismiss(animated: true) {
            let player = AVPlayer(url: url)
            let vcPlayer = AVPlayerViewController()
            vcPlayer.player = player
            self.present(vcPlayer, animated: true, completion: nil)
            
         
        }
        
    }
}
 

Что я делаю не так?

Я не могу получить какую-либо печать в функции processVideo. Я получаю эту ошибку после выбора видео из галереи.

 "Error returned from daemon: Error Domain=com.apple.accounts Code=7 "(null)""
 

Ответ №1:

Вам нужно установить для таких настроек, как this или in plist.

 switch AVCaptureDevice.authorizationStatus(for: .video) {
    case .authorized: // The user has previously granted access to the camera.
        self.setupCaptureSession()
    
    case .notDetermined: // The user has not yet been asked for camera access.
        AVCaptureDevice.requestAccess(for: .video) { granted in
            if granted {
                self.setupCaptureSession()
            }
        }
    
    case .denied: // The user has previously denied access.
        return

    case .restricted: // The user can't grant access due to restrictions.
        return
}
 

Документация

Комментарии:

1. Я установил plist для запроса разрешения камеры и для галереи раньше. Я записываю фильм и сохраняю его. Но когда я пытаюсь выбрать что-то из галереи, ничего не получается. Я больше не получаю сообщение об ошибке, не знаю почему.

Ответ №2:

Решена проблема путем изменения имени функции processvideo на imagePickerController. Похоже, что имя очень важно при делегировании функций. Я этого не заметил.

Совет для создания этой функции делегирования напишите didfinish, и вы получите предпочитаемую функцию с именем imagePickerController, используйте ее.