2015-10-07 3 views
3

Я хотел бы зафиксировать стабилизированные изображения в своем приложении, но я не нашел требуемую конфигурацию для ее получения.iOS: Как активировать стабилизацию изображения на AVCaptureSession?

Это мой код:

let frontCamera = cameraWithPosition(AVCaptureDevicePosition.Front) 

let captureSession = AVCaptureSession() 

if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) { 
    captureSession.sessionPreset = AVCaptureSessionPresetPhoto 
    print("Session preset has been set ") 
} 
else { 
    print("Session preset couldn't be set ") 
} 

var error: NSError? 
var input: AVCaptureDeviceInput! 
do { 
    input = try AVCaptureDeviceInput(device: frontCamera) 
} catch let error1 as NSError { 
    error = error1 
    input = nil 
} 

if error == nil && captureSession!.canAddInput(input) { 
    captureSession.addInput(input) 
    let stillImageOutput = AVCaptureStillImageOutput() 
    stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG] 
    if stillImageOutput.stillImageStabilizationSupported { 
     stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true 
     print("Stabilization supported ") 
    } 
    else { 
     print("Stabilization is not supported ") 
    } 
} 

Так сессия предварительно настроены правильно, но стабилизация изображения не поддерживается.

Что можно сделать для поддержки стабилизации изображения?


** вторая ПОПЫТКА ПОСЛЕ РИТМИЧЕСКОГО FISTMAN ОТВЕТА: **

я переключился на заднюю камеру, я добавил вывод в captureSession перед установкой его, и я до сих пор не есть мое изображение стабилизировалось:

let backCamera = cameraWithPosition(AVCaptureDevicePosition.Back) 

    let captureSession = AVCaptureSession() 

    if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) { 
     captureSession.sessionPreset = AVCaptureSessionPresetPhoto 
     print("Session preset has been set ") 
    } 
    else { 
     print("Session preset couldn't be set ") 
    } 


    var error: NSError? 
    var input: AVCaptureDeviceInput! 
    do { 
     input = try AVCaptureDeviceInput(device: backCamera) 
    } catch let error1 as NSError { 
     error = error1 
     input = nil 
    } 

    if error == nil && captureSession.canAddInput(input) { 
     captureSession.addInput(input) 
     let stillImageOutput = AVCaptureStillImageOutput() 
     stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG] 


     if captureSession.canAddOutput(stillImageOutput) { 
      captureSession.addOutput(stillImageOutput) 

      if stillImageOutput.stillImageStabilizationSupported == true { 
       stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true 
       print("Stabilization supported ") 
      } 
      else { 
       print("Stabilization is not supported ") 
      } 

      if stillImageOutput.stillImageStabilizationActive == true { 
       print("Stabilization is active ") 
      } 
      else { 
       print("Stabilization is not active ") 
      } 
     } 
    } 

результат:
стабилизации не поддерживается
стабилизации не активен

ответ

2

Во-первых, вы забыли добавить свой AVCaptureStillImageOutput в AVCaptureSession. Вы должны сделать это, прежде чем запрашивать его возможности!

captureSession.addOutput(stillImageOutput) 

Во-вторых, neither Digital nor Optical Image Stabilisation are supported on the front camera.

В-третьих, на задней камеры, на поддерживаемых платформах (цифровой, как представляется, будет доступна на 5S вверх) AVCaptureStillImageOutput automaticallyEnablesStillImageStabilizationWhenAvailable по умолчанию YES, так что если вы переключитесь на заднюю камеру - тогда вы уже будет использовать некоторую форму изображения стабилизация.

NB: Оптическая стабилизация изображения is only available on the 6+ and 6S+ (хотя связанный технолог еще не обновлен для моделей 6S).

+0

Я следил за вашими рекомендациями, и он все еще не работает. (Я отредактировал вопрос) – Cherif

+0

На каком устройстве вы используете код? –

+0

Я запускаю его на iPhone 5 – Cherif