11

我想将存储在 iPhone 上的视频放到我的 Google Drive 中。我已经处理了图像,但是对于视频,这是另一个问题......

对于图像,没问题,我使用以下方法将资产转换为 NSData:

   data = UIImagePNGRepresentation(result!)!

我把图像放到我的驱动器上!

但是,对于视频,我尝试了许多不同的方法,但不,我不能。

我能怎么做 ?

非常感谢 !

4

4 回答 4

24

我做的 !

这是解决方案:

    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 变量,你可以用它把你的视频放到云端!

于 2015-08-14T08:27:26.730 回答
1

为 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
         }
      }
                                                        
}
于 2020-07-10T09:32:13.810 回答
1

请添加波纹管解决方案它对我的工作

如果你错过 option.isNetworkAccessAllowed = true 那么你会得到错误的一般 url

private let options: PHVideoRequestOptions = PHVideoRequestOptions()

option.isNetworkAccessAllowed = true 

PHImageManager.default().requestAVAsset(-------
于 2019-09-18T14:36:55.977 回答
0

同步获取图像/视频 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
    }
}
于 2021-07-30T09:43:32.403 回答