0
我試圖將視頻轉換爲一系列圖像幀並將其保存到文件。然而,大約5幀後,我收到內存警告,應用程序因內存壓力不久而退出。圖像大小約10kb。我的代碼在下面,我做錯了什麼?保存圖像序列時的內存警告
在此先感謝,本。
-(void)framesFromVideo:(AVURLAsset *)asset{
NSArray *times = [self timeSequenceFromAsset:asset];
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *folderPath = rootPath;
__block int i=0;
generator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
generator.apertureMode = AVAssetImageGeneratorApertureModeCleanAperture;
generator.appliesPreferredTrackTransform = TRUE;
generator.requestedTimeToleranceBefore = kCMTimeZero;
generator.requestedTimeToleranceAfter = kCMTimeZero;
[generator generateCGImagesAsynchronouslyForTimes:times completionHandler:^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
if (result == AVAssetImageGeneratorSucceeded) {
NSString *imgPath = [folderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", i]];
[self writeImageRef:im toPath:imgPath];
}else if (result == AVAssetImageGeneratorFailed){
NSLog(@"Frame generation failed with error:%@", error);
}else if (result == AVAssetReaderStatusCancelled){
NSLog(@"Frame generation cancelled");
}
NSLog(@"Completed frame");
i++;
}];
}
嗨,你有沒有設法解決這個>? – Nil
這是一段時間以來,所以很難記得我做了什麼,但我已經將答案標記爲已接受,所以我認爲我遵循了這一點。我希望你自己解決它 – BenJacob
是的..結果generateCGImagesAsynchronouslyForTimes不是那種記憶效率。所以在我的情況下,我用'CVSampleBuffer'工作。我能夠獲取幀而不是實際的視頻錄製。爲我的目的模製框架,然後從他們製作視頻。感謝您的回覆:) – Nil