当项目未完成播放时,将发布AVPlayerItemDidPlayToEndTimeNotification

时间:2014-06-19 16:26:05

标签: ios objective-c avplayer

我正在使用AVPlayer播放来自网络的曲目。在我的播放列表中总有几首曲目。 因此,为了定义当前轨道到达结束时将采取的操作,我使用KVO机制并注册发布的AVPlayerItemDidPlayToEndTimeNotification的观察者。

    if (_player.currentItem.status == AVPlayerItemStatusReadyToPlay)
    {
       [self play];
       [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemReachedEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
    }

发布通知时,调用itemReachedEnd方法:

- (void) itemReachedEnd:(NSNotification *) notification
{
dispatch_async(dispatch_get_main_queue(), ^{
    //switching to the next track
}

问题是,当项目尚未完成播放时,有时会调用此方法,并且在播放结束之前切换当前曲目。我不明白为什么会这样。

请告诉我,我做错了什么?也许我需要在跟踪切换之前考虑其他一些AVPlayerItem属性?

更新:我已经探索过当前曲目的当前位置不等于当前曲目的持续时间。那么为什么玩家认为当前项目已经完成了?

1 个答案:

答案 0 :(得分:1)

不是您问题的真实答案,但您是否考虑过AVQueuePlayer?这应该完全符合您的要求而无需手动切换轨道。

编辑:您确定通知是针对当前项吗?或者你是否有一个观察者因为某种原因会触发之前播放的项目?