Dan*_*son 5 avfoundation ios avassetimagegenerator
我AVAssetImageGenerator用来从视频的最后一帧创建图像。这通常可以正常工作,但copyCGImageAtTime有时会因错误而失败
NSLocalizedDescription = "Cannot Open";
NSLocalizedFailureReason = "This media cannot be used.";
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-12431";
Run Code Online (Sandbox Code Playgroud)
我正在验证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);
}
Run Code Online (Sandbox Code Playgroud)
这似乎有关,但是并不能解决我的问题。
无法保证您的资产的视频轨道存在于[asset duration]。它的持续时间可能比整个资产短。由于您将容差设置为kCMTimeZero唯一可能的解决方案就是失败。
编辑:澄清一下,当您的资产的音轨比视频轨道稍长时,就会出现问题。
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |