Ошибка iOS13 AVAssetExportSession при попытке уменьшить размер видео на устройстве, но не на симуляторе

Я пытаюсь уменьшить размер видео, используя следующий метод:

func reduceVideoSize(_ originalVideoURL : String, completion: @escaping (_ data: Data?) ->()) {

        let VideoFilePath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("mergeVideo\(arc4random()%1000)d").appendingPathExtension("mp4").absoluteString
        if FileManager.default.fileExists(atPath: VideoFilePath) {
            do {
                try FileManager.default.removeItem(atPath: VideoFilePath)
            } catch { }
        }

        let savePathUrl =  URL(string: VideoFilePath)!

        let sourceAsset = AVURLAsset(url: URL(string: originalVideoURL)! , options: nil)

        let assetExport: AVAssetExportSession = AVAssetExportSession(asset: sourceAsset, presetName: AVAssetExportPresetMediumQuality)!
        assetExport.outputFileType = AVFileType.mov
        assetExport.outputURL = savePathUrl
        assetExport.exportAsynchronously { () -> Void in

            switch assetExport.status {
            case AVAssetExportSession.Status.completed:
                DispatchQueue.main.async(execute: {
                    do {
                        let videoData = try Data(contentsOf: savePathUrl, options: NSData.ReadingOptions())
                        //print("MB - \(Double(videoData.count) / (1024.0 * 1024.0))")
                        completion(videoData)
                    } catch {
                        print(error)
                        completion(nil)
                    }
                })
            case  AVAssetExportSession.Status.failed:
                print("failed \(String(describing: assetExport.error))")
            case AVAssetExportSession.Status.cancelled:
                print("cancelled \(String(describing: assetExport.error))")
            default:
                print("complete")
            }
        }
    }

Это отлично работало до iOS 13, и даже с iOS 13 отлично работает на симуляторе, но когда я пробую на своем устройстве iPhone 11 Pro Max, я получаю AVAssetExportSession.Status.failed с сообщением «Операция не может быть завершена»

Я попытался изменить качество на AVAssetExportPresetLowQuality и High quality, но с той же ошибкой.

Эта функция вызывается из делегата imagePicker:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let mediaType = info[.mediaType] as? NSString {
        if mediaType == kUTTypeMovie {

            // video
            if let videoURL = info[.mediaURL] as? URL {
                self.mediaHelper.reduceVideoSize(videoURL.absoluteString, completion: { (data) in
                    if data != nil {
                        self.videoData = data
                        self.sideImage = image
                    }
                })
            }
        }
    }

    picker.dismiss(animated: true) {
        self.layoutIfNeeded()
    }
}

person alionthego    schedule 20.03.2020    source источник
comment
Можете ли вы сделать AVAssetExportPresetPassthrough?   -  person matt    schedule 20.03.2020
comment
О, еще одна идея; У меня тоже были проблемы с временным каталогом. Можете ли вы вместо этого попробовать использовать каталог Documents?   -  person matt    schedule 20.03.2020
comment
просто попробовал это. та же ошибка. Я замечаю, что это происходит, когда я выбираю изображение из своей библиотеки, а не для изображений, которые я записываю с камеры.   -  person alionthego    schedule 20.03.2020
comment
Можете показать еще код? Откуда берется исходный URL-адрес видео? Тот факт, что это строка, очень подозрительный; возможно, вы неправильно формируете этот URL. Вы не должны использовать строки пути к файлу где-нибудь в своем коде.   -  person matt    schedule 20.03.2020
comment
это исходит от imagePicker. Я сейчас отредактирую   -  person alionthego    schedule 20.03.2020
comment
ты был прав. Я изменил код, чтобы использовать URL-адрес, а не строку, и отлично работает   -  person alionthego    schedule 20.03.2020
comment
пожалуйста, добавьте это в качестве ответа, и я отмечу это как правильное   -  person alionthego    schedule 20.03.2020