Медленная повторная буферизация iOS AVPlayer после потери соединения

Я создаю приложение для потоковой передачи музыки с помощью AVPlayer. Все работает нормально, музыка продолжает играть в фоновом режиме и т.д. Моя проблема заключается в том, что когда я имитирую потерю соединения на телефоне (отключаю сотовые данные, жду, пока поток остановится, а затем переключаюсь обратно )приложение займет около 2 минут, чтобы заполнить буфер, даже если есть 3G сеть присутствует (Тем временем я могу просматривать веб-страницы ).

В симуляторе все работает, а на устройстве нет. Если я подожду 2 минуты, я получу правильное уведомление о воспроизведенииLikelyToKeepUp, и с этого момента все в порядке, но эта повторная буферизация должна длиться всего несколько секунд. Это нормально, когда я имитирую низкую пропускную способность, отключая управление пропускной способностью на своем маршрутизаторе, но когда я имитирую смену оператора, отключая сотовые данные и переключая их обратно, это так долго.

Я вызываю beginInterruption для «playbackBufferEmpty» и вызываю endInterruption для «playbackLikelyToKeepUp». Основная проблема в том, что "playbackLikelyToKeepUp" появляется слишком поздно.

- (void)beginInterruption {
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
}

- (void)endInterruptionWithFlags:(NSUInteger)flags {
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
    self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    if(self.interrupted) [self play];
    self.interrupted = NO;
}

Любые идеи? Я провел весь день с этой проблемой, все гуглил, но я застрял. Заранее спасибо.

7
задан Skrew 17 August 2012 в 18:53
поделиться