// スレッド待機状態になっても問題ないよう、サブスレッド上で処理する
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (NSString* filePath in self.filePaths) {
// AVURLAsset生成
AVURLAsset* asset = [AVURLAsset assetWithURL:[NSURL filePath]];
// エクスポート
AVAssetExportSession *exportSession = [[[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough] autorelease];
// ディスパッチセマフォを宣言する。初期値は0
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[exportSession exportAsynchronouslyWithCompletionHandler:^(void) {
switch (exportSession.status) {
case AVAssetExportSessionStatusCompleted:
// エクスポート成功
// セマフォによるスレッド停止を終了する
dispatch_semaphore_signal(semaphore);
break;
case AVAssetExportSessionStatusFailed:
// エクスポート失敗
// セマフォによるスレッド停止を終了する
dispatch_semaphore_signal(semaphore);
break;
case AVAssetExportSessionStatusCancelled:
// エクスポートキャンセル
// セマフォによるスレッド停止を終了する
dispatch_semaphore_signal(semaphore);
break;
default:
break;
}
}];
// セマフォによるスレッド停止
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_release(semaphore);
}
}
});
コメントする