swift
1import UIKit 2import AVFoundation 3import Photos 4class ViewController: UIViewController { 5 6 var videoPlayerView = AVPlayerLayer() 7 var videoPlayer = AVPlayer() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 let urldata = NSURL(string: "https://video.twimg.com/tweet_video/DHYvduMUQAE-DLc.mp4") 12 13 let avAsset = AVURLAsset(url: urldata! as URL) 14 // AVPlayerに再生させるアイテムを生成. 15 let playerItem = AVPlayerItem(asset: avAsset) 16 // AVPlayerを生成. 17 self.videoPlayer = AVPlayer(playerItem: playerItem) 18 19 self.videoPlayerView.frame = CGRect(x:0, y:0, width:self.view.bounds.width, height:self.view.bounds.height - 44 ) 20 21 22 // UIViewのレイヤーをAVPlayerLayerにする. 23 let layer = self.videoPlayerView 24 layer.videoGravity = AVLayerVideoGravityResizeAspect 25 layer.player = self.videoPlayer 26 27 // レイヤーを追加する. 28 self.view.layer.addSublayer(layer) 29 self.videoPlayer.play() 30 31 32 let exportPath: NSString = NSTemporaryDirectory().appendingFormat("video.mov") 33 let exportUrl: NSURL = NSURL.init(fileURLWithPath: exportPath as String) 34 print(exportUrl) 35 let exporter = AVAssetExportSession(asset: avAsset, presetName: AVAssetExportPresetHighestQuality) 36 exporter?.outputURL = exportUrl as URL 37 exporter?.shouldOptimizeForNetworkUse = true 38 exporter?.outputFileType = AVFileTypeQuickTimeMovie 39 40 exporter?.exportAsynchronously(completionHandler: { 41 if exporter?.status == AVAssetExportSessionStatus.completed { 42 PHPhotoLibrary.shared().performChanges({ 43 PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: exportUrl as URL) 44 }) { saved, error in 45 if saved { 46 let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert) 47 let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 48 alertController.addAction(defaultAction) 49 self.present(alertController, animated: true, completion: nil) 50 } else { 51 print("エラー") 52 } 53 } 54 } else { 55 print(exporter?.error.debugDescription) 56 } 57 }) 58 } 59} 60
AVURLAsset で読み込んだ動画をフォトライブラリに保存したいのでこのコードを書いたのですがエラーと出力されフォトライブラリへの保存がうまくいきません。
エラー内容 Optional("Optional(Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo={NSUnderlyingError=0x6000000595f0 {Error Domain=NSOSStatusErrorDomain Code=-12109 "(null)"}, NSLocalizedFailureReason=The operation is not supported for this media., NSLocalizedDescription=Operation Stopped})")
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。