目前我有一个播放特定视频的AVPlayer控制器,并在每次使用时将其循环播放
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(VideoPlayerController.playerItemDidReachEnd(_:)), name: AVPlayerItemDidPlayToEndTimeNotification, object: self.player?.currentItem)
和
func playerItemDidReachEnd(notification: NSNotification) {
//code to restart player
}
我希望在播放器到达视频中的特定时间时暂停播放器,例如在播放结束前一秒钟。我该怎么做?
是否有像AVPlayerItemDidPlayToEndTimeNotification
这样的通知名称,用于检测何时达到特定时间?
答案 0 :(得分:2)
您正在寻找AVPlayer的addBoundaryTimeObserverForTimes:queue:usingBlock:
。
答案 1 :(得分:2)
使用addPeriodicTimeObserverForInterval
创建定期事件。在事件处理程序中,您可以检查视频的当前时间,如果时间符合某些条件,则暂停。
示例:
var player: AVPlayer!
var playerObserver: AnyObject!
func playVideo() {
self.addPlayerPeriodicObserver()
player.play()
}
func stopVideo() {
removePlayerPeriodicObserver()
player.pause()
}
func addPlayerPeriodicObserver() {
removePlayerPeriodicObserver()
// Time interval to check video playback.
let interval = CMTime(seconds: 0.01, preferredTimescale: 1000)
// Time limit to play up until.
let duration = player.currentItem!.duration
let limit = CMTime(seconds: 1.0, preferredTimescale: 1000)
let maxTime = duration - limit
// Schedule the event observer.
playerObserver = player?.addPeriodicTimeObserverForInterval(interval, queue: dispatch_get_main_queue()) { [unowned self] time in
if self.player.currentTime() >= maxTime {
// Time is at or past time limits - stop the video.
self.stopVideo()
}
}
}
func removePlayerPeriodicObserver() {
if let playerObserver = playerObserver {
player?.removeTimeObserver(playerObserver)
}
playerObserver = nil
}