Ios 使请求视频同步
我从gallery中所有选定的视频中获取URL,效果很好 但是我注意到,Ios 使请求视频同步,ios,objective-c,asynchronous,Ios,Objective C,Asynchronous,我从gallery中所有选定的视频中获取URL,效果很好 但是我注意到,requestAVAssetForVideo是以异步方式执行的 之前我通过options:option更改options:nil指定了requestImageForAsset以同步方式执行 PHImageRequestOptions *option = [PHImageRequestOptions new]; option.synchronous = YES; 这就像一个符咒,但与requestAVAsse
requestAVAssetForVideo
是以异步方式执行的
之前我通过options:option
更改options:nil
指定了requestImageForAsset
以同步方式执行
PHImageRequestOptions *option = [PHImageRequestOptions new];
option.synchronous = YES;
这就像一个符咒,但与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]);
}];
简短回答:没有
长答覆:
根据页面顶部的苹果:
请求表示视频资产内容的AV基础对象 和状态,异步加载
正如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];
这个API需要很长时间。还有其他选择吗?