2016-07-13 16 views
0

Zur Zeit habe ich eine AVPlayer-Controller, der ein bestimmtes Video spielt und Schleifen es jedes Mal das EndePausieren AVPlayer letzter Sekunde von playerItem

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

und

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

Ich mache eine Pause mit erreicht wollen der Spieler, wenn es zu einer bestimmten Zeit im Video kommt, zum Beispiel eine Sekunde vor dem Ende. Wie würde ich das tun?

Gibt es einen Benachrichtigungsnamen wie AVPlayerItemDidPlayToEndTimeNotification, der in diesem Fall verwendet wird, um zu erkennen, wann eine bestimmte Zeit erreicht ist?

Antwort

2

Sie suchen nach AVPlayers addBoundaryTimeObserverForTimes:queue:usingBlock:.

+0

Awesome! Prost. – Danoram

2

Verwenden Sie addPeriodicTimeObserverForInterval, um ein periodisches Ereignis zu erstellen. Im Event-Handler können Sie die aktuelle Zeit des Videos überprüfen und pausieren, wenn die Zeit einigen Kriterien entspricht.

Beispiel:

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 
} 
+0

Ja natürlich. Aber meiner ist vielseitiger, weil Sie komplexere Regeln anwenden können. –

+0

Beide Antworten waren hilfreich, aber Lukes Antwort lieferte ein Arbeitsbeispiel, das mir Zeit spart. Danke euch beiden! – Danoram