【问题标题】:iOS : How to convert a video PHAsset to NSDataiOS:如何将视频 PHAsset 转换为 NSData
【发布时间】:2015-11-07 09:42:01
【问题描述】:

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

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

   data = UIImagePNGRepresentation(result!)!

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

但是,对于视频,我尝试了很多不同的方法,但不,我做不到。

我该怎么办?

非常感谢!

【问题讨论】:

标签: ios swift video cloud phasset


【解决方案1】:

我做到了!

这是解决方案:

    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 变量,您可以使用它来将您的视频放到云端!

【讨论】:

【解决方案2】:

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

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

private let options: PHVideoRequestOptions = PHVideoRequestOptions()

option.isNetworkAccessAllowed = true 

PHImageManager.default().requestAVAsset(-------

【讨论】:

  • 谢谢你救了我的命
【解决方案3】:

为 Swift 5 更新

这里可以使用PHImageManagerPHCachingImageManager

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
         }
      }
                                                        
}

【讨论】:

    【解决方案4】:

    同步获取图像/视频 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多