AVPlayerViewController
è molto diverso nel suo utilizzo dal MPMoviePlayerViewController
. Invece di utilizzare le notifiche, si utilizza Key Value Observing per determinare le caratteristiche correnti dell'oggetto AVPlayer
associato allo AVPlayerViewController
. Secondo i documenti:
È possibile osservare lo stato di un lettore utilizzando l'osservazione dei valori-chiave. Quindi, che puoi aggiungere e rimuovere gli osservatori in modo sicuro, AVPlayer serializza le notifiche delle modifiche che si verificano in modo dinamico durante la riproduzione su una coda di invio . Per impostazione predefinita, questa coda è la coda principale (vedere dispatch_get_main_queue). Per garantire un accesso sicuro alle proprietà non anatomiche del lettore mentre le modifiche dinamiche nello stato di riproduzione potrebbero essere segnalate, è necessario serializzare l'accesso con la coda di notifica del ricevitore . Nel caso comune, tale serializzazione viene naturalmente raggiunta da invocando i vari metodi di AVPlayer sul thread principale o sulla coda.
Per esempio, se volete sapere quando il giocatore è stato messo in pausa aggiungere un osservatore sulla rate
proprietà dell'oggetto AVPlayer
:
[self.player addObserver:self forKeyPath:@"rate" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: &PlayerRateContext];
Poi nel controllo di osservare metodo se il valore new
è pari a zero:
- (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;
}
Un sacco di proprietà sulla AVPlayer
sono osservabili. Passare attraverso lo Class reference.
Oltre a questo ci sono diverse notifiche disponibili per l'oggetto AVPlayerItem
che sono limitate ma comunque utili.
Notifiche
AVPlayerItemDidPlayToEndTimeNotification
AVPlayerItemFailedToPlayToEndTimeNotification
AVPlayerItemTimeJumpedNotification
AVPlayerItemPlaybackStalledNotification
AVPlayerItemNewAccessLogEntryNotifi cazione
AVPlayerItemNewErrorLogEntryNotification
trovo AVPlayerItemDidPlayToEndTimeNotification
particolarmente utile per cercare la voce al punto di partenza, una volta la riproduzione è terminata.
L'utilizzo di queste due opzioni insieme si dovrebbe essere in grado di sostituire la maggior parte, se non tutte le notifiche per l'MPMoviePlayerController
Beh, sembra molto lavoro. Grazie. –
Puoi anche fornire un elenco di notifiche JWPlayer? Impossibile trovare una lista concisa in rete. –
Come posso convertire MPMoviePlayerPlaybackStateDidChangeNotification in AVPlayer? –