Не удалось запустить аудио-очередь - PullRequest
3 голосов
/ 22 марта 2010

Я занимаюсь разработкой проекта, в котором есть потоковое аудио и воспроизведение аудио из файла. Для потокового аудио я использую AudioStreamer и для воспроизведения из файла я использую avaudioplayer. И потоковая передача, и воспроизведение отлично работают, если приложение не прерывается телефонным звонком или смс. Но когда звонок / смс приходит после отклонения вызова, когда я пытаюсь возобновить потоковую передачу, я получаю сообщение об ошибке «Ошибка запуска аудио-очереди». Это происходит только тогда, когда я использовал avaudioplayer хотя бы один раз и после этого использовал потоковую передачу. Когда объект avaudioplayer не создан, в этом сценарии не возникает проблем с возобновлением потоковой передачи после прекращения вызова. Я думаю, что что-то не так с audioqueue.

Помощь очень ценится.

Обновление:

Код, который я сейчас использую, приведен ниже

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) {

    // This callback, being outside the implementation block, needs a reference 
    //to the AudioPlayer object
    AudioStreamer *player = (AudioStreamer *)[streamerArray objectAtIndex:0];

    if (interruptionState == kAudioSessionBeginInterruption) {
        NSLog(@"kAudioSessionBeginInterruption 1");

            [player pause];
            interruptedOnPlayback = YES;


    }       else if (interruptionState == kAudioSessionEndInterruption) {
            NSLog(@"kAudioSessionEndInterruption 2");
              AudioSessionSetActive( true );


        [player start];
        interruptedOnPlayback = NO;

    }
}

как вы могли заметить, я использую AudioSessionSetActive (true), он работает нормально, пока объект avaudioplayer не создан. Проблема возникает только тогда, когда я использую стример после создания объекта Avaudioplayer и если приложение прерывается телефонным звонком
или смс я получаю сообщение об ошибке Не удалось запустить аудио-очередь?!

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

У меня была та же проблема, более подробно сообщение об ошибке было "hwiu" (аппаратное обеспечение используется) или 1752656245. Но я использовал MPMoviePlayerController до запуска audioStreamer.Мне нужно было только остановить MPMoviePlayerController ([moviePlayer stop]), прежде чем выпустить его методом moviePlayBackDidFinish.остановка должна выпустить некоторые аппаратные компоненты.

Надеюсь, это поможет

0 голосов
/ 22 марта 2010

Вы должны активировать аудио сеанс самостоятельно после прерывания.

Я не знаю AVAudioPlayer, но если бы вы использовали службы аудио-очереди напрямую, вы могли бы использовать что-то вроде этого в качестве обработчика прерываний:

void interruptionListener(void * inClientData, UInt32 inInterruptionState) {
  if (inInterruptionState == kAudioSessionEndInterruption) {
    OSStatus rc = AudioSessionSetActive(true);
    if (rc) {
      NSLog(@"AudioSessionSetActive(true) returned %d", rc);
    }
  }
}

и передайте это в вызов AudioSessionInitialize ().

Вы также можете перезапустить сеанс:

-(void)startPlaying {
  OSStatus rc = AudioQueueStart(queue, NULL);
  if (rc) {
    NSLog(@"startPlaying AudioQueueStart returned %d.", rc);

    if (rc == kAudioSessionNotActiveError) {
      rc = AudioSessionSetActive(true);
      if (rc) {
        NSLog(@"startPlaying - AudioSessionSetActive(true) returned %.d", rc);
      } else {
        NSLog(@"startPlaying - restarted Audio Session");
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...