我在屏幕上有一个必须使用无限循环播放的视频。
所以我写道:
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];
}
效果很好,但有时看起来我的后备不会被调用。该视频最终冻结,再也没有播放过。这是随机发生的......
你有什么想法吗?
答案 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
以稍后触发,然后注册。