快速播放音频播放列表在背景中

时间:2017-08-31 19:03:23

标签: ios swift swift3 avfoundation

我有一个我正在处理的音频应用程序,它播放前景和背景(锁定屏幕)中的音频文件列表。我在后台播放音频播放列表时遇到问题。

下面是我循环播放下一个播放列表后的一个音频文件的功能。我似乎每次都遇到我的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()
                }
            }
        })
    }
  }
}

1 个答案:

答案 0 :(得分:1)

两件重要的事情:

  1. 您不应在主线程中播放或流式传输音频。使用此线程进行简短操作,但主要用于UI更新。

  2. 当应用程序从前台移动到后台时,您必须运行后台任务才能继续播放音频。

  3. 查看this整洁的教程,他们会精确地教你{{1}}以及如何在后台播放音频。

    我希望这有帮助!