Ошибка обработки автоматического прерывания ObjectAL

Я играл с телефонными звонками во время игры (SpriteKit), чтобы проверить прерывания. Я использую пример из документации ObjectAL под названием: "Использование объектов OpenAL и OALAudioTrack" .

Итак, я позволяю библиотеке обрабатывать это автоматически...

[OALAudioSession sharedInstance ]. handleInterruptions = YES

И это работает, но частично. Например, при простой настройке с 3 звуками я получаю следующее сообщение об ошибке:

OALAudioSession enableAudioSession]: не удалось активировать аудиосеанс после 2 попыток: Error Domain = NSOSStatusErrorDomain Code = 561015905 «Операция не может быть завершена. (Ошибка OSStatus 561015905.)»

Error 561015905 == 0x21706C61 == !pla и ссылаясь на ошибку, объявленную в AVAudioSession.h:

AVAudioSessionErrorCodeCannotStartPlaying = '!pla', /* 0x21706C61, 561015905

И на самом деле это работает, две неудачные попытки, третья удалась, ничего не замечаешь, потому что все быстро и вроде все работает как надо.

Я заметил, что если я добавлю больше звуков (скажем, 20), я получу те же сообщения:

Не удалось активировать аудиосеанс после 20 попыток:

После этого сеанс активируется. Затем я просто добавил отладочное сообщение в соответствующий метод:

OALAudioSession.m

- (void) activateAudioSession
{
    NSError* error;
    for(int try = 1; try <= kMaxSessionActivationRetries; try++)
    {
        if([[AVAudioSession sharedInstance] setActive:YES error:&error])
        {

            NSLog(@"Session activated after %d", try);

            audioSessionActive = YES;
            return;
        }
        OAL_LOG_ERROR(@"Could not activate audio session after %d tries: %@", try, error);
        [NSThread sleepForTimeInterval:0.2];
    }
    OAL_LOG_ERROR(@"Failed to activate the audio session");
}  

Итак, наконец, после 20 неудачных попыток я получаю сообщение, в котором говорится: «Сеанс активирован после 21 попытки».

Но поскольку для kMaxSessionActivationRetries установлено значение 40, в конечном итоге воспроизведение звука «сломается», поскольку количество попыток может легко превысить разрешенные 40 попыток. Я знаю, что могу изменить это значение, но на самом деле это не решает проблему.

Я пропустил что-то важное здесь? Я думал, что когда для свойства handleInterruptions установлено значение YES, нам не нужно делать какие-либо ручные прерывания/обработку сеанса? Я тестирую на iPhone 6 и iOS8, если это имеет значение. Может ли кто-нибудь пролить свет на это?


person Whirlwind    schedule 10.09.2015    source источник
comment
я хотел бы задать ваш вопрос здесь: groups.google.com/forum/# !forum/objectal-for-iphone эти ребята хорошо разбираются в объектах. вот к кому я пошел, когда я застрял на объекте др.   -  person hamobi    schedule 12.09.2015
comment
@hamobi Спасибо, попробую спросить и там... Я заметил, что если установить allowIpod = NO и honorSilentSwitch = NO, ошибок не возникает. Но это не решение.   -  person Whirlwind    schedule 12.09.2015