2012-04-26 74 views
2

我有一个AVQueuePlayer播放来自互联网的音频文件。它可以在后台执行应用程序,并且很好(在后台播放并在后台异步获取新文件)。在后台启动AVQueuePlayer

当我将AVQueuePlayer移动到背景之前,我就允许AVQueuePlayer开始播放。为了开始播放,我的应用程序在实际获得正确的文件播放之前必须与两个服务进行通话。

如果我在播放开始之前的几秒钟内将应用程序移到背景中,那么AVQueuePlayer将不会播放。

为了能够在后台与服务对话,我总是通过beginBackgroundTaskWithExpirationHandler先要求后台任务权限。

看着日志我可以看到所有服务都正常完成(所以后台任务权限可以工作),并且AVQueuePlayer可以用多个AVPlayerItems正确初始化,但不会开始播放。 AVQueuePlayer.currentItem.status也永远不会到AVPlayerStatusReadyToPlay。

我确定所有与AVQueuePlayer的交互发生在主线程上。

我很难过,如果应用程序在后台而不管我的设置和我有后台任务权限,AVQueuePlayer将无法启动。

我以前已经能够做类似的音频队列服务,但希望AVQueuePlayer和它更简单的API就足够了这一次,但它似乎我必须回到音频队列服务和合作。

回答

2

当应用程序仍处于前台时,您必须启动音频队列。如有必要播放沉默。它看起来应用程序在进入后台时没有产生音频,它的音频会话被取走并默认发送给新的前台应用程序。因此,进入后台的应用程序没有可以播放任何内容的会话。

+0

作品!谢谢你的热水。 – atlithorn 2012-04-27 10:56:23