我刚刚开始使用 AVFoundation 从 iPhone 的摄像头捕获视频。我已经成功地分别从前置或后置摄像头进行捕捉。然而,当我尝试同时从两者捕获时遇到了麻烦:
bool
addDevice(AVCaptureSession *session, bool front)
{
AVCaptureDevicePosition position = front? AVCaptureDevicePositionFront: AVCaptureDevicePositionBack;
AVCaptureDevice *device;
AVCaptureDeviceInput *input;
NSError *error;
device = [AVCaptureDevice defaultDeviceWithDeviceType:AVCaptureDeviceTypeBuiltinWideAngleCamera mediaType:AVMediaTypeVideo position:position];
if ( !device ) {
NSLog(@"Cannot create %s device", front? "front" : "back");
return false;
}
input = [AVCaptureDeviceInput deviceInputWithDevice:device error&error];
if ( !input ) {
NSLog(@"Cannot create input for %s device: %@", front? "front" : "back", [error localizedDescription]);
return false;
}
if ( ![session canAddInput:input] ) {
NSLog(@"Cannot add input for %s device", front? "front" : "back");
return false;
}
[session addInput:input];
return true;
}
AVCaptureSession *
startSession()
{
AVCaptureMultiCamSession *session;
session = [AVCaptureMultiCamSession new];
if ( !addDevice(session, true) || !addDevice(session, false) ) {
return nil;
}
// add output
[session startRunning];
return session;
}
前端设备添加成功,但后端设备
[session canAddInput:input]
添加失败。正如我之前提到的,我可以从任一设备单独拍照。
我尝试颠倒添加摄像头的顺序,然后无法添加前置摄像头。因此,问题似乎确实是添加多个输入。
并非所有设备都支持多摄像头会话(即使
AVCaptureMultiCamSession
仍然可以实例化)。
multiCamSupported
类属性确定它们是否受支持:
if ( !AVCaptureMultiCamSession.multiCamSupported ) {
// can't add multiple inputs
}