我有一个对象数组。每个对象都有一个属性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。然后我把player作为一个全局变量,这样它就不会被再次初始化。但是在我们可以为已经存在的AVPlayer提供url的地方,没有AVPlayer的过载。如果对下一个音频执行let player = AVPlayer(url: url ),它不会播放,因为前一个AVPlayer实例在前台。这就是我在播放连续音频时所面临的挑战。如果有更好、更整洁的方法,我将不胜感激。
发布于 2017-12-04 18:21:07
我在AVPlayer中做了同样的事情,但不断地播放视频。我希望你能以同样的方式解决这个问题。添加一个观察者,以检查玩家是否在项目末尾到达。当每一项到达结尾处时,将调用通知。
对象(自身,选择器:#selector(playerItemDidReachEnd(notification:)),名称: NSNotification.Name.AVPlayerItemDidPlayToEndTime,对象: avPlayer.currentItem) avPlayer.play()
func playerItemDidReachEnd(notification: Notification){ //TODO: Add your code here.. }
发布于 2017-12-11 17:26:51
你有没有看过AVQueuePlayer。此播放器用于按顺序播放多个项目。SDK Docs at link
https://stackoverflow.com/questions/47629867
复制相似问题