AVQueuePlayer no avanza al siguiente elemento en iOS 8

Estoy usando AVQueuePlayer para reproducir algunos videos, todo funciona bien en iOS 6 y 7. Sin embargo, en iOS 8, cuando el AVPlayerItem actual termina de reproducirse, el siguiente video no se reproduce. Al colocar un observador en la propiedad currentItem de la queue, la queue tiene el siguiente set de video como su elemento actual como se espera, simplemente no se reproduce (incluso con llamadas de reproducción explícitas).

¿Alguien tiene alguna idea de lo que podría estar sucediendo y cómo solucionarlo? ¿Alguien más se ha topado con este problema?

Tenía exactamente el mismo problema y perdí diez horas en esto …
Pero ahora se solucionó añadiendo el método "insertItem" en el hilo principal.

Entonces tengo a mi jugador como propiedad:

@property AVQueuePlayer * player; 

Acabo de iniciar así:

 _player = [[AVQueuePlayer alloc] init]; 

Y aquí está mi método para agregar elementos de una ruta:

 - (void)addInQueuePlayerFile:(NSString *)path { AVAsset * asset = [AVAsset assetWithURL:[[NSURL alloc] initFileURLWithPath:path]]; AVPlayerItem * playerItem = [AVPlayerItem playerItemWithAsset:asset]; dispatch_async(dispatch_get_main_queue(), ^{ [_player insertItem:playerItem afterItem:nil]; }); } 

Entonces funciona, pero realmente no entiendo por qué … Entonces, si alguien tiene una respuesta …

Pero también si esto no funciona para usted, intente agregar un observador a su reproductor (y / o su playerItem). Puedes agregar un observador así:

 [_player addObserver:self forKeyPath:@"status" options:0 context:nil] 

Y atrapa con este método:

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == _player && [keyPath isEqualToString:@"status"]) { if (_player.status == AVPlayerStatusFailed) { NSLog(@"AVPlayer Failed"); } else if (_player.status == AVPlayerStatusReadyToPlay) { NSLog(@"AVPlayer item Ready to Play"); } else if (_player.status == AVPlayerStatusUnknown) { NSLog(@"AVPlayer item Unknown"); } } } 

Déjame saber si esto funciona para ti.

Siempre se debe acceder a avplayer en el hilo principal. Esto no es nada nuevo para iOS8, pero tal vez Apple cambió la forma en que se utilizan los hilos, por lo que está viendo el problema con más frecuencia que en iOS7.

Para garantizar un acceso seguro a las properties no atómicas de un jugador mientras se puedan informar los cambios dynamics en el estado de la reproducción, debe serializar el acceso con la queue de notifications del receptor. En el caso común, dicha serialization se logra naturalmente invocando los diversos methods de AVPlayer en el hilo principal o en la queue.

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/index.html

Yo tuve el mismo problema. Después de varias horas de testing, descubrí que si algunos de los elementos en la queue tienen diferentes methods de encriptación, el jugador se detendría.

Por ejemplo, si el jugador acaba de terminar de reproducir un flujo encryption y el siguiente elemento en la queue no estaba encryption, el jugador no pasará al siguiente elemento.