Próbowałem dowiedzieć się, co tak naprawdę dzieje się od tygodni i nie mam pojęcia, dlaczego nie mogę kontynuować odtwarzania po przerwie, więc pewnie znacie odpowiedź. AudioSessionSetActive (TRUE) zawsze zwraca "! Cat", który jest kAudioSessionIncompatibleCategory podczas ponownej aktywacji, jeśli moja aplikacja gra w tle i jestem w innej aplikacji. Mimo że działa dobrze i kontynuuje odtwarzanie, jeśli podczas korzystania z aplikacji złapię przerwę.AudioSessionSetActive kończy się niepowodzeniem po przerwie
Oryginalny kod posiada wszystkie wywołania AudioSession i AudioQueue owinięte w makra, które wyświetlają OSStatus, jeśli oznacza to błąd, ale usunąłem go dla lepszej czytelności. Ponadto, [self pause] po prostu przełącza pauzę, więc w zasadzie wywołuje funkcję AudioQueueStart (audioQueue, NULL) w momencie wznowienia, ale to nie działa w przypadku niepowodzenia AudioSession.
audio kod inicjalizacji sesji:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
Przerwanie kod obsługi:
- (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");
}
}
Ten kod źródłowy streamer można znaleźć tutaj https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m jeśli to będzie jakoś pomóc rozwiązać problem ..
Zgodnie z oczekiwaniami, nie działa i daje mi ten sam błąd w bardziej modny sposób: "Nie udało się ustawić kategorii na AVAudioSession. Nie można ukończyć operacji (błąd OSStatus 560161140.)". Spróbuję przeanalizować rioInterruptionListener .. Myślę, że właśnie przegapiłem jakąś małą rzecz. – Andy
potem wierzę, że najpierw musisz spróbować tego w odpowiedzi na moje pytanie. Ale tutaj będzie zbyt ciężko, aby uzyskać dokładny problem. Musisz określić, gdzie "dokładnie" chcesz zmodyfikować kod. było to dla mnie wyzwaniem, kiedy zrobiłem ... Najlepsze szczęście dla ciebie ... Mam nadzieję, że rozwiążesz ten problem ... – DShah