AVPlayerItemDidPlayToEndTimeNotification se publica cuando el elemento no termina de reproducirse

Estoy usando AVPlayer para reproducir pistas de la web. En mi list de reproducción siempre hay varias pistas. Entonces, para definir la acción que se tomará cuando la pista actual llegue a su fin, utilizo el mecanismo KVO y logging un observador para el AVPlayerItemDidPlayToEndTimeNotification publicado.

if (_player.currentItem.status == AVPlayerItemStatusReadyToPlay) { [self play]; [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemReachedEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem]; } 

Cuando se publica la notificación, se llama al método itemReachedEnd:

 - (void) itemReachedEnd:(NSNotification *) notification { dispatch_async(dispatch_get_main_queue(), ^{ //switching to the next track } 

La cuestión es que, a veces, este método se invoca cuando el elemento aún no ha terminado de reproducirse y tengo la pista actual cambiada antes de que se haya reproducido hasta el final. No entiendo por qué sucede esto.

Por favor, dime, ¿qué estoy haciendo mal? ¿Tal vez necesito tomar en consideración algunas otras properties de AVPlayerItem antes de cambiar la pista?

Actualizaciones: He explorado que la position actual de la pista actual no es igual a la duración actual de la pista. Entonces, ¿por qué el jugador piensa que el ítem actual ha terminado de jugar?

No es una respuesta real a tu pregunta, pero ¿has mirado a AVQueuePlayer ? Eso debería hacer exactamente lo que quiere sin necesidad de cambiar la pista manualmente.

Edit: ¿Estás seguro de que la notificación es para el artículo actual? ¿O es posible que tenga un observador de un elemento reproducido anteriormente que se desencadene por alguna razón?