我有一个可以播放互联网上的音频文件的AVQueuePlayer。它可以在应用程序的后台执行,并且做得很好(在后台播放,并在后台异步获取新文件)。
当我允许AVQueuePlayer在将应用程序移到后台之前开始播放时,一切都很好。为了开始播放,我的应用程序必须与几个服务进行对话,然后才能真正获得要播放的正确文件。
如果我在播放开始前的几秒钟内将应用程序移到后台,那么AVQueuePlayer将无法播放。
为了能够在后台与服务对话,我总是首先通过beginBackgroundTaskWithExpirationHandler请求后台任务权限。
查看日志,我可以看到所有服务都正常完成(所以后台任务权限有效),AVQueuePlayer使用多个AVPlayerItems正确初始化,但不会开始播放。AVQueuePlayer.currentItem.status也永远不会访问AVPlayerStatusReadyToPlay。
我确保所有与AVQueuePlayer的交互都发生在主线程上。
我被难住了,如果应用程序在后台,无论我的设置和我是否有后台任务权限,AVQueuePlayer都不会启动。
我之前已经能够用音频队列服务做一些类似的事情,但我希望这次AVQueuePlayer和它的更简单的应用程序接口将足够,但看起来我将不得不回到音频队列服务和公司。
发布于 2012-04-27 08:35:49
您必须在应用程序仍在前台时启动音频队列。如有必要,请静默。看起来,如果应用程序在进入后台时没有产生音频,那么默认情况下,它的音频会话将被取消并提供给新的前台应用程序。因此,进入后台的应用程序没有用于播放任何内容的会话。
https://stackoverflow.com/questions/10337807
复制相似问题