iOS启用AVPlayer在后台继续播放

3

我正在开发一个带有内置视频播放器的应用程序,可以从磁盘播放mp4视频。我尝试使其在应用程序进入后台时继续播放音频(视频的音频部分)。

我已经阅读了许多其他stackoverflow的问题,但没有一个答案适用于我的情况。

我已经添加了:

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个回答

2

是的,AVPlayerLayer可能会导致问题。您需要从AVPlayer对象中删除它。在应用程序进入后台之前将其设置为nil

根据Apple文档,有两种解决方法:

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

  2. 从其关联的AVPlayer中删除AVPlayerLayer(将AVPlayerLayer player属性设置为nil)。

请参阅此链接获取更多信息。


1

首先,您必须在功能中启用“后台音频”。请点击下面的链接进行操作。

[查看图片以启用后台音频]

当您的应用程序转到后台时,请将播放器分配为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接