Windows Phone 8 アプリ。AudioStreamingAgent / Mp3MediaStreamSourceを使用して、ローカルにキャッシュしたり Web からロードしたりできる MP3 ファイルを再生します。
ファイルがダウンロードされると、AudioStreamingAgent /Mp3MediaStreamSource を引き続き使用して、現在の再生中に次のファイルをプリキャッシュできるようにします。はい、キャッシュされたファイルに WP8 組み込みプレーヤーのみを使用できますが、この場合、次のファイルをプリキャッシュすることはできません。
問題: いくつかのトラックの後、BackgroundAudioPlayer が再生を開始しなくなりました。
- AudioStreamingAgent.OnBeginStreaming が実行されます
- MediaStreamSource を作成するコードが実行されます
- AudioStreamer.SetSourceメソッドは、新しい MediaStreamSource インスタンスで実行されます
- PlayStateChanged は PlayState.TrackReady を使用してバックグラウンド プロセスで発生し、この場合は player.Play() が呼び出されます。
結局、トラックが UVC で表示されているのがわかりますが、状態は「一時停止」です。UVC で「再生」を押すと、Player.Play() を呼び出す OnUserAction がバックグラウンドで呼び出されます。何も変わりません。
問題が再現されたサンプル、VS 2012 (サンプルはBackground Audio Streamer Sampleに基づいています)
サンプル コードで再現する手順:
- アプリをインストールする
- 「トラックをプリロード」ボタンを押します。mp3 ファイルを XAP から IsolatedStorage にコピーします。
- 「トラック1」ボタンを押します。トラックの再生が開始されたら、「トラック 2」ボタンを押します。次に、トラック 2 の再生が開始されたら、「トラック 3」ボタンを押します。
- 「Track *」ボタンを押してもトラックの再生が開始されなくなるまで、手順 3 を繰り返します。
- 最後に選択したトラックは、UVC とページのプログレス バーの上にアクティブなトラックとして表示されます (図を参照) 。
- ほとんどの場合、他のトラック ボタンを押しても違いはありません。
この問題は、WP8 と WP8.1 の両方の開発者プレビューで、デバイスとエミュレーターの両方で再現されます。
更新:メモリ不足は当てはまりません。サンプル コードを使用して問題を再現し、backgroundlog.xml ファイルを確認すると、サンプルが許可されている 20 Mb のうち 6 Mb しか使用していないことがわかります。この図の最後の列は、「メモリ使用量|最大許容メモリ使用量」です。