我正在使用AV通过我的应用程序录制视频,并且我有一个按钮可以切换摄像机视图为前置或后置,后置是默认值。从后置切换到前置可正常工作,但是从前置切换回后置会导致应用程序崩溃。
- (IBAction)btnSwapCamerasClicked:(id)sender {
//Change camera source
if(session)
{
//Indicate that some changes will be made to the session
[session beginConfiguration];
//Remove existing input
AVCaptureInput* currentCameraInput = [session.inputs objectAtIndex:0];
[session removeInput:currentCameraInput];
//Get new input
AVCaptureDevice *newCamera = nil;
if(((AVCaptureDeviceInput*)currentCameraInput).device.position == AVCaptureDevicePositionBack)
{
newCamera = [self cameraWithPosition:AVCaptureDevicePositionFront];
}
else
{
newCamera = [self cameraWithPosition:AVCaptureDevicePositionBack];
}
//Add input to session
NSError *err = nil;
AVCaptureDeviceInput *newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:newCamera error:&err];
if(!newVideoInput || err)
{
NSLog(@"Error creating capture device input: %@", err.localizedDescription);
}
else
{
//THIS IS THE SPOT THAT CRASHES.
[session addInput:newVideoInput];
}
//Commit all the configuration changes at once
[session commitConfiguration];
}
}
在 [session addInput:newVideoInput]; 下崩溃,我收到了以下错误信息:
2015-03-03 11:25:59.566 The SWAT App Beta[1769:365194] * 终止应用程序,原因是未捕获的异常 'NSInvalidArgumentException',原因:'* 不支持多个音频/视频AVCaptureInputs。' *** 第一个调用堆栈: (0x185c002d4 0x1975c80e4 0x1843ad39c 0x1843accd4 0x10004ac14 0x18a818fb4 0x18a80201c 0x18a818950 0x18a8185dc 0x18a811a74 0x18a7e57f0 0x18aa85274 0x18a7e3d04 0x185bb8250 0x185bb74f4 0x185bb55a4 0x185ae1404 0x18f4eb6fc 0x18a84a2b4 0x10004bb70 0x197c6ea08) libc++abi.dylib:终止类型为NSException的未捕获异常
我不确定为什么似乎有多个输入,因为在我列出的代码中,我删除了旧输入,并且它对于前后摄像头都可以正常工作。不知道为什么前后照相会导致应用程序崩溃。
有什么想法吗?