未调用AVPlayerItemDidPlayToEndTimeNotification

时间:2014-05-28 06:41:13

标签: ios objective-c avplayer nsnotificationcenter

我在屏幕上有一个必须使用无限循环播放的视频。

所以我写道:

self.player = [AVPlayer playerWithPlayerItem:avItem];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[_player currentItem]];

[_player play];

我的后备方法是:

- (void)playerItemDidReachEnd:(NSNotification *)notification {
    [_player.currentItem seekToTime:kCMTimeZero];
    [_player play];
}

效果很好,但有时看起来我的后备不会被调用。该视频最终冻结,再也没有播放过。这是随机发生的......

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以设置边界时间观察者。

    - (id) setupBoundaryEndWith:(NSArray*)array
    {
        __weak MY_AVPlayer* weakself = self;
        return [self addBoundaryTimeObserverForTimes:array queue:NULL usingBlock:^{
            [weakself stopAVPlayerAndLoopOrTriggerNextTrack];
            }];
    }

答案 1 :(得分:1)

[_player currentItem]null,因为你还没有开始玩。我建议在开始播放后显式添加AVPlayerItem(理想情况下)或注册到通知(反转最后2行)。

我没有尝试过第二种解决方案,因此如果需要一些时间来开始播放,它可能无效。如果是这种情况,我建议设置NSTimer以稍后触发,然后注册。