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() 
       } 
      } 
     }) 
    } 
    } 
} 

两个重要的事情:

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

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

退房this整齐的教程,他们正是教你Background Modes,以及如何在后台播放音频。

我希望这有助于!