AVCaptureSession, как отключить аудиоустройство ввода?

Вот как я пытаюсь настроить включение/выключение громкости микрофона с помощью кнопки:

//micBtn turn on/off
- (void)micTap:(UIButton*)sender
{
  if (sender.selected) {
    [self addAudioInput];
  } else {
    [self removeVideoInput:NO audioInput:YES];
  }
}

- (void)removeVideoInput:(BOOL)removeVI audioInput:(BOOL)removeAI
{
NSArray *inputs = self.session.inputs;

for (AVCaptureDeviceInput *input in inputs) {

    if (removeVI && [input.device hasMediaType:AVMediaTypeVideo]) {

        [self.session removeInput:input];
        continue;
    }

    if (removeAI && [input.device hasMediaType:AVMediaTypeAudio]) {

        [self.session removeInput:input];
    }
}

}


- (BOOL)addAudioInput //returns success of adding
{
NSArray *inputs = self.session.inputs;

BOOL alreadyHasAudioInput = NO;

for (AVCaptureDeviceInput *input in inputs) {
    if ([input.device hasMediaType:AVMediaTypeAudio]) {
        alreadyHasAudioInput = YES;

    }
}

if (alreadyHasAudioInput) {
    return NO;
}

AVCaptureDevice *audio = [AVCaptureDevice devices][kAudioType];

AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audio error:nil];

[self.session beginConfiguration];

[self.session addInput:audioInput];

[self.session commitConfiguration];

return YES;
 }

Когда я включаю/выключаю микрофон, запись прекращается с ошибкой:

  • (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)ошибка подключения:(NSError *)ошибка

В логах вижу @"ошибка: Запись остановлена".


person user3007870    schedule 19.11.2013    source источник


Ответы (1)


Вы должны начать свой метод «removeVideoInput:audioInput:» с «[self.session beginConfiguration]» и завершить его с помощью «[self.session commitConfiguration]», как вы сделали с добавлением аудиовхода. Это позволяет всем изменениям, которые вы делаете в сеансе, происходить атомарно.

person NES_4Life    schedule 20.03.2014
comment
Я завернул его в эти методы, и я все еще получаю ту же ошибку. - person Levi Nunnink; 16.03.2016