Buduję aplikację do strumieniowego przesyłania muzyki za pomocą AVPlayer. Wszystko działa poprawnie, muzyka odtwarza się w tle itp. Mój problem polega na tym, że symuluję utratę połączenia w telefonie (wyłącz dane komórkowe, poczekaj na zatrzymanie się strumienia, a następnie przełącz się) zajmie to około 2 minut aby aplikacja wypełniła bufor, nawet jeśli jest obecna sieć 3G (w międzyczasie mogę przeglądać sieć).Niskie przepełnianie bufora AVOS w systemie iOS po utracie połączenia
Wszystko działa w symulatorze, ale nie na urządzeniu. Jeśli poczekam 2 minuty, otrzymam odpowiednie powiadomienie playbackLikelyToKeepUp, a od tego wszystko jest w porządku, ale to ponowne buforowanie powinno zająć tylko kilka sekund. Jest ok, gdy symuluję niską przepustowość, wyłączając kontrolę przepustowości na moim routerze, ale kiedy symuluję zmianę przewoźnika, wyłączam komórkową transmisję danych i przełączam ją tak długo.
Zadzwonię do beginInterruption na "playbackBufferEmpty" i wywołuję endInterruption na "playbackLikelyToKeepUp". Głównym problemem jest "playbackLikelyToKeepUp" przybywa o wiele za późno.
- (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;
}
Jakieś pomysły? Cały dzień spędziłem z tym problemem, szukałem w Google wszystkiego, ale utknąłem. Z góry dzięki.