Получаете ли вы журналы ошибок?Если нет, вам нужно исправить приведенный выше код и посмотреть, что они говорят.Какую версию AVCam вы используете?Недавно они обновили проект до версии 1.2, которая намного эффективнее и использует блоки.
По моему опыту, вам не нужно создавать и воссоздавать сеанс, вы можете просто оставить его включенным.Может быть, вам нужно структурировать свое приложение немного по-другому.О чем конкретно ваше приложение?Может быть, мы можем помочь вам.Если ваше приложение сосредоточено вокруг камеры, то легче оставить сеанс включенным, если вы просто снимаете видео модально, то, возможно, использование AVCam является излишним.
Ваша настоящая проблема, на мой взгляд, звучит так, как будто она с AVCaptureDeviceInput,Загрузите оригинальный пакет AVCam и посмотрите, изменили ли вы какие-либо сохраняемые значения или заявления о безопасности.Если есть какой-либо другой код, пожалуйста, напишите.
ОБНОВЛЕНИЕ: Можете ли вы изменить
} else if (error) {
NSLog(@"%@",[error localizedDescription]);
}
на
} if (error) {
NSLog(@"%@",[error localizedDescription]);
}
и сообщить мне, если есть ошибка?
Кроме того, прежде чем выпускать контроллер представления, которому принадлежит сеанс, обязательно остановите сеанс и установите для менеджера захвата значение nil.
ОБНОВЛЕНИЕ 2: Попробуйте этот код переключения.Это то, что я использовал.AVCamMirringMode представляет собой следующую структуру:
enum {
AVCamMirroringOff = 1,
AVCamMirroringOn = 2,
AVCamMirroringAuto = 3
};
typedef NSInteger AVCamMirroringMode;
- (BOOL) toggleCamera
{
BOOL success = NO;
if ([self cameraCount] > 1) {
NSError *error;
AVCaptureDeviceInput *newVideoInput;
AVCaptureDevicePosition position = [[videoInput device] position];
BOOL mirror;
if (position == AVCaptureDevicePositionBack){
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self frontFacingCamera] error:&error];
switch ([self mirroringMode]) {
case AVCamMirroringOff:
mirror = NO;
break;
case AVCamMirroringOn:
mirror = YES;
break;
case AVCamMirroringAuto:
default:
mirror = YES;
break;
}
}
else if (position == AVCaptureDevicePositionFront){
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self backFacingCamera] error:&error];
switch ([self mirroringMode]) {
case AVCamMirroringOff:
mirror = NO;
break;
case AVCamMirroringOn:
mirror = YES;
break;
case AVCamMirroringAuto:
default:
mirror = NO;
break;
}
}
else
goto bail;
if (newVideoInput != nil) {
[[self session] beginConfiguration];
[[self session] removeInput:[self videoInput]];
if ([[self session] canAddInput:newVideoInput]) {
[[self session] addInput:newVideoInput];
AVCaptureConnection *connection = [AVCamUtilities connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self stillImageOutput] connections]];
if ([connection isVideoMirroringSupported]) {
[connection setVideoMirrored:mirror];
}
[self setVideoInput:newVideoInput];
} else {
[[self session] addInput:[self videoInput]];
}
[[self session] commitConfiguration];
success = YES;
[newVideoInput release];
} else if (error) {
if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) {
[[self delegate] captureManager:self didFailWithError:error];
}
}
}
bail:
return success;
}