AVPlayerViewController
сильно отличается по использованию от MPMoviePlayerViewController
. Вместо использования уведомлений вы используете наблюдение за ключевыми значениями, чтобы определить текущие характеристики объекта AVPlayer
, связанного с AVPlayerViewController
. Согласно документам:
Вы можете наблюдать за статусом игрока, используя наблюдение за ключом-значением. Чтобы вы могли безопасно добавлять и удалять наблюдателей, AVPlayer сериализует уведомления об изменениях, которые происходят динамически во время воспроизведения в очереди отправки. По умолчанию эта очередь является основной (см. dispatch_get_main_queue). Чтобы обеспечить безопасный доступ к неатомарным свойствам проигрывателя, когда могут сообщаться динамические изменения в состоянии воспроизведения, вы должны сериализовать доступ с помощью очереди уведомлений получателя. В общем случае такая сериализация естественным образом достигается путем вызова различных методов AVPlayer в основном потоке или очереди.
Например, если вы хотите знать, когда ваш проигрыватель был приостановлен, добавьте наблюдателя к свойству rate
объекта AVPlayer
:
[self.player addObserver:self forKeyPath:@"rate" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: &PlayerRateContext];
Затем в методе наблюдения проверьте, равно ли значение new
нулю:
- (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;
}
Многие свойства на AVPlayer
можно наблюдать. Ознакомьтесь с справочником по классам.
Кроме того, для объекта AVPlayerItem
доступно несколько уведомлений, которые ограничены, но все же полезны.
Уведомления
AVPlayerItemDidPlayToEndTimeNotification
AVPlayerItemFailedToPlayToEndTimeNotification
AVPlayerItemTimeJumpedNotification
AVPlayerItemPlaybackStalledNotification
AVPlayerItemNewAccessLogEntryNotification
AVPlayerItemNewErrorLogEntryNotification
Я нахожу AVPlayerItemDidPlayToEndTimeNotification
особенно полезным для поиска элемента в начале после завершения воспроизведения.
Используя эти два параметра вместе, вы сможете заменить большинство, если не все уведомления для MPMoviePlayerController
.
person
Ishan Handa
schedule
02.10.2015