Reproducción de secuencias con mala connection a internet en AVPlayer

Cuando AVPlayer reproduce un recurso que proviene de la transmisión de networking, se detiene cuando llega al final del contenido descargado.

Entonces, mi pregunta es, ¿cómo saber que se detuvo debido a una mala networking? ¿Y cómo reproducirlo después de que se descarga, digamos, los próximos 10 segundos de activo?

Puede agregar un observador a cuando el AVPlayer se quede vacío:

[[self.tracksPlayer currentItem] addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; 

Y un observador para que pueda saber cuándo el AVPlayer se ha almacenado lo suficiente como para mantenerse actualizado:

 [[self.tracksPlayer currentItem] addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; 

Luego, compruébelo en su callback de KVO:

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == [self.tracksPlayer currentItem] && [keyPath isEqualToString:@"playbackBufferEmpty"]) { if ([self.tracksPlayer currentItem].playbackBufferEmpty) { NSLog(@"Buffer Empty"); } } else if (object == [self.tracksPlayer currentItem] && [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) { if ([self.tracksPlayer currentItem].playbackLikelyToKeepUp) { NSLog(@"LikelyToKeepUp"); } } } 

Para swift

 1) let playbackLikelyToKeepUpContext = UnsafeMutablePointer<(Void)>(nil) or let playbackLikelyToKeepUpContext = UnsafeMutablePointer<(Void)>() 2) //Add Observer player.addObserver(self, forKeyPath: "currentItem.playbackLikelyToKeepUp", options: NSKeyValueObservingOptions.New, context: playbackLikelyToKeepUpContext) player.play() 3) //Add observer override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { guard keyPath != nil else { // a safety precaution super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) return } if (context == playbackLikelyToKeepUpContext) { if (player.currentItem!.playbackLikelyToKeepUp) { player.play() Utilities.hideHUD(self.view) } else { Utilities.showHUD(self.view) } } } 4) // Remove Observer override func viewDidDisappear(animated: Bool) { player.removeObserver(self, forKeyPath: "currentItem.playbackLikelyToKeepUp") }