我正在开发一款内置视频播放器的应用,该播放器可以播放来自磁盘的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
会停止。
任何人都知道该应用可能出现的问题?
谢谢:)
修改:注意:我将AVPlayerLayer
与AVPlayer
一起使用。也许这就是问题?
答案 0 :(得分:2)
是AVPlayerLayer
可能会产生问题。您需要将其从AVPlayer
对象中删除。在申请转到后台之前设置为nil
。
根据Apple Document解决的两种方法,
禁用播放器项目中的视频曲目(仅限基于文件的内容)。
- 醇>
从关联的AVPlayer中删除AVPlayerLayer(设置 AVPlayerLayer播放器属性为nil)。
有关详细信息,请参阅此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