1

This other SO post建议当ratean的属性为AVPlayer0时,这意味着AVPlayer不再播放。我们使用下面的观察者代码来循环视频,但有时pause在播放器上调用该函数无法中断循环。调试时,该rate属性的计算结果为 0。

1) 链接的 SO 帖子是否错误,因为速率值为 0 并不意味着播放器已暂停?

2)连续循环,即使在调用函数之后,在通知已经发出之后函数出现的pause某种竞争条件?pauseplayerItemDidReachEnd

NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerItemDidReachEnd:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)

private func playVideo() {
    player.seekToTime(kCMTimeZero)
    player.actionAtItemEnd = .Pause
    player.play()
}
4

1 回答 1

0

设置播放器时:

player.actionAtItemEnd = AVPlayerActionAtItemEnd.None

NSNotificationCenter.defaultCenter().addObserver(self, 
                                                 selector: "playerItemDidReachEnd:", 
                                                 name: AVPlayerItemDidPlayToEndTimeNotification, 
                                                 object: player.currentItem)

这将防止播放器在最后暂停。

在通知中:

func playerItemDidReachEnd(notification: NSNotification) {
    let p: AVPlayerItem = notification.object as! AVPlayerItem
    p.seekToTime(kCMTimeZero)
}

这将倒带电影。

释放播放器时不要忘记取消注册通知。

于 2016-01-19T06:40:28.587 回答