Skip to content

notification

shixuemei edited this page Aug 3, 2017 · 8 revisions

消息通知

播放过程中发生较为重要的变化时会发送通知,用户需要监听这些通知,捕获到消息时做出相应处理,以获得更好的用户体验。

1. 支持的消息通知

MPMediaPlaybackIsPreparedToPlayDidChangeNotification

  • 播放器完成对视频文件的初始化时发送此通知

MPMoviePlayerPlaybackStateDidChangeNotification

  • 播放状态发生改变时发送此通知

MPMoviePlayerPlaybackDidFinishNotification

  • 正常播放结束或者因为错误播放失败时发送此通知
  • userInfo字典中,关键字MPMoviePlayerPlaybackDidFinishReasonUserInfoKey指明了具体的结束原因,详细可参考MPMovieFinishReason
  • 当结束原因为MPMovieFinishReasonPlaybackError时,userInfo字典中的关键字error指明了具体的错误码,详细可参考错误码

MPMoviePlayerLoadStateDidChangeNotification

  • 数据加载状态发生改变时发送此通知

该通知表征了当前播放过程中的卡顿情况,可以在卡顿情况wiki找到更详细的场景说明和计数算法。

MPMovieNaturalSizeAvailableNotification

  • 第一次检测出视频的宽高或者播放过程中宽高发生改变时发送此通知

MPMoviePlayerFirstVideoFrameRenderedNotification

  • 渲染第一帧视频时发送此通知

MPMoviePlayerFirstAudioFrameRenderedNotification

  • 渲染第一帧音频时发送此通知

MPMoviePlayerSuggestReloadNotification

  • 为提升开播速度,播放器在查找文件格式时只检查少量的数据,如果音视频数据交织情况较差,会导致播放器认为当前码流中只含有视频或者音频数据;但是在播放过程中,发现实际上存在着未检测到的音频或者视频流,此时播放器会发送此通知
  • 当用户监听到此通知时,请务必调用- (void)reload:(NSURL *)aUrl flush:(bool)flush mode:(MPMovieReloadMode)mode方法,并将mode模式设置为MPMovieReloadMode_Accurate来重新加载码流

MPMoviePlayerPlaybackStatusNotification

  • 当播放过程中发生需要上层注意的事件时发送此通知,如实际采用的视频解码方式、解码出现错误等...
  • userInfo字典中,关键字MPMoviePlayerPlaybackStatusUserInfoKey指明了发生的具体事件,相应可参考MPMovieStatus

MPMoviePlayerNetworkStatusChangeNotification

v2.1.1及以上版本支持

  • networkDetectURL不为nil的情况下,网络状态发生变化时会发送此通知
  • userInfo字典中,关键字MPMoviePlayerLastNetworkStatusUserInfoKey和MPMoviePlayerCurrNetworkStatusUserInfoKey分别指明了网络变化前后的状态,用户可根据产品需求做出相应处理,有关网络切换的更多内容,请参考:https://github.com/ksvc/KSYMediaPlayer_iOS/wiki/networkChange

MPMoviePlayerSeekCompleteNotification

v2.3.0及以上版本支持

  • seekTo动作完成后发送此通知

MPMoviePlayerPlaybackTimedTextNotification

v2.5.2及以上版本的点播库支持

  • 有字幕需要显示时上报此消息,字幕内容存在于userInfo字典的MPMoviePlayerPlaybackTimedTextUserInfoKey关键字中;字幕展示结束时其内容为空("")。

2. 示例代码

以MPMediaPlaybackIsPreparedToPlayDidChangeNotification通知为例说明注册和去注册的方法,其他通知方法相同。

2.1注册Observers

- (void)setupObservers
{
    [[NSNotificationCenter defaultCenter]addObserver:self
                selector:@selector(handlePlayerNotify:)
                name:(MPMediaPlaybackIsPreparedToPlayDidChangeNotification)
                object:nil];
}

2.2 去注册Observers

- (void)releaseObservers 
{
    [[NSNotificationCenter defaultCenter]removeObserver:self
                name:MPMediaPlaybackIsPreparedToPlayDidChangeNotification
                object:nil];
}
Clone this wiki locally