2016-12-07 4 views
1

Я получаю URL-адрес от всех выбранных видео в галерее, он работает хорошо.Сделать запросAVAssetForVideo синхронным

Но я заметил, что requestAVAssetForVideo выполнен в Асинхронный способ.

Ранее я указывал requestImageForAsset быть выполнен в Synchronous образом путем изменения options:nil по options:option

PHImageRequestOptions *option = [PHImageRequestOptions new]; 
     option.synchronous = YES; 

И это работает как шарм, но он не работает так же формы с requestAVAssetForVideo

Есть ли способ выполнить requestAVAssetForVideo в Синхронный способ?

[[PHImageManager defaultManager] requestAVAssetForVideo:lAsset 
                 options:nil 
                resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) { 
      NSURL *url = (NSURL *)[[(AVURLAsset *)avAsset URL] fileReferenceURL]; 
      NSLog(@"url = %@", [url absoluteString]); 
      NSLog(@"url = %@", [url relativePath]); 
     }]; 
+0

этого API занимает много времени. любые другие альтернативные варианты? –

ответ

0

Ну, как CodeBender говорит там нет, но, это способ построения синхронной версии:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

PHVideoRequestOptions *option = [PHVideoRequestOptions new]; 
__block AVAsset *resultAsset; 


[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset 
               options:option 
              resultHandler:^(AVAsset * avasset, AVAudioMix * audioMix, NSDictionary * info) 
      { 
       resultAsset = avasset; 
       dispatch_semaphore_signal(semaphore); 
      }]; 

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 
// We synchronously have the asset 
[self doSomethingWithAsset:resultAsset]; 
1

Короткий ответ: Нет

Длинный ответ:

Per Apple, documentation here в верхней части страницы:

просит объекты Фонда AV, представляющие содержания видео актива и состояние, которое должно быть загружено асинхронно.