2012-08-17 10 views
7

Sto costruendo un'applicazione di streaming musicale utilizzando AVPlayer. Tutto sta funzionando bene, la musica continua a suonare in sottofondo, ecc. Il mio problema è quando simulo la perdita di connessione sul telefono (disattiva i dati cellulari, attendi che il flusso si interrompa e poi torni indietro) ci vorranno circa 2 minuti perché l'app riempia il buffer anche se è presente una rete 3G (nel frattempo posso navigare sul web).iOS AVPlayer lenta rebuffering dopo la perdita di connessione

Tutto funziona nel simulatore, ma non sul dispositivo. Se attendo 2 minuti riceverò una notifica di riproduzioneLikelyToKeepUp corretta, e da quello in poi tutto andrà bene, ma quel rebuffering dovrebbe essere di pochi secondi. Va bene quando simulo una larghezza di banda ridotta disattivando il controllo dell'ampiezza di banda sul mio router, ma quando simulo il cambio di gestore disattivando i dati del cellulare e cambiandolo indietro è così lungo.

Sto chiamando beginInterruption su "playbackBufferEmpty" e chiama endInterruption su "playbackLikelyToKeepUp". Il problema principale è "playbackLikelyToKeepUp" arriva troppo tardi.

- (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; 
} 

Qualche idea? Ho passato tutta la giornata con questo problema, ho cercato su Google tutto ma sono bloccato. Grazie in anticipo.

risposta

2

Ho sofferto la stessa situazione mesi fa, la mia conclusione è "playbackLikelyToKeepUp non è affidabile".

La soluzione viene controllata manualmente con il TimeRange memorizzato.

FYI, ho creato una classe AVPlayer per la riproduzione multimediale remota - HysteriaPlayer. È possibile utilizzarlo direttamente oppure cercare il file .m.

Spero che questo aiuti.