AVPlayerViewController
ist in seiner Verwendung von der MPMoviePlayerViewController
viel anders. Anstatt Benachrichtigungen zu verwenden, verwenden Sie Schlüsselwertbeobachtung, um die aktuellen Merkmale des Objektszu ermitteln, das mit der AVPlayerViewController
verknüpft ist. Gemäß der Dokumentation:
Sie können den Status eines Players mithilfe der Schlüsselwertüberwachung beobachten. So , dass Sie Beobachter sicher hinzufügen und entfernen können, serialisiert AVPlayer Benachrichtigungen von Änderungen, die dynamisch während der Wiedergabe in einer Dispatch-Warteschlange auftreten. Standardmäßig ist diese Warteschlange die Hauptwarteschlange (siehe dispatch_get_main_queue). Um einen sicheren Zugriff auf die nichtatomaren Eigenschaften eines Players zu gewährleisten, während dynamische Änderungen im Wiedergabestatus gemeldet werden können, müssen Sie den Zugriff mit der Benachrichtigung des Empfängers serialisieren. Im allgemeinen Fall wird eine solche Serialisierung natürlich durch erreicht, indem die verschiedenen Verfahren von AVPlayer auf dem Haupt-Thread oder der Warteschlange aufgerufen werden.
Zum Beispiel, wenn Sie wissen möchten, wenn Sie den Player angehalten wurde auf der rate
Eigenschaft des AVPlayer
Objekts einen Beobachter hinzu:
[self.player addObserver:self forKeyPath:@"rate" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: &PlayerRateContext];
Dann im beobachten Verfahren prüfen, ob der new
Wert ist gleich Null:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if (context == &PlayerRateContext) {
if ([[change valueForKey:@"new"] integerValue] == 0) {
// summon Sauron here (or whatever you want to do)
}
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
return;
}
sind viele Eigenschaften auf der AVPlayer
beobachtbar. Gehe durch die Class reference.
Auch abgesehen davon gibt es mehrere Benachrichtigungen für die AVPlayerItem
Objekt, die begrenzt sind, aber immer noch hilfreich.
Benachrichtigungen
AVPlayerItemDidPlayToEndTimeNotification
AVPlayerItemFailedToPlayToEndTimeNotification
AVPlayerItemTimeJumpedNotification
AVPlayerItemPlaybackStalledNotification
AVPlayerItemNewAccessLogEntryNotifi
Kation
AVPlayerItemNewErrorLogEntryNotification
I AVPlayerItemDidPlayToEndTimeNotification
besonders nützlich finden Sie die Artikel an den Start zu suchen, sobald die Wiedergabe beendet hat.
Mit diesen beiden Optionen zusammen sollten Sie in der Lage sein, die meisten zu ersetzen, wenn nicht alle Benachrichtigungen für die MPMoviePlayerController
Nun, das sieht nach einer Menge Arbeit aus. Vielen Dank. –
Können Sie auch eine Liste der JWPlayer-Benachrichtigungen bereitstellen? Konnte keine übersichtliche Liste im Internet finden. –
Wie konvertiere ich MPMoviePlayerPlaybackStateDidChangeNotification in AVPlayer? –