Swift在后台播放音频播放列表
问题描述:
我有一个音频应用程序,我正在播放前台和后台(锁定屏幕)中的音频文件列表。在播放背景音频播放列表时遇到问题。Swift在后台播放音频播放列表
下面是我循环播放下一个播放列表后一个音频文件的功能。我似乎每次都遇到了我的cellForItem问题。如果我不打开它,我会得到一个致命的错误。如果我把它放在一个if let语句中,那么在播放下一首歌曲时,下一个重复代码将不会贯穿它。我从不失去indexPath,所以它应该工作得很好。我无法弄清楚。
func playCellAudioInBackground(indexPath: IndexPath) {
if let item = cv.cellForItem(at: indexPath) as? CollectionViewCell {
let when = DispatchTime.now() + 3 // change 2 to desired number of seconds
DispatchQueue.main.asyncAfter(deadline: when) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: ({
self.gradient.removeFromSuperlayer()
item.superview?.bringSubview(toFront: item)
self.view.setNeedsLayout()
self.view.layoutIfNeeded()
}), completion: { (finished: Bool) in
let audioURL = self.streams[indexPath.item][“audioURL"] as? String
let isLive = self.streams[indexPath.item]["isLive"] as? Bool
self.audioStreamSelected(audioUrl: audioURL!, live:isLive!) { (success) -> Void in
DispatchQueue.main.async {
self.audioPlay()
}
}
})
}
}
}
答
两个重要的事情:
你不应该播放或在主线程流音频。使用此线程进行简短操作,但主要用于UI更新。
为了在应用程序从前景转到背景时继续播放音频,您必须运行后台任务。
退房this整齐的教程,他们正是教你Background Modes
,以及如何在后台播放音频。
我希望这有助于!