2016-12-07 195 views
1

我從庫中所有選定的視頻獲取URL,它工作的很好。請求AVAssetForVideo同步

但我注意到requestAVAssetForVideo是以異步的方式執行的。

早些時候,我指定requestImageForAsset在一個同步方式執行通過改變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

簡短的回答:第

龍答:

每蘋果documentation here在頁面的頂部:

請求表示視頻資產的內容AV Foundation對象 和狀態,異步加載