我有一个对象数组。每个对象都有一个属性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实例位于前台。
这是我在播放连续音频时面临的挑战。如果有更好更好的方法,我将不胜感激。
答案 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