Захватывайте кадры с обеих камер (TelePhoto и WideAngle) одновременно

Можно получить кадр с телефотокамеры, WideAngleCamera или автоматически с помощью DualCamera:

//auto
let device = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back)
//telephoto
let device = AVCaptureDevice.default(.builtInTelephotoCamera, for: .video, position: .back)
//wideAngle
let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)

Но как получить кадры с TelephotoCamera и WideAngleCamera одновременно (используя устройства с двойная камера< /а>с).


Edit1
Попытка добавить 2 входа в
сеанс захвата:

captureSession?.addInput(input)
captureSession?.addInput(input2)

NSInvalidArgumentException: Multiple audio/video AVCaptureInputs are not currently supported

Edit2
Пытался включить isDualCameraDualPhotoDeliveryEnabled для захвата фото:< /с>

capturePhotoOutput?.isDualCameraDualPhotoDeliveryEnabled = true

NSInvalidArgumentException: Dual Camera dual photo delivery is not supported in this configuration

Но
isDualCameraDualPhotoDeliverySupported дает false на iPhone 8 Plus
может ли это быть причиной моей проблемы?


Все равно не повезло.


person Volodymyr Kulyk    schedule 13.02.2018    source источник


Ответы (1)


Да, это возможно.
Просто выберите правильную конфигурацию.


Устройство захвата должно быть builtInDualCamera:

let captureDevice = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back)

Настройте вывод фотозахвата после настройки сеанса захвата:

captureSession = AVCaptureSession()
captureSession?.sessionPreset = AVCaptureSession.Preset.photo
captureSession?.addInput(input)
captureSession?.addOutput(capturePhotoOutput!)

capturePhotoOutput?.isHighResolutionCaptureEnabled = true

capturePhotoOutput?.isDualCameraDualPhotoDeliveryEnabled = true


Перед съемкой настройте параметры фотографии:

let photoSettings = AVCapturePhotoSettings()
photoSettings.isAutoStillImageStabilizationEnabled = true
photoSettings.isHighResolutionPhotoEnabled = true
photoSettings.isAutoDualCameraFusionEnabled = false

photoSettings.isDualCameraDualPhotoDeliveryEnabled = true


Реализуйте AVCapturePhotoCaptureDelegate и переопределите следующий метод:

public func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)

Вы получите 2 photoOutput обратных вызова!

person Volodymyr Kulyk    schedule 14.02.2018
comment
У меня есть iPhone 7 plus, но функция capturePhotoOutput.isDualCameraDualPhotoDeliverySupported возвращает false, и если я проигнорирую это и просто установлю значение true, произойдет сбой с приложением Terminating из-за необработанного исключения «NSInvalidArgumentException», причина: «*** -[AVCapturePhotoOutput setDualCameraDualPhotoDeliveryEnabled: ] Двойная камера для доставки двух фотографий не поддерживается в этой конфигурации». Любая идея, что еще нужно настроить? Я считаю, что 7plus может делать двойные фотографии - person kawingkelvin; 14.12.2018
comment
@kawingkelvin вы проверили эту опцию? - person Volodymyr Kulyk; 14.12.2018