2012-08-17 32 views
7

Estoy construyendo una aplicación de transmisión de música con AVPlayer. Todo funciona bien, la música sigue sonando en segundo plano, etc. Mi problema es cuando simulo pérdida de conexión en el teléfono (apago los datos móviles, espero a que la transmisión se detenga y luego retroceda) llevará unos 2 minutos para que la aplicación llene el búfer incluso si hay una red 3G presente (puedo navegar por la web mientras tanto).iOS AVPlayer lento rebuffering después de la pérdida de conexión

Todo funciona en simulador, pero no en el dispositivo. Si espero 2 minutos obtendré una notificación apropiada de playbackLikelyToKeepUp, y desde allí todo está bien, pero ese rebuffering debería ser de unos pocos segundos. Está bien cuando simulo un bajo ancho de banda desactivando el control de ancho de banda en mi enrutador, pero cuando simulo el cambio de portadora desconectando los datos celulares y volviendo a conectarlos, todo ese tiempo.

Llamo a beginInterruption en "playbackBufferEmpty" y llamo a endInterruption en "playbackLikelyToKeepUp". El problema principal es "playbackLikelyToKeepUp" llega demasiado tarde.

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

¿Alguna idea? Pasé todo el día con este tema, busqué en Google todo, pero estoy atascado. Gracias de antemano.

Respuesta

2

Sufrí la misma situación hace meses, mi conclusión es "playbackLikelyToKeepUp no es confiable".

Mi solución se comprueba manualmente TimeRange en el búfer.

FYI, hice una clase de AVPlayer para la reproducción remota de medios - HysteriaPlayer. Puede usarlo directamente o buscar el archivo .m.

Espero que esto ayude.

Cuestiones relacionadas