iPhone 7 Plus – AVFoundation双摄像头

目前我正在积极研究这个问题,但是现在iPhone 7 Plus具有双摄像头系统,AVFoundation能够让您同时处理每个特定摄像头的video帧吗?

我想/我希望能够处理来自两个AVCaptureDevice实例的输出,同时给定一个位置。

在更新的AVFoundation文档( AVCaptureDeviceType )中有新的设备types: builtInWideAngleCamerabuiltInTelephotoCamera 。 因此,应该可以创build多个捕获会话,并同时从两个捕获会话获得反馈。

您只能将一个摄像机添加到AVCaptureSession中。 例如,您可以在正面和背面相机之间切换,但不能同时使用两者。 7 Plus的两个后置摄像头也是一样,你必须select。 但是,有一个小的区别,因为你也可以调用一个“双相机”,当你缩放时合并来自两个相机的图像。 但是,这只适用于静态照片,你只会得到一个图像/捕获缓冲区。 对于video,你必须select相机。

要select相机,您可以使用新的AVCaptureDeviceDiscoverySession。 要使用双相机:

 @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]; } 

单独使用广angular和远摄相机

 @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]; } 

如果不这样做,或者保留旧代码,即使放大,也只能使用广angular相机。

编辑:在iOS 11中有新的AVCapturePhotoSettings称为dualCameraDualPhotoDeliveryEnabled。 它可以让你同时拍摄两张静止图像,但是,没有stream媒体/video。