AVPlayer play continuously



我有一个对象数组。每个对象都有一个属性URL。使用此URL,我在AVPlayer上播放音频。

func playAudio(url: URL)
    {
        let player = AVPlayer(url: url )
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true)
        {
            do
            {
                try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
                    try AVAudioSession.sharedInstance().setActive(true)
            }
            catch _ as NSError {
            }
            playerViewController.player!.play()
        }
        NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
    }

我想连续播放所有对象的音频。我已经设置

NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)  

CourseDetailViewController.moviePlayBackDidFinish中,我再次打电话给Playaudio。然后,我将播放器作为全局变量,以免再次初始化。但是AVPlayer没有过多的过载,我们可以在已经存在的AVPlayer提供URL。而且,如果为下一个音频进行let player = AVPlayer(url: url ),则它不会播放,因为以前的Avplayer实例位于前景中。这是我在演奏连续音频方面面临的挑战。如果有更好且整洁的方法来做到这一点,我会很感激。

我在avplayer中做了同样的事情,但是不断播放视频。希望您可以以完全相同的方式解决此问题。添加一个观察者以检查玩家是否在项目末尾到达。每当到达最后一个物品时,通知都会致电。

  • 添加观察者:

    NotificationCenter.default.addObserver(self,
                                           selector: #selector(playerItemDidReachEnd(notification:)),
                                           name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                           object: avPlayer.currentItem)
    avPlayer.play()
    
  • 通知方法:

    func playerItemDidReachEnd(notification: Notification){ //TODO: Add your code here.. }

您是否看过AVQueuePlayer。该播放器用于按顺序播放许多项目。link

的SDK文档

最新更新