Я пытался понять, что на самом деле происходит в течение нескольких недель, и я понятия не имею, почему я не могу продолжить воспроизведение после прерывания, так что, вероятно, вы, ребята, знаете ответ. AudioSessionSetActive (TRUE) всегда возвращает '! Cat', который является kAudioSessionIncompatibleCategory при повторной активации, если мое приложение воспроизводится в фоновом режиме, а я нахожусь в другом приложении. Хотя он работает нормально и продолжает воспроизведение, если я обнаружил прерывание во время нахождения в моем приложении.
Исходный код фактически содержит все вызовы AudioSession и AudioQueue, заключенные в макросы, которые выводят OSStatus, если это означает ошибку, но я удалил его для лучшей читаемости. Кроме того, [self pause] просто переключает паузу, поэтому в основном он вызывает AudioQueueStart (audioQueue, NULL) при upause, но, конечно, не работает, если AudioSession не удается.
Код инициализации аудиосессии:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
Код обработчика прерывания:
- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState
{
if(inInterruptionState == kAudioSessionBeginInterruption)
{
NSLog(@"+Interruption");
if(self.state == NX_STATE_PLAY)
{
[self pause];
AudioSessionSetActive(FALSE);
isPausedByInterruption = YES;
}
}
else if(inInterruptionState == kAudioSessionEndInterruption)
{
if(isPausedByInterruption)
{
AudioSessionSetActive(TRUE);
[self pause];
isPausedByInterruption = FALSE;
}
NSLog(@"-Interruption");
}
}
Исходный код этого стримера можно найти здесь https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m, если это поможет каким-то образом решить проблему ..