Mi trovo in una strana situazione con il mio lettore video, il cui codice base non è cambiato molto da quello che ha funzionato in una app precedente. Ecco il problema: sto inserendo un "_loadingLayer" (un CATextLayer che dice che il video sta caricando), e poi osservando la proprietà di stato di currentItem di AVPlayer per capire quando rimuovere "_loadingLayer" e sostituirlo con il mio attuale "_playerLayer" . Ecco il mio codice di KVO per questo:Base AV: differenza tra la versione corrente pronta per la riproduzione e la proprietà [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];
}
}
Il mio problema è che il video sta iniziando, ma solo l'audio è in riproduzione - lo strato rimane nero. Quando ho inserito l'istruzione NSLog sopra, ho scoperto perché: Apparentemente sebbene lo stato di currentItem sia "AVPlayerItemStatusReadyToPlay", il layer player non è in realtà readyForDisplay. Questo non ha senso per me - sembra controintuitivo. Qualcuno può darmi qualche consiglio su questo?
Sono stato in grado di verificare che _playerLayer venga aggiunto all'albero dei livelli impostando il colore dello sfondo sul rosso.
Un'altra cosa strana che credo potrebbe essere correlato .... Ho visto questi messaggi nella console debugger:
PSsetwindowlevel, errore di impostazione livello di finestra (1000) CGSSetIgnoresCycle: errore di impostazione 1000 o clearing window tag
Grazie in anticipo. Questo è un crosspost dei Forum Apple Dev.