iOS启用AVPlayer继续在后台播放

时间:2017-05-13 09:17:29

标签: ios swift audio video avplayer

我正在开发一款内置视频播放器的应用,该播放器可以播放来自磁盘的mp4个视频,而我正试图让它继续播放音频(视频)当应用程序进入后台时。

我已经阅读了许多其他堆栈溢出问题,但没有一个答案适用于我的案例。

我已添加:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
      print("AVAudioSession Category Playback OK")

    do {
      try AVAudioSession.sharedInstance().setActive(true)
      print("AVAudioSession is Active")
    } catch let error as NSError {
      print(error.localizedDescription)
    }
  } catch let error as NSError {
      print(error.localizedDescription)
  }
}

此外,我还在应用的Info.plist文件中拥有所需的后台模式键App plays audio or streams audio/video using AirPlay。 但是,当应用进入后台时,AVPlayer会停止。

任何人都知道该应用可能出现的问题?

谢谢:)

修改:注意:我将AVPlayerLayerAVPlayer一起使用。也许这就是问题?

2 个答案:

答案 0 :(得分:2)

AVPlayerLayer可能会产生问题。您需要将其从AVPlayer对象中删除。在申请转到后台之前设置为nil

根据Apple Document解决的两种方法,

  
      
  1. 禁用播放器项目中的视频曲目(仅限基于文件的内容)。

  2.   
  3. 从关联的AVPlayer中删除AVPlayerLayer(设置   AVPlayerLayer播放器属性为nil)。

  4.   

有关详细信息,请参阅此link

答案 1 :(得分:0)

首先,您必须在功能中启用“背景音频”。按照以下链接进行操作。

[See image to Enable Background Audio]

当您的应用移至后台时,将您的播放器分配为 nil。

// If presenting video with AVPlayerViewController
    playerViewController.player = nil

// If presenting video with AVPlayerLayer
    playerLayer.player = nil

当您的应用再次移至前台时,请按以下步骤操作。

// If presenting video with AVPlayerViewController
playerViewController.player = player

// If presenting video with AVPlayerLayer
playerLayer.player = player