2015-03-17 2 views
1
let VideoDevice = CameraWithPosition(AVCaptureDevicePosition.Back) // not working 

let VideoDevice = CameraWithPosition(AVCaptureDevicePosition.Front) // working 

if let stillOutput = self.stillImageOutput { 

       if let videoConnection = stillOutput.connectionWithMediaType(AVMediaTypeVideo) 
       { 
        println("stillOutput \(stillOutput)") 

         stillOutput.captureStillImageAsynchronouslyFromConnection(videoConnection){ 
          (imageSampleBuffer : CMSampleBuffer!, _) in 

          println("imageSampleBuffer \(imageSampleBuffer)") //prints nil for back camera, works for front camera 

...more code 

Я могу захватить изображение с передней камерой, но тот же процесс не работает для задней камеры моего Iphone, Есть ли какие-либо другие настройки для обоего камер?Проблемы с captureStillImageAsynchronouslyFromConnection для задней камеры

Прием imageSampleBuffer в ноль для задней камеры ..

журнал ошибок:

Ошибка домена = AVFoundationErrorDomain Code = -11800 "Операция не может быть завершена" UserInfo = 0x1704682c0 {NSUnderlyingError = 0x170255d20 «Операция не может быть завершена. (OSStatus ошибка -16803.)», NSLocalizedFailureReason = произошла неизвестная ошибка (-16803), NSLocalizedDescription = операция не может быть завершена}

+0

Удалось ли вам решить вашу проблему? – OXXY

ответ

0

Попробуйте

NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
for (AVCaptureDevice *device in videoDevices) 
{ 
    NSLog(device.description); 
} 

, чтобы увидеть, если вы получили сообщение, как это:

AVCaptureFigVideoDevice: hex[Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0] 

У меня была проблема, когда я не мог использовать камеру, и он не будет отображаться в списке устройств. Тогда я заметил, что даже стандартное приложение для камеры не будет работать. Поэтому я просто перезарядил свой iPad, и он решил мою проблему. Я думаю, что во время тестирования моего приложения мне удалось каким-то образом изменить что-то важное.

+0

странный .. но не мой случай – BaSha

1

Проверить «... больше кода»

frontcamera возвратит изображение быстрее, так что если вы остановить просмотр или внести другие изменения в videoConnection непосредственно после captureStillImageAsynchronouslyFromConnection может работать на передней камеры, но не для спины камера.

+0

Я проверял ваше предположение, но ничего не изменилось ... – OXXY

-1

Мое решение: captureStillImageAsynchronouslyFromConnection есть на capturePhoto метод.

Добавить:

if(!CMSampleBufferIsValid(imageSampleBuffer)) 
{ 
     [self capturePhoto]; 
     return; 
} 

Метод кажется, что:

- (void) capturePhoto { 

     ...SOME CODE... 

     [_stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) 
     { 
      if(!CMSampleBufferIsValid(imageSampleBuffer))//Check if capture failed 
      { 
       [self capturePhoto]; 
       return; 
      } 

      ...SOME CODE... 

     }]; 
    } 
Смежные вопросы