Завершение работы приложения из-за нехватки памяти при создании Video ios

Я создаю видео, используя массив изображений. Если я выбираю более 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 МБ.

Примечание: я использую ARC.

После создания видео оно не освобождает память.

Я обнаружил утечки памяти в этом проекте, пожалуйста, помогите мне..

Изображение утечки памяти

1 ответ

Вы не освобождаете свой буфер в вашем коде. Теперь вы вставляете код ниже.

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

Этот код вставьте под

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

Я надеюсь, что это поможет вам освободить память

Другие вопросы по тегам