Завершение работы приложения из-за нехватки памяти при создании 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];
Я надеюсь, что это поможет вам освободить память