2012-08-17 6 views
7

Ich baue eine Musik-Streaming-App mit AVPlayer. Alles funktioniert gut, Musik spielt weiter im Hintergrund usw. Mein Problem ist, wenn ich Verbindungsverlust auf dem Telefon simuliere (Mobilfunkdaten ausschalten, warten, bis der Strom stoppt und dann zurück schaltet), dauert es ungefähr 2 Minuten dass die App den Puffer füllt, auch wenn ein 3G-Netzwerk vorhanden ist (ich kann inzwischen im Internet surfen).iOS AVPlayer langsames Rebuffering nach Verbindungsverlust

Alles funktioniert im Simulator, aber nicht auf dem Gerät. Wenn ich 2 Minuten warte, erhalte ich eine ordentliche playbackLikelyToKeepUp Benachrichtigung, und von da an ist alles in Ordnung, aber das Rebuffering sollte nur ein paar Sekunden dauern. Es ist in Ordnung, wenn ich eine niedrige Bandbreite simuliere, indem ich die Bandbreitenkontrolle auf meinem Router ausschalte, aber wenn ich den Trägerwechsel simuliere, indem ich Mobilfunkdaten abschalt und so lange zurückschalte.

Ich rufe beginInterruption auf "playbackBufferEmpty" und rufe endInterruption auf "playbackLikelyToKeepUp". Das Hauptproblem ist, dass "playbackLikelyToKeepUp" viel zu spät kommt.

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

Irgendwelche Ideen? Ich habe meinen ganzen Tag damit verbracht, alles zu googlen, aber ich stecke fest. Vielen Dank im Voraus.

Antwort

2

Ich erlitt die gleiche Situation vor Monaten, meine Schlussfolgerung ist "PlaybackLikelyToKeepUp ist nicht zuverlässig".

Meine Lösung wird das gepufferte TimeRange manuell überprüft.

FYI, ich habe eine AVPlayer-Klasse für die Remote-Media-Wiedergabe - HysteriaPlayer. Sie können es direkt verwenden, oder suchen Sie die .m-Datei.

Hoffe, das hilft.