インターネットからオーディオファイルを再生するAVQueuePlayerがあります。アプリをバックグラウンドで実行できるようになっており、それを正常に実行します(バックグラウンドで再生し、バックグラウンドで新しいファイルを非同期にフェッチします)。
アプリをバックグラウンドに移動する前にAVQueuePlayerの再生を開始できるようにすると、すべて問題ありません。アプリの再生を開始するには、実際に再生する正しいファイルを取得する前に、いくつかのサービスと通信する必要があります。
再生が開始される数秒前にアプリをバックグラウンドに移動すると、AVQueuePlayerは再生されません。
バックグラウンドでサービスと通信できるようにするために、私は常に最初にbeginBackgroundTaskWithExpirationHandlerを介してバックグラウンドタスクの許可を求めます。
ログを見ると、すべてのサービスが正常に完了し(バックグラウンドタスクのアクセス許可が機能するため)、AVQueuePlayerが複数のAVPlayerItemで正しく初期化されていることがわかりますが、再生は開始されません。AVQueuePlayer.currentItem.statusもAVPlayerStatusReadyToPlayに到達することはありません。
AVQueuePlayerとのすべての対話がメインスレッドで発生することを確認しました。
私は困惑しています。設定やバックグラウンドタスクの権限に関係なく、アプリがバックグラウンドにある場合、AVQueuePlayerは起動しません。
以前はAudioQueueServicesで同様のことを行うことができましたが、今回はAVQueuePlayerとよりシンプルなAPIで十分であることを期待していましたが、AudioQueueServicesなどに戻る必要があるようです。