2012-04-26 77 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