我正在尝试在iPhone 5s上以最高分辨率(AVCaptureSessionPresetPhoto)捕获多张照片。我尝试使用以下代码:
dispatch_semaphore_t sync = dispatch_semaphore_create(0);
while( [self isBurstModeEnabled] == YES )
{
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
if (imageSampleBuffer != NULL)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
NSString *videoThumbPath = [NSString
stringWithFormat:@"%@/img%d.png",
burstFolderPath,
index];
[imageData writeToFile:videoThumbPath atomically:YES];
if( 0 == index )
{
[self NSLogPrint:[NSString stringWithFormat:@"Created photo at %@",videoThumbPath]];
}
}
dispatch_semaphore_signal(sync);
}];
dispatch_semaphore_wait(sync, DISPATCH_TIME_FOREVER);
}
使用这段代码,我每秒大约能获取2张照片,远远达不到本机相机应用的连拍模式的性能。我做错了什么?此外,我尝试使用上面的代码而没有使用信号量,但在这种情况下我遇到了一些奇怪的行为,有些照片会缺失(img0.png、img1.png和img3.png存在,但img2.png缺失)。使用第二种方法性能会更好,但仍然达不到本机应用的表现(在我的测试中,相机应用每秒大约可以拍摄8.4张照片)。
AVCaptureSessionPresetPhoto
没有这个问题。(https://www.iphonelife.com/blog/87/why-you-may-want-disable-image-stabilization-during-video-recording)。在连拍模式下,逻辑上看来也不会使用图像稳定... - VinzzzAVCaptureSessionPresetPhoto
不能用于拍摄视频,但是在适当的硬件上,您可以通过手动设置activeFormat
而不使用预设来以相同的分辨率拍摄视频。在iOS 7.x中,预设非常可选。 - WildakerAVCaptureConnection enablesVideoStabilizationWhenAvailable
)实际上仅适用于16:9格式。关于activeFormat
,您手动设置的格式必须是-AVcaptureDevice formats
之一。 - Vinzzz