私は現在、ユーザーがサウンドクラウドから音楽をストリーミングできるようにする iOS アプリを作成しています。現在、ブースの最前線とバックグラウンドのアプリの状態で、Soundcloud から問題なくストリーミングできます。MP3 ファイルをダウンロードして再生しようとすると問題が発生し、アプリがバックグラウンドで、より具体的にはロックされた画面または画面がオフのときに継続的に再生されます。
ダウンロードしたファイルを再生して画面をロックすると、音声がしばらく再生され続けます。通常、再生時間は 2 ~ 3 分です。その後、再生が停止し、ユーザーがアプリに戻るまで、プレイリスト内の他のダウンロードされた mp3 ファイルは再生されません。ダウンロードされていないプレイリストのアイテムは、ユーザーがインターネットに接続していれば、ダウンロードしたアイテムが以前に再生に失敗したかどうかに関係なく、完全に再生されます。
次のエラーが表示されることがあります。
AVPlayerItemStatusFailed: エラー Domain=AVFoundationErrorDomain Code=-11800 「操作を完了できませんでした」 UserInfo=0x170270500 {NSUnderlyingError=0x170059380 「操作を完了できませんでした。操作は許可されていません」、NSLocalizedFailureReason=不明なエラーが発生しました (1)、NSLocalizedDescription=操作を完了できませんでした}
さらに、AVPlayerItem から次の通知を受け取ります。
通知: NSConcreteNotification 0x1700538c0 {name = AVPlayerItemDidPlayToEndTimeNotification; オブジェクト = AVPlayerItem: 0x178009300、アセット = AVURLAsset: 0x17822aaa0、URL = ファイル:///var/mobile/Applications/51118E74-3334-4EFC-B148-B485DE675F9E/Documents/Downloads/SC_165903784.mp3}
この通知は、再生中の最初のアイテムの再生が停止したときに受信されます。再生が最後まで終わらないときにこの通知を受け取るのは意味がありません。
私の推測では、アプリがバックグラウンド モードであるため、ファイルの読み取りに設定された時間は限られていますが、どういうわけかそれを疑っています。
以下を使用して、ローカル ファイルから AVPlayerItem を作成しています。
NSURL* url = [NSURL fileURLWithPath:song.downloadFilePath];
[AVPlayerItem playerItemWithURL:url];
独自の AVQueuePlayer を構築し、iOS Hysteria Player も使用してみましたが、両方のインスタンスでオフライン ダウンロード再生で同じバグが発生しました。
洞察や解決策は大歓迎です。
ありがとう!