如何replaceMPMoviePlayer通知?

在iOS 9 MPMoviePlayer和他的所有组件都被弃用。 我们使用MPMoviePlayerController通知,如MPMoviePlayerLoadStateDidChangeNotification, MPMovieDurationAvailableNotification, MPMoviePlayerPlaybackStateDidChangeNotification, MPMoviePlayerReadyForDisplayDidChangeNotification ,来跟踪video服务质量。 但现在用AVPlayerViewController我无法find正确的替代这些通知。

我现在如何replace这些通知?

AVPlayerViewControllerMPMoviePlayerViewController使用有很大的不同。 您可以使用Key Value Observing来确定与AVPlayer关联的AVPlayer对象的当前特征,而不是使用通知。 根据文件:

您可以使用键值观察来观察玩家的状态。 为了安全地添加和移除观察者,AVPlayer将在发送队列上播放时dynamic发生的变化的序列化通知。 默认情况下,此队列是主队列(请参阅dispatch_get_main_queue)。 为了确保安全地访问播放器的非primefaces属性,同时可以报告播放状态的dynamic变化,您必须使用接收者的通知队列序列化访问。 在一般情况下,这种序列化自然是通过在主线程或队列上调用AVPlayer的各种方法来实现的。

例如,如果您想知道播放器何时暂停,请在AVPlayer对象的rate属性中添加观察者:

 [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特别有用于查找开始的项目。

同时使用这两个选项,您应该能够replaceMPMoviePlayerController大部分(如果不是全部)通知

我查看了MPMoviePlayerNotificationsAVPlayerItemNotifications的文档,我注意到两件事情。

  1. MPMoviePlayerNotifications不显示它们已被弃用:

    在这里输入图像说明

  2. AVPlayerItemNotifications没有我能看到的任何replace:

    在这里输入图像说明

所以,我很困惑,你说MPMoviePlayerNotifications已被弃用,因为文档说他们是可用的。 此外,我不认为AVPlayerItemNotifications具有MPMoviePlayerNotifications的替代。