生成视频截图代码:
DispatchQueue.global().async { //获取网络视频 let url = self.videoImgUrlData[i] let videoURL = URL(string: url) let avAsset = AVURLAsset.init(url: videoURL!, options: nil) ///生成视频截图 let generator = AVAssetImageGenerator(asset: avAsset) generator.appliesPreferredTrackTransform = true generator.apertureMode = AVAssetImageGenerator.ApertureMode.encodedPixels let time = CMTimeMakeWithSeconds(0.0, preferredTimescale: 600) var actualTime:CMTime = CMTimeMake(value: 10, timescale: 10) var imageRef:CGImage? var imageUIs:UIImage? do{ imageRef = try generator.copyCGImage(at: time, actualTime: &actualTime) if let cgimage = imageRef{ imageUIs = UIImage(cgImage: imageRef!) } print("应该数据请求成功了\(imageRef)") }catch let err as NSError{ imageUIs = UIImage(named: "cover.jpg") print("出现错误!\(err)") } //在主线程中显示截图 DispatchQueue.main.async { self.videoImgData.append(imageUIs!) self.reloadData() } }
还有一点是关于CGImage与UIImage之间的转换:
如果是UIImage转为CGImage用到了强转,一般这里会遇到错误,其他的方法尚未找到
//imageRef是CGImage imageRef = UIImage(named: "cover.jpg") as! CGImage
//imageRef是CGImage let imageUIs = UIImage(cgImage: imageRef!)
由于我写的项目是把视频截图放在collectionview里,所以,在以下函数里设置cell数目的时候,设置为视频截图的数目,不然会出现数组越界。当然,也可以有其他的处理方法。
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { }
以上
来源:博客园
作者:僧侣行书
链接:https://www.cnblogs.com/runningGY/p/11801681.html