我目前正在积极研究这个问题,但是现在iPhone 7 Plus有双摄像头系统,AVFoundation是否允许您同时处理每个特定摄像头的视频帧?
我认为/希望我能够在特定位置同时处理两个AVCaptureDevice
实例的输出。
我目前正在积极研究这个问题,但是现在iPhone 7 Plus有双摄像头系统,AVFoundation是否允许您同时处理每个特定摄像头的视频帧?
我认为/希望我能够在特定位置同时处理两个AVCaptureDevice
实例的输出。
在AVCaptureSession中一次只能添加一个摄像头。例如,您可以在前置和后置摄像头之间切换,但不能同时使用两个。7 Plus上的两个后置摄像头也是如此,您必须选择一个。但是,有一个小区别,因为您还可以调用“双摄像头”,当您缩放时合并两个摄像头的图像。但这仅适用于静态照片,并且您将只获得一个图像/捕获缓冲区。对于视频,您必须选择其中一个摄像头。
要选择相机,请使用新的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];
}
单独使用广角和长焦摄像头
@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];
}
如果你不这样做,或者保留你的旧代码,即使你进行缩放,你也只能使用广角摄像头。
编辑:在iOS 11中,有一个名为dualCameraDualPhotoDeliveryEnabled的新AVCapturePhotoSettings。它允许您同时拍摄两张静态图像,但没有流媒体/视频。
在更新的 AVFoundation
文档中(AVCaptureDeviceType),新增了两种设备类型:builtInWideAngleCamera
和 builtInTelephotoCamera
。因此,可以创建多个捕获会话并同时获取它们的反馈。