在playerItem

时间:2016-07-13 00:55:14

标签: ios swift swift2 avplayer nsnotificationcenter

目前我有一个播放特定视频的AVPlayer控制器,并在每次使用时将其循环播放

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(VideoPlayerController.playerItemDidReachEnd(_:)), name: AVPlayerItemDidPlayToEndTimeNotification, object: self.player?.currentItem)

func playerItemDidReachEnd(notification: NSNotification) {
    //code to restart player
}

我希望在播放器到达视频中的特定时间时暂停播放器,例如在播放结束前一秒钟。我该怎么做?

是否有像AVPlayerItemDidPlayToEndTimeNotification这样的通知名称,用于检测何时达到特定时间?

2 个答案:

答案 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
}