【发布时间】:2017-02-17 12:22:48
【问题描述】:
我正在使用AVAssetImageGenerator 从视频的最后一帧创建图像。这通常工作正常,但时不时地copyCGImageAtTime 失败并出现错误
NSLocalizedDescription = "Cannot Open";
NSLocalizedFailureReason = "This media cannot be used.";
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-12431";
我正在验证 AVAsset 不是 nil 并且我直接从资产中提取 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);
}
This 好像是相关的,但是并没有解决我的问题。
【问题讨论】:
-
您是否有始终如一地重现此内容的电影文件?
-
我在生成视频的时候只调用了一次这个方法。我使用它通过添加冻结最后一帧几秒钟来扩展视频,然后使用 AVMutableComposition 生成一个新视频
-
媒体文件看起来太大
标签: ios avfoundation avassetimagegenerator