заблокировать видеозапись UIImagePickerController

#objective-c

#objective-c

Вопрос:

У меня есть приложение, в котором я пытаюсь записывать голосовые и видеозаписи. Я могу сделать одно или другое, но не оба, и проблема, похоже, в моей AVAudioSession. Для того чтобы записать и воспроизвести аудио, я использую следующий код:

 NSError *error = nil;

audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), amp;audioRouteOverride);

[audioSession setActive:YES error:amp;error];
  

Для записи видео я использую UIImagePickerController:

 - (BOOL)startCameraControllerFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate
{
    NSLog(@"AAVC startCameraControllerFromViewController");

    if (([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) || (delegate == nil) || (controller == nil))
    {
        return NO;
    }

    cameraUI = [[UIImagePickerController alloc] init]; 
    [cameraUI setSourceType:UIImagePickerControllerSourceTypeCamera];
    [cameraUI setAllowsEditing:NO];
    [cameraUI setDelegate:delegate];

    NSLog(@"cameraUI retainCount = %i", [cameraUI retainCount]);

    AccessAndrewAppDelegate *AppDelegate = [[UIApplication sharedApplication] delegate];

    if (AppDelegate.isMovie)
    {
        [cameraUI setMediaTypes:[[NSArray alloc] initWithObjects:(NSString *) kUTTypeMovie, nil]];
        [cameraUI setVideoQuality:UIImagePickerControllerQualityTypeLow];
        AppDelegate.isMovie = NO;
    }
    else
    {
        [cameraUI setMediaTypes:[[NSArray alloc] initWithObjects:(NSString *) kUTTypeImage, nil]];
    }

    [controller presentModalViewController:cameraUI animated:YES];

    return YES;
}
  

Что происходит, так это то, что при использовании кода AVAudioSession и попытке записать видео затвор откроется, а затем закроется и зависнет. Если я закомментирую конфигурацию AVAudioSession, видео записывается; однако запись голоса не будет воспроизводиться должным образом. Есть идеи?

Ответ №1:

Проблема решена. Это была проблема с моей AVAudioSession в делегате приложения. Необходимо добавить некоторую логику if для перенастройки аудиосессии, если камера была запущена для записи фильмов