AVPlayerViewController
jest bardzo różne w użyciu od MPMoviePlayerViewController
. Zamiast korzystać z powiadomień, korzystasz z funkcji Key Value Observing w celu określenia aktualnej charakterystyki obiektu AVPlayer
związanej z obiektem AVPlayerViewController
. Zgodnie z dokumentami:
Możesz obserwować status gracza za pomocą obserwacji klucz-wartość. Tak więc , że można bezpiecznie dodawać i usuwać obserwatorów, AVPlayer serializuje powiadomienia o zmianach, które występują dynamicznie podczas odtwarzania w kolejce wysyłkowej . Domyślnie ta kolejka jest główną kolejką (patrz dispatch_get_main_queue). Aby zapewnić bezpieczny dostęp do nieatomowych właściwości odtwarzacza , podczas gdy dynamiczne zmiany w stanie odtwarzania mogą być zgłaszane , należy serializować dostęp za pomocą kolejki powiadomień odbiornika . W powszechnym przypadku taka serializacja jest naturalnie osiągnięta przez wywoływanie różnych metod AVPlayera w głównym wątku lub kolejce.
Na przykład, jeśli chcesz wiedzieć, gdy gracz został wstrzymany dodać obserwatora na własność przedmiotu AVPlayer
rate
:
[self.player addObserver:self forKeyPath:@"rate" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: &PlayerRateContext];
Następnie w The Observer Sprawdzić metodę jeżeli wartość new
jest równa zeru:
- (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;
}
wiele właściwości na AVPlayer
są obserwowalne. Przejdź przez Class reference.
Oprócz tego istnieje kilka powiadomień dostępnych dla obiektu AVPlayerItem
, które są ograniczone, ale nadal pomocne.
Powiadomienia
AVPlayerItemDidPlayToEndTimeNotification
AVPlayerItemFailedToPlayToEndTimeNotification
AVPlayerItemTimeJumpedNotification
AVPlayerItemPlaybackStalledNotification
AVPlayerItemNewAccessLogEntryNotifi kation
AVPlayerItemNewErrorLogEntryNotification
znajdę AVPlayerItemDidPlayToEndTimeNotification
szczególnie przydatnych do poszukiwania element do startu po zakończeniu odtwarzania.
Stosując te dwie opcje razem powinieneś być w stanie zastąpić większość, jeśli nie wszystkie powiadomienia o MPMoviePlayerController
Cóż, to wygląda na dużo pracy. Dziękuję Ci. –
Czy możesz również podać listę powiadomień JWPlayer? Nie można znaleźć zwięzłej listy w sieci. –
Jak przekonwertować MPMoviePlayerPlaybackStateDidChangeNotification w AVPlayer? –