我使用图像阵列创建视频。如果我从图库中选择了40多个图像,则会显示错误:终止应用由于内存压力我使用CVPixelBufferRef创建视频。
我写信创建视频
for (int i=0; i<[_slideshowArray count]; i++) {
UIImage *img=[_slideshowArray objectAtIndex:i];
buffer = [self pixelBufferFromCGImage:[img CGImage] size:imageSize];
BOOL append_ok = NO;
int j = 0;
while (!append_ok && j < 9999) {
if (adaptor.assetWriterInput.readyForMoreMediaData) {
// NSLog(@"Processing video frame (%d,%lu)",frameCount,(unsigned long)[imageArray count]);
CMTime frameTime = CMTimeMake(frameCount*frameDuration,(int32_t) fps);
append_ok = [adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];
if(!append_ok){
NSError *error = videoWriter.error;
if(error!=nil) {
NSLog(@"Unresolved error %@,%@.", error, [error userInfo]);
}
}
}
else {
printf("adaptor not ready %d, %d\n", frameCount, j);
[NSThread sleepForTimeInterval:0.2];
}
j++;
}
if (!append_ok) {
printf("error appending image %d times %d\n, with error.", frameCount, j);
}
frameCount++;
}
[videoWriterInput markAsFinished];
[videoWriter endSessionAtSourceTime:tm];
[videoWriter finishWritingWithCompletionHandler:^{
NSLog(@"Write Ended");
}];
在这段代码中_slideShowArray是我的数组,它是UIImage的数组。 我把下面的仪器截图。
当我创建视频时,此时内存将增加,否则为9或10 MB。
注意:我使用ARC。
创建视频后,它不会释放内存。
我发现这个项目中的内存泄漏请帮助我..
答案 0 :(得分:0)
您不会在代码中释放缓冲区。 现在您插入以下代码。
CVPixelBufferPoolRef bufferPool = adaptor.pixelBufferPool;
NSParameterAssert(bufferPool != NULL);
CVPixelBufferRelease(buffer);
此代码插入
append_ok = [adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];
我希望这会帮助你释放内存