我正在使用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属性?
更新:我已经探索过当前曲目的当前位置不等于当前曲目的持续时间。那么为什么玩家认为当前项目已经完成了?
答案 0 :(得分:1)
不是您问题的真实答案,但您是否考虑过AVQueuePlayer
?这应该完全符合您的要求而无需手动切换轨道。
编辑:您确定通知是针对当前项吗?或者你是否有一个观察者因为某种原因会触发之前播放的项目?