我有一个AVQueuePlayer可以播放来自互联网的音频文件。它可以在后台使用应用程序执行,并且可以正常运行(在后台播放并在后台异步提取新文件)。
在将应用程序移动到后台之前允许AVQueuePlayer开始播放时,一切正常。为了开始播放我的应用程序必须先与几个服务进行通信才能真正获得正确的文件。
如果我在播放开始之前的几秒钟内将应用移动到后台,那么AVQueuePlayer将无法播放。
为了能够在后台与服务交谈,我总是首先通过beginBackgroundTaskWithExpirationHandler请求后台任务权限。
观察日志我可以看到所有服务正常完成(因此后台任务权限有效),并且AVQueuePlayer已使用多个AVPlayerItem正确初始化但不会开始播放。 AVQueuePlayer.currentItem.status也永远不会到达AVPlayerStatusReadyToPlay。
我确保所有与AVQueuePlayer的交互都发生在主线程上。
我很难过,如果应用程序在后台,无论我的设置和我有后台任务权限,AVQueuePlayer都无法启动。
我以前能够使用音频队列服务做类似的事情但希望AVQueuePlayer及其更简单的API足以满足这一次,但似乎我将不得不回到音频队列服务和公司。
答案 0 :(得分:2)
当应用程序仍在前台时,您必须启动音频队列。必要时播放沉默。看起来如果应用程序在进入后台时没有产生音频,它的音频会话将被带走并默认提供给新的前台应用程序。因此,进入后台的应用程序没有可以播放任何内容的会话。