Me encuentro con una situación extraña con mi reproductor de video, cuyo código principal no ha cambiado mucho de lo que funcionó en una aplicación anterior que hice. Aquí está el problema: estoy insertando un "_loadingLayer" (un CATextLayer que dice que el video se está cargando), y luego observando la propiedad de estado del actualItem del AVPlayer para averiguar cuándo eliminar el "_loadingLayer" y reemplazarlo con mi "_playerLayer" real. . Aquí está mi código de MVA para ello:AV Foundation: diferencia entre currentItem listo para jugar, y - propiedad [AVPlayer readyForDisplay]?
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ((object == _playerLayer) && (_playerLayer.player.currentItem.status == AVPlayerItemStatusReadyToPlay)) {
[CATransaction setAnimationDuration:1.8];
_loadingLayer.opaque = NO;
if (_playerLayer.readyForDisplay) {
NSLog(@"Should be ready now.");
}
[self addPlayerLayerToLayerTree];
}
}
Mi problema es que el vídeo está empezando, pero sólo se reproduce el audio - la capa permanece en negro. Cuando inserté la declaración NSLog anterior, descubrí por qué: Aparentemente, aunque el estado del actualItem es "AVPlayerItemStatusReadyToPlay", la capa del reproductor no está realmente preparada para la visualización. Esto no tiene sentido para mí, parece contradictorio. ¿Puede alguien darme alguna orientación sobre esto?
Pude verificar que _playerLayer se está agregando al árbol de capas estableciendo el color de fondo en rojo.
Otra cosa extraña que creo que podría estar relacionado .... He estado viendo estos mensajes en la consola depurador:
PSsetwindowlevel, Error de configuración de nivel de la ventana (1000) CGSSetIgnoresCycle: error de selección 1000 o ventana de compensación etiquetas
Gracias de antemano. Este es un cruce de los foros de Apple Dev.