【发布时间】:2012-04-26 16:46:36
【问题描述】:
我有一个 AVQueuePlayer 可以播放来自互联网的音频文件。它可以在后台与应用程序一起执行并且做得很好(在后台播放并在后台异步获取新文件)。
当我允许 AVQueuePlayer 在将应用程序移至后台之前开始播放时,一切都很好。为了开始播放,我的应用程序必须先与几个服务通信,然后才能真正获得要播放的正确文件。
如果我在播放开始前的关键几秒钟内将应用程序移至后台,则 AVQueuePlayer 将不会播放。
为了能够在后台与服务通信,我总是首先通过 beginBackgroundTaskWithExpirationHandler 请求后台任务权限。
查看日志,我可以看到所有服务正常完成(因此后台任务权限有效),并且 AVQueuePlayer 已使用多个 AVPlayerItems 正确初始化,但它不会开始播放。 AVQueuePlayer.currentItem.status 也永远不会到达 AVPlayerStatusReadyToPlay。
我确保与 AVQueuePlayer 的所有交互都发生在主线程上。
我被难住了,如果应用程序在后台,无论我的设置如何并且我拥有后台任务权限,AVQueuePlayer 都不会启动。
我以前能够用音频队列服务做类似的事情,但希望这次 AVQueuePlayer 和它更简单的 API 就足够了,但看来我必须回到音频队列服务和合作。
【问题讨论】:
标签: iphone core-audio avaudioplayer avaudiosession