UIImagePickerControllerとUIVideoEditorControllerを用いて、カメラロールから取得した動画をトリミングしたいです。
カメラロールから動画を取得し、トリミング画面で「Save」ボタンを押すとエラーが起きてしまいます。
なぜこのエラーが起きるのか、
どう記述すればいいのかアドバイスいただければ幸いです。
どうぞよろしくお願いいたします!!
コード
import UIKit import FirebaseAuth import Firebase import FirebaseStorage import WARangeSlider import Photos import SDWebImage class GameEditVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UITextViewDelegate, UIVideoEditorControllerDelegate{ ---省略----------- override func viewDidLoad() { super.viewDidLoad() ---省略----------- //写真系のアラート PHPhotoLibrary.requestAuthorization { (status) in switch(status){ case .authorized: print("authorized") case .denied: print("denied") case .notDetermined: print("notDetermined") case .restricted: print("restricted") default: break } } } func getImageByUrl(url: URL) -> UIImage{ do { let data = try Data(contentsOf: url) return UIImage(data: data)! } catch let err { print("Error : (err.localizedDescription)") } return UIImage() } ----省略---------- //撮影完了時------------------------------- func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { //画像のとき if let picker = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { indicator.startFullIndicator(view: view) ----省略---------- } //動画のとき if #available(iOS 11.0, *) { //PHAssetが取れればそれを使う if let asset = info[.phAsset] as? PHAsset { let manager = PHImageManager.default() manager.requestAVAsset(forVideo: asset, options: nil) {asset, audioMix, info in guard let asset = asset else { print("asset is nil") return } if let urlAsset = asset as? AVURLAsset { let videoPath = urlAsset.url.absoluteString DispatchQueue.main.async { let videoEditor: UIVideoEditorController = UIVideoEditorController() videoEditor.videoPath = videoPath videoEditor.videoMaximumDuration = 10 videoEditor.videoQuality = .typeMedium videoEditor.delegate = self picker.present(videoEditor, animated: true, completion: nil) } } } } } } //動画トリミング成功時 func videoEditorController(_ editor: UIVideoEditorController, didSaveEditedVideoToPath editedVideoPath: String) { print("編集ビデオパス: (editedVideoPath)") editor.dismiss(animated: true, completion: nil) } // 動画トリミング失敗時の処理 private func videoEditorController(editor: UIVideoEditorController, didFailWithError error: NSError) { print("error: (error)") } // 動画トリミングキャンセル時の処理 func videoEditorControllerDidCancel(_ editor: UIVideoEditorController) { } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) } }
起こるエラー
トリミング画面で「Save」を押すと以下のエラーがはかれます。
2019-10-19 18:02:00.607224+0900 AMU[6533:949699] [Generic] Video export failed for asset <AVURLAsset: 0x281c141c0, URL = file:///file:/var/mobile/Media/DCIM/104APPLE/IMG_4202.MOV>: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x28126e7f0 {Error Domain=NSOSStatusErrorDomain Code=-16979 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16979), NSURL=file:///file:/var/mobile/Media/DCIM/104APPLE/IMG_4202.MOV, NSLocalizedDescription=The operation could not be completed}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。