Dau*_*kas 7 objective-c uitableview ios avasset avassetimagegenerator
我正在尝试创建一个视频库.
要显示我正在使用的视频UICollectionView.每个UICollectionViewCell都有一个背景与视频缩略图.要生成视频缩略图,我使用的是逻辑方法:
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0,15);
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime timeRequested, CGImageRef image, CMTime timeActual, AVAssetImageGeneratorResult result, NSError *error)
{
NSLog(@"handler^()");
if (result == AVAssetImageGeneratorSucceeded)
{
thumbnail = [UIImage imageWithCGImage: image];
success(thumbnail);
}
else
{
failure(error);
}
};
CGSize maximumSize = CGSizeMake(CLIPBOARD_COLLECTION_VIEW_CELL_WIDTH, CLIPBOARD_COLLECTION_VIEW_CELL_HEIGHT);
generator.maximumSize = maximumSize;
NSLog(@"generateCGImagesAsynchronouslyForTimes:");
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler];
Run Code Online (Sandbox Code Playgroud)
我注意到generateCGImagesAsynchronouslyForTimes它不能完全异步工作.此方法调用之间有一个时间空间.当我加载表格视图单元格时,这会导致很大的延迟.如果我评论行[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler],则没有可见的滞后(也没有图像).
我该如何解决这个性能问题?
AVAssetImageGeneratorCompletionHandler不保证在主线程上调用该块:
\n\n\n与 AV Foundation 并行编程
\n\n来自 AV Foundation\xe2\x80\x94 的调出块、键值观察器和通知处理程序\xe2\x80\x94 的调用不保证在任何特定线程或队列上进行。相反,AV Foundation 在执行其内部任务的线程或队列上调用这些处理程序。您负责测试调用处理程序的线程或队列是否适合您要执行的任务。如果它\xe2\x80\x99s不是(例如,如果您想更新用户界面并且标注不在主线程上),则必须将任务的执行重定向到您识别的安全线程或队列,或者您为此目的而创建的。
\n
调用successand failurewith可以dispatch_async解决问题吗?
dispatch_async(dispatch_get_main_queue(), ^{\n if (success) {\n success();\n }\n)};\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |