我有一个对象数组。每个对象都有一个属性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