Я пытаюсь создать эскиз изображения из видео в определенный временный код. Я использую AVPlayer и это метод, который я написал:Создание эскизов из AVPlayer ios
-(UIImageView *) generateCommentThumbnail: (CMTime) now{
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:videoAsset];
gen.appliesPreferredTrackTransform = YES;
NSError *error = nil;
CMTime actualTime;
[gen setRequestedTimeToleranceAfter:kCMTimeZero];
[gen setRequestedTimeToleranceBefore:kCMTimeZero];
CGImageRef image = [gen copyCGImageAtTime:now actualTime:&actualTime error:&error];
UIImage *thumb = [[UIImage alloc] initWithCGImage:image];
UIImageView *iv = [[UIImageView alloc] initWithImage:thumb];
NSLog(@"%f , %f",CMTimeGetSeconds(now),CMTimeGetSeconds(actualTime));
NSLog(@"%@",error);
return iv;
}
, чтобы получить точное изображение кадра, я использовал setsetRequestedTimeToleranceBefore: kCMTimeZero и setRequestedTimeToleranceAfter: kCMTimeZero, но с тех пор большинство из раз. Я получаю эту ошибку:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed"
Хотя, иногда это нормально работает. Когда я печатаю, при получении этой ошибки «actualTime» я вижу, что это «inf» или «nan» или просто очень большое число.
Кто-нибудь наткнулся на это раньше?
Спасибо, Yonathan
Возможно, проблема исходит от вызывающего абонента? где «сейчас» рассчитывается? – Emanuel
«Сейчас» - это просто myPlayer.currentItem.currentTime, время, когда я хочу захватить изображение. Я должен также упомянуть, что перед добавлением setRequestedTolerance он работал нормально, но не достаточно точно –
Я использовал MPPlayer и генерировал палец ногтей, это хорошо для вас –