我正在使用AVAssetImageGenerator
来从视频的最后一帧创建图像。这通常很好用,但是偶尔会发生copyCGImageAtTime
失败的情况,错误信息如下:
NSLocalizedDescription = "Cannot Open";
NSLocalizedFailureReason = "This media cannot be used.";
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-12431";
我正在确认AVAsset不为空,并直接从媒体中提取CMTime,所以我不明白为什么这一直在发生。只有在尝试获取最后一帧时才会发生这种情况,如果我使用kCMTimeZero
,似乎就可以工作了。
- (void)getLastFrameFromAsset:(AVAsset *)asset completionHandler:(void (^)(UIImage *image))completion
{
NSAssert(asset, @"Tried to generate last frame from nil asset");
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.requestedTimeToleranceBefore = kCMTimeZero;
gen.requestedTimeToleranceAfter = kCMTimeZero;
gen.appliesPreferredTrackTransform = YES;
CMTime time = [asset duration];
NSError *error = nil;
CMTime actualTime;
CGImageRef imageRef = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];
NSAssert(image, @"Failed at generating image from asset's last frame");
completion(image);
CGImageRelease(imageRef);
}
这个似乎与我的问题有关,但没有解决我的问题。