由于内存压力而终止应用程序创建视频ios时

时间:2014-09-17 11:40:09

标签: ios memory memory-management avassetwriter

我使用图像阵列创建视频。如果我从图库中选择了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。

enter image description here

创建视频后,它不会释放内存。

我发现这个项目中的内存泄漏请帮助我..

Memory Leak Image

1 个答案:

答案 0 :(得分:0)

您不会在代码中释放缓冲区。 现在您插入以下代码。

CVPixelBufferPoolRef bufferPool = adaptor.pixelBufferPool;
            NSParameterAssert(bufferPool != NULL);
            CVPixelBufferRelease(buffer);

此代码插入

        append_ok = [adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];

我希望这会帮助你释放内存