![](/img/trans.png)
[英]How to share NSData or phasset video using Facebook iOS SDK 4.0 FBSDKShareDialog
[英]iOS : How to convert a video PHAsset to NSData
我想將存儲在 iPhone 上的視頻放到我的 Google 雲端硬盤中。 我已經完成了圖像,但是對於視頻,這是另一個問題......
對於圖像,沒問題,我使用以下方法將我的資產轉換為 NSData:
data = UIImagePNGRepresentation(result!)!
我把圖像放到我的驅動器上!
但是,對於視頻,我嘗試了很多不同的方法,但不,我不能。
我能怎么做 ?
非常感謝 !
我做的 !
這是解決方案:
PHCachingImageManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [NSObject : AnyObject]?) in
dispatch_async(dispatch_get_main_queue(), {
let asset = asset as? AVURLAsset
var data = NSData(contentsOfURL: asset.URL)
})
})
之后,你就有了好的 NSData 變量,你可以用它把你的視頻放到雲端!
如果你錯過 option.isNetworkAccessAllowed = true 那么你會得到 url 屬的錯誤
private let options: PHVideoRequestOptions = PHVideoRequestOptions()
option.isNetworkAccessAllowed = true
PHImageManager.default().requestAVAsset(-------
為 Swift 5 更新
這里可以使用PHImageManager
或PHCachingImageManager
PHImageManager.default().requestAVAsset(forVideo: asset,
options: nil) { (asset, audioMix, info) in
if
let asset = asset as? AVURLAsset,
let data = NSData(contentsOf: asset.url) {
//do smth with data
}
}
}
同步獲取圖像/視頻 Swift 5 + 緩存
extension PHAsset {
func getImage() -> UIImage? {
let manager = PHCachingImageManager.default
let option = PHImageRequestOptions()
option.isSynchronous = true
var img: UIImage? = nil
manager().requestImage(for: self, targetSize: CGSize(width: self.pixelWidth, height: self.pixelHeight), contentMode: .aspectFit, options: nil, resultHandler: {(result, info) -> Void in
img = result!
})
return img
}
func getVideo() -> NSData? {
let manager = PHCachingImageManager.default
let option = PHImageRequestOptions()
option.isSynchronous = true
var resultData: NSData? = nil
manager().requestAVAsset(forVideo: self, options: nil) { (asset, audioMix, info) in
if let asset = asset as? AVURLAsset, let data = NSData(contentsOf: asset.url) {
resultData = data
}
}
return resultData
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.