AVPlayer持续播放

时间:2017-12-04 09:12:42

标签: ios swift avplayer avplayerviewcontroller

我有一个对象数组。每个对象都有一个属性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的网址。如果对下一个音频执行let player = AVPlayer(url: url ),则它不会播放,因为前一个AVPlayer实例位于前台。 这是我在播放连续音频时面临的挑战。如果有更好更好的方法,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

我在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.. }

答案 1 :(得分:0)

你看过AVQueuePlayer了吗?该播放器用于按顺序播放多个项目。 SDK Docs at link