视频图像生成中的内存消耗问题 - AVAsset
Memory Consumption issue in the image generation from Video - AVAsset
我想创建 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,那么我的应用程序会崩溃,因为内存超出了设备的可用 space。
我的视频时长为 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)
}
尝试指定缩略图的maximumSize
。例如
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)
如果图像尺寸较大,则图像数组会消耗大量内存。
我想创建 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,那么我的应用程序会崩溃,因为内存超出了设备的可用 space。
我的视频时长为 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)
}
尝试指定缩略图的maximumSize
。例如
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)
如果图像尺寸较大,则图像数组会消耗大量内存。