ios - 在后台快速播放音频播放列表

标签 ios swift swift3 avfoundation

我有一个正在开发的音频应用程序,可以在前台和后台(锁定屏幕)播放一系列音频文件。我在后台播放音频播放列表时遇到问题。

下面是一个函数,我循环播放播放列表中的一个音频文件。我的 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()
                }
            }
        })
    }
  }
}

最佳答案

两件重要的事情:

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

  2. 您必须运行后台任务,以便在应用程序从前台转到后台时继续播放音频。

查看 this简洁的教程,他们会在其中精确地教您有关背景模式以及如何在后台播放音频的信息。

希望对您有所帮助!

关于ios - 在后台快速播放音频播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45988430/

相关文章:

ios - 如何在没有 Storyboard的情况下以编程方式在 iOS8 上创建今日小部件?

ios - 从通知小部件中查明设备是否已锁定

ios - TARGET_OS_IOS、TARGET_OS_TV 和模拟器

ios - 将通过应用程序相机拍摄的照片与元数据一起保存到设备的相机胶卷

swift - 既然 Xcode 9 已经发布,我可以从 Xcode 8.3.3 提交和部署应用程序而不更新到 Xcode 9 吗?

ios - 多层 scn 文件需要时间来渲染 arkit

ios - tabbar 没有显示在 secondview Controller 中

Swift:guard let 与 if let

ios - 使用 ReactiveCocoa 4 的简单 UIGestureRecogniser 示例

swift - 如何正确地在 Swift 中声明一个变量?