swift
1 2 func getURL(ofPhotoWith mPhasset: PHAsset, completionHandler : @escaping ((_ responseURL : URL?) -> Void)) { 3 4 if mPhasset.mediaType == .video { 5print(mPhasset) 6 let options: PHVideoRequestOptions = PHVideoRequestOptions() 7 options.deliveryMode = .highQualityFormat 8 options.version = .original 9 PHImageManager.default().requestAVAsset(forVideo: mPhasset, options: options, resultHandler: { (asset, audioMix, info) in 10 11 if let tokenStr = info?["PHImageFileSandboxExtensionTokenKey"] as? String { 12 13 let tokenKeys = tokenStr.components(separatedBy: ";") 14 let urlStr = tokenKeys.filter { $0.contains("/private/var/mobile/Media") }.first 15 16 if let urlStr = urlStr { 17 if let url = URL(string: urlStr) { 18 completionHandler(url) 19 } 20 } 21 } 22 23 24 if let urlAsset = asset as? AVURLAsset { 25 let localVideoUrl = urlAsset.url 26 completionHandler(localVideoUrl) 27 } else { 28 completionHandler(nil) 29 } 30 }) 31 } 32 33 } 34
###前提・実現したいこと
URLを取得したい
###発生している問題・エラーメッセージ
・デバッグしたところ
if let tokenStr = info?["PHImageFileSandboxExtensionTokenKey"] as? String {
まで行かない。
options.deliveryMode = .highQualityFormat options.version = .original
options.deliveryModeは全て試した。
ここまでは、行く。
<PHAsset: 0x10206d310> 44BA136D-E1E0-459B-8AEA-ACED90E93932/L0/001 mediaType=2/0, sourceType=1, (3840x2160), creationDate=2017-08-27 02:54:49 +0000, location=1, hidden=0, favorite=0
色々調べたのですが、力及ばず、、、
すみませんが、宜しくおねがいします。
#呼び出し元の追記
ViewController
1 func qb_imagePickerController(_ imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [Any]!) { 2 3 for asset in assets { 4 self.getURL(ofPhotoWith: asset as! PHAsset) 5 } 6 7}
QBImagePickerControllerを使用している。
よろしくお願いします。
if mPhasset.mediaType == .video { の中には入っているのでしょうか?【追記】その前に、getURL()は呼ばれているのでしょうか?
修正しました。よろしくお願いします。
deliveryModeを変えても同じでしょうか?あと、print(mPhasset)の出力を教えて下さい。
返事遅くなりすみません。更新しました。
「if let tokenStr = ...」まで行かないということは、PHImageManager.default().requestAVAsset()のハンドラの中に入らないということですよね?iPhoneで録った動画しか試していませんが、こちらでは問題なく動作しました。
おっしゃるとおり、PHImageManager.default().requestAVAssetのハンドラに入らないです。私も、iphoneて試してます。
iCloudアイテムである可能性はありますか?
icloudアイテムではないです。。。
「私も、iphoneて試してます」というのはiPhoneで録ったという意味でしょうか?違うのであればiPhoneで録った動画で試してみて下さい。あと、動画じゃなくて画像でも(コードを修正して)試してみて下さい。
iphoneで撮ったビデオです。画像のurlは取得出来ました。
回答1件
あなたの回答
tips
プレビュー