У меня проблема с комбинацией OpenAl и MPMoviePlayerController.
Я зарегистрировал AudioInterruptionLister в процессе установки OpenAl.Когда я запускаю видео, слушатель получает AudioListenerInterruptionStarts, но когда фильм заканчивается, я не получаю триггер AudioListenerInterruptionEnd.
// Register callback for audio interrupts
AudioSessionInitialize(NULL, NULL, &OpenALInterruptionListener, this);
Слушатель
void OpenALInterruptionListener(void *inClientData, UInt32 inInterruptionState)
{
OpenAL *oal = (OpenAL *) inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption)
{
oal->MakeContextNull();
AudioSessionSetActive(false);
}
else if (inInterruptionState == kAudioSessionEndInterruption)
{
AudioSessionSetActive(true);
oal->MakeContextCurrent();
}
}
Моим решением до сих пор былосделайте контекст недействительным перед началом фильма и сделайте его текущим после окончания фильма.Это приводит к проблеме, заключающейся в том, что, если пользователь очень быстро пропускает фильм, касаясь экрана, я делаю контекст текущим и немного задерживаюсь, получая триггер AudioListenerInterruptionStart, который снова устанавливает мой контекст на ноль.
В iOбольше 3.1 Я могу установить useApplicationAudioSession = NO, и слушатель никогда не станет триггером начала или конца.Но на iOS ниже 3.2 эта опция не существует.
Но мой главный вопрос: почему я никогда не получаю триггер AudioListenerInterruptionEnd.
Спасибо за помощь, с наилучшими пожеланиями Georg