我想创建Photos
类视频视图,在页脚中我会有一秒钟的视频帧。
为此我使用此代码
var imgs : [UIImage] = []
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: video)
assetImgGenerate.appliesPreferredTrackTransform = true
let duration = Int(CMTimeGetSeconds(video.duration))
for i in 0 ... duration {
if let img = generateFrames(assetImgGenerate : assetImgGenerate , fromTime: Float64(i))
{
imgs.append(img)
}
代码运行正常。我得到了我想要的相同结果。
现在问题是 - 如果视频大小超过50秒并且我正在提取uiimage,那么随着内存超出设备的可用空间,我的应用程序崩溃。
我的视频是120到200秒。在内存管理方面,有什么可以更好的方法。 (我不能对图像进行延迟加载,因为我希望图像在屏幕上预先加载。)
修改
func generateFrames(assetImgGenerate : AVAssetImageGenerator, fromTime:Float64) -> UIImage? {
let time : CMTime = CMTimeMakeWithSeconds(fromTime, 1)
var img: CGImage?
img = try? assetImgGenerate.copyCGImage(at:time, actualTime: nil)
}
答案 0 :(得分:1)
尝试指定缩略图图像的maximumSize
。 e.g。
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: video)
assetImgGenerate.appliesPreferredTrackTransform = true
// Here specify the size in which you want to fit the image.
assetImgGenerate.maximumSize = CGSize(width: 100, height: 100)
如果图像尺寸很大,那就是耗费大量内存的图像数组。