0

ビデオファイルを読んで処理しています。そのためのコードは、この質問のコードに基づいています。

 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更新は、処理全体の後でのみ実行されます。それを行う方法について何か提案はありますか?

4

1 に答える 1

1

メインスレッドがそのwhileループによってブロックされています。実行する必要があるのは、アクション メソッドが呼び出して進行状況を更新するNSTimerメイン スレッドの実行ループで繰り返し (たとえば、1/60 秒ごと) をスケジュールすることです。[movieReader status]

于 2013-03-28T05:46:06.687 に答える