2015-11-23 25 views
7

Odtwarzam wideo z adresu URL za pomocą AVPlayer. AVPlayerItemDidPlayToEndTimeNotification nie strzela. Ustawiłem punkty przerwania do sprawdzenia. Poniżej jest mój urywek kodu: -AVPlayerItemDidPlayToEndTimeNotification nie odpalam

@IBAction func playButtonClicked(sender: UIButton) { 
    let url:NSURL = NSURL(string: self.currentSelectedContent.link)! 
    moviePlayer = AVPlayer(URL: url) 
    playerViewController = AVPlayerViewController() 
    playerViewController.player = moviePlayer 

    self.presentViewController(playerViewController, animated: true) { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "moviePlayBackFinished", name: AVPlayerItemDidPlayToEndTimeNotification, object: self.moviePlayer) 
     self.playerViewController.player?.play() 
    } 

} 

func moviePlayBackFinished() { 
    self.playerViewController.dismissViewControllerAnimated(true, completion: nil) 
} 

Odpowiedz

5

actionAtItemEnd własnością AVPlayer jest KVO zgodny:

moviePlayer.addObserver(self, forKeyPath: "actionAtItemEnd", options: [], context: nil) 


override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if keyPath == "actionAtItemEnd"{ 
     // 
     print("FINISH") 
    } 
} 

https://developer.apple.com/documentation/avfoundation/avplayer/1387376-actionatitemend

https://developer.apple.com/documentation/avfoundation/avplayeractionatitemend

14

Zgodnie z docs, obserwowany obiekt musi być instancję AVPlayerItem, a nie samą AVPlayer. Spróbuj zmienić self.moviePlayer na self.moviePlayer.currentItem.

+0

dzięki ten pracował dla mnie – smoothumut

+0

Wreszcie prawidłowa odpowiedź, ten był trudny do znalezienia! Wiele razy! – JOM

3

Działa to dla mnie:

NotificationCenter.default.addObserver(self, 
selector:#selector(NativeVideoPlayer.didEndPlayback), 
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object:nil)