我試圖捕捉到關於iPhone 5S最高分辨率(AVCaptureSessionPresetPhoto)多張照片。我試着用下面的代碼:IOS/iPhone照片連拍模式API
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張照片)。
我不是尋找一個準確的問題,但我想知道爲什麼有些捕獲格式爲「全屏幕「,以及爲什麼有些人有不同比例(4:3 vs 16:9)......這似乎與圖像穩定有關,這就解釋了爲什麼'AVCaptureSessionPresetPhoto'沒有這個問題。 (https://www.iphonelife.com/blog/87/why-you-may-want-disable-image-stabilization-during-video-recording)。看起來合乎邏輯的是,在突發模式下,圖像穩定也不被使用... – Vinzzz
唯一的16:9格式是那些HD,根據定義它是16:9格式。其他的都是全畫幅,IIRC。 'AVCaptureSessionPresetPhoto'不能用於拍攝視頻,但是您可以*在適當的硬件上以相同的分辨率拍攝視頻,方法是手動設置「activeFormat」,而不是使用預設。使用iOS 7.x時,預設值非常可選。 – Wildaker
哪一種說法是相同的:)傳感器是4:3,所以任何不是4:3的輸出格式實際上都會從傳感器獲取數據。在16的情況下:9的格式,從傳感器的額外的像素可以被用來做一些圖像穩定,並且該特徵('AVCaptureConnection enablesVideoStabilizationWhenAvailable')實際上只是可用於16:9的格式。關於'activeFormat',你手動設置的一個必須是'-AVcaptureDevice格式' – Vinzzz