Ich stoße in eine seltsame Situation mit meinem Videoplayer, dessen Kerncode nicht viel verändert hat von dem, was in einer früheren App funktioniert hat. Hier ist das Problem: Ich füge einen "_loadingLayer" ein (ein CATextLayer, der besagt, dass das Video geladen wird), und beobachte dann die Statuseigenschaft des AVPlayers currentItem, um herauszufinden, wann "_loadingLayer" entfernt und durch meinen tatsächlichen "_playerLayer" ersetzt werden muss. . Hier ist meine KVO-Code für das:AV Foundation: Unterschied zwischen currentItem ist bereit zu spielen und - [AVPlayer readyForDisplay] -Eigenschaft?
-(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];
}
}
Mein Problem ist, dass das Video gestartet wird, sondern nur die Audio-Wiedergabe - die Schicht bleibt schwarz. Als ich oben die NSLog-Anweisung eingefügt habe, habe ich herausgefunden warum: Obwohl der currentItem-Status "AVPlayerItemStatusReadyToPlay" ist, ist die Player-Ebene nicht wirklich readyForDisplay. Das macht für mich keinen Sinn - es scheint nicht intuitiv zu sein. Kann mir bitte jemand eine Anleitung geben?
Ich konnte überprüfen, dass _playerLayer dem Ebenenbaum hinzugefügt wird, indem Sie seine Hintergrundfarbe auf rot festlegen.
Eine andere seltsame Sache, die ich denke, könnten verwandt sein .... Ich habe diese Meldungen im Debugger-Konsole zu sehen:
PSsetwindowlevel, Fehler Einstellungsfenster Ebene (1000) CGSSetIgnoresCycle: Fehler 1000 oder Einstellung Fenster-Tags löschen
Vielen Dank im Voraus. Dies ist ein Crosspost von den Apple Dev Foren.