2012-08-17 16 views
7

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.

Odpowiedz

2

Cierpiałem w podobnej sytuacji kilka miesięcy temu, mój wniosek brzmi: "playbackLikelyToKeepUp is not reliable".

Moje rozwiązanie jest sprawdzane ręcznie w buforze czasowym.

FYI Stworzyłem klasę AVPlayer do zdalnego odtwarzania multimediów - HysteriaPlayer. Możesz użyć tego bezpośrednio lub wyszukać plik .m.

Mam nadzieję, że to pomoże.

Powiązane problemy