ios - precio - iPhone 7 Plus-Cámara dual AVFoundation
iphone a1784 caracteristicas (2)
Estoy investigando esto activamente en este momento, pero ahora que el iPhone 7 Plus tiene un sistema de cámara dual, ¿AVFoundation le permitirá manejar los cuadros de video de cada cámara específica simultáneamente?
Estoy pensando / esperando que sea capaz de manejar la salida de dos instancias de AVCaptureDevice
al mismo tiempo dada una determinada posición.
En la documentación actualizada de AVFoundation
( AVCaptureDeviceType ) hay nuevos tipos de dispositivos: builtInWideAngleCamera
y builtInTelephotoCamera
. Por lo tanto, debería ser posible crear múltiples sesiones de captura y obtener la retroalimentación de ambos al mismo tiempo.
Solo puede agregar una cámara a la vez a AVCaptureSession. Por ejemplo, puede cambiar entre la cámara frontal y la trasera, pero no usar ambas al mismo tiempo. Es lo mismo con las dos cámaras traseras en el 7 Plus, tienes que elegir cualquiera. Sin embargo, hay una pequeña diferencia, ya que también puede llamar a una "cámara dúo" que combina las imágenes de ambas cámaras cuando hace zoom. Pero eso solo está disponible para fotografías y solo obtendrá una imagen / búfer de captura. Para el video tienes que elegir cualquiera de las cámaras.
Para elegir la cámara, puede utilizar la nueva sesión AVCaptureDeviceDiscoverySession. Para utilizar la cámara dúo:
@property (nonatomic) AVCaptureDevice *backCamera;
@property (nonatomic) AVCaptureDeviceInput *backCameraInput;
if([AVCaptureDeviceDiscoverySession class]){
NSArray *allTypes = @[AVCaptureDeviceTypeBuiltInDuoCamera, AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ];
AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:allTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack];
for(AVCaptureDevice *device in discoverySession.devices) {
if(device.deviceType== AVCaptureDeviceTypeBuiltInDuoCamera){
self.backCamera = device;
self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error];
}
}
}
if(!self.backCamera){
self.backCamera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error];
}
Usar cámara ancha y tele individual.
@property (nonatomic) AVCaptureDevice *backCamera;
@property (nonatomic) AVCaptureDeviceInput *backCameraInput;
@property (nonatomic) AVCaptureDevice *teleCamera;
@property (nonatomic) AVCaptureDeviceInput *teleCameraInput;
if([AVCaptureDeviceDiscoverySession class]){
NSArray *allTypes = @[AVCaptureDeviceTypeBuiltInDuoCamera, AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ];
AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:allTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack];
for(AVCaptureDevice *device in discoverySession.devices) {
if(device.deviceType==AVCaptureDeviceTypeBuiltInWideAngleCamera){
self.backCamera = device;
self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error];
}
if(device.deviceType==AVCaptureDeviceTypeBuiltInTelephotoCamera){
self.teleCamera = device;
self.teleCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.teleCamera error:&error];
}
}
}
if(!self.backCamera){
self.backCamera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error];
}
Si no lo hace o conserva su código anterior, solo utilizará la cámara ancha incluso si hace zoom.
EDITAR: En iOS 11 hay un nuevo AVCapturePhotoSettings llamado dualCameraDualPhotoDeliveryEnabled. Le permite tomar dos imágenes fijas simultáneamente, sin embargo, no hay transmisión / video.