我有一个正在开发的音频应用程序,可以在前台和后台(锁定屏幕)播放一系列音频文件。我在后台播放音频播放列表时遇到问题。
下面是一个函数,我循环播放播放列表中的一个音频文件。我的 cellForItem 似乎每次都有问题。如果我不打开它,我会得到一个 fatal error 。如果我将它放在 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简洁的教程,他们会在其中精确地教您有关背景模式
以及如何在后台播放音频的信息。
希望对您有所帮助!
关于ios - 在后台快速播放音频播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45988430/