воспроизведение видео с MPMoviePlayerController во время записи с AudioQueue - PullRequest
2 голосов
/ 15 февраля 2012

Я занимаюсь разработкой приложения, в котором требуется воспроизводить видео с URL-адреса с помощью MPMoviePlayerController, получая при этом сэмплы аудио с помощью AudioQueue из микрофона для дальнейшего их анализа.

Проблема в том, что я не могу записать, когда начинается воспроизведение видео (а также когда оно заканчивается).Просто выборка звука останавливается.Вместо этого, если я отключаю воспроизведение видео, запись звука идет хорошо.Я попытался настроить AudioSession со свойством kAudioSessionProperty_OverrideCategoryMixWithOthers, но безуспешно (он возвращает ошибку).Более того, я думаю, что при использовании AudioQueue установка свойства в AudioSession бесполезна.Даже установка useApplicationAudioSession = NO для MPMoviePlayerController не помогает.

При этом основной код, в котором создается плеер:

   audioManager = [[AudioController alloc] init]; 
   //setting AudioQueue: audio buffer, sample rate, format ID (PCM), bits per channel 
   audioManager.delegate = self;
   [audioManager startAudioRecording];  //starts recording with AudioQueue
   self.playerVC = [[[MPMoviePlayerController alloc] init] autorelease];
   layerVC.view.frame = self.viewPlayer.bounds;
   [self.viewPlayer addSubview:playerVC.view];
   playerVC.useApplicationAudioSession = YES; //if NO nothing changes
   [playerVC setContentURL:[NSURL URLWithString:@"http://www......."]];
   [playerVC prepareToPlay];
   [playerVC play];

1 Ответ

2 голосов
/ 29 июня 2012

Ты на правильном пути.Сначала установите для kAudioSessionProperty_OverrideCategoryMixWithOther значение true.Это позволит звуковому миксу вашего приложения смешиваться со звуками других приложений.

UInt32 allowMixing = true;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);

После этого вам нужно будет установить MPMoviePlayerController, чтобы он не использовал AudioSession вашего приложения:

[yourMPMoviePlayerControllerInstance setUseApplicationAudioSession:NO];
...