我正在阅读视频文件并进行处理。它的代码基于this问题中的代码。
AVURLAsset * asset = [AVURLAsset URLAssetWithURL:url options:nil];
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:
^{
dispatch_async(dispatch_get_main_queue(),
^{
AVAssetTrack * videoTrack = nil;
NSArray * tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
if ([tracks count] == 1)
{
//some code here
[movieReader startReading];
while ([movieReader status] == AVAssetReaderStatusReading)
{
// reading the video code here
}
}
});
});
我需要在处理每个帧时更新UI,以指示处理帧的进度。我在while循环内的UI上插入了一个按钮,但是,只有在整个视频处理完成后才会更新UI。实际上,在完成处理程序块中执行的任何UI更新仅在整个处理之后发生。有关如何做的任何建议吗?
答案 0 :(得分:1)
您的主线程被while
循环阻止。您需要做的是在主线程的运行循环上安排重复NSTimer
(例如,每1/60秒),其操作方法调用[movieReader status]
并更新进度。