6

Windows Phone 8 アプリ。AudioStreamingAgent / Mp3MediaStreamSourceを使用して、ローカルにキャッシュしたり Web からロードしたりできる MP3 ファイルを再生します。

ファイルがダウンロードされると、AudioStreamingAgent /Mp3MediaStreamSource を引き続き使用して、現在の再生中に次のファイルをプリキャッシュできるようにします。はい、キャッシュされたファイルに WP8 組み込みプレーヤーのみを使用できますが、この場合、次のファイルをプリキャッシュすることはできません。

問題: いくつかのトラックの後、BackgroundAudioPlayer が再生を開始しなくなりました。

  1. AudioStreamingAgent.OnBeginStreaming が実行されます
  2. MediaStreamSource を作成するコードが実行されます
  3. AudioStreamer.SetSourceメソッドは、新しい MediaStreamSource インスタンスで実行されます
  4. PlayStateChanged は PlayState.TrackReady を使用してバックグラウンド プロセスで発生し、この場合は player.Play() が呼び出されます。

結局、トラックが UVC で表示されているのがわかりますが、状態は「一時停止」です。UVC で「再生」を押すと、Player.Play() を呼び出す OnUserAction がバックグラウンドで呼び出されます。何も変わりません。

「くっついた状態」の写真

問題が再現されたサンプル、VS 2012 (サンプルはBackground Audio Streamer Sampleに基づいています)

サンプル コードで再現する手順:

  1. アプリをインストールする
  2. 「トラックをプリロード」ボタンを押します。mp3 ファイルを XAP から IsolatedStorage にコピーします。
  3. 「トラック1」ボタンを押します。トラックの再生が開始されたら、「トラック 2」ボタンを押します。次に、トラック 2 の再生が開始されたら、「トラック 3」ボタンを押します。
  4. 「Track *」ボタンを押してもトラックの再生が開始されなくなるまで、手順 3 を繰り返します。
  5. 最後に選択したトラックは、UVC とページのプログレス バーの上にアクティブなトラックとして表示されます (を参照) 。
  6. ほとんどの場合、他のトラック ボタンを押しても違いはありません。

この問題は、WP8 と WP8.1 の両方の開発者プレビューで、デバイスとエミュレーターの両方で再現されます。

更新:メモリ不足は当てはまりません。サンプル コードを使用して問題を再現し、backgroundlog.xml ファイルを確認すると、サンプルが許可されている 20 Mb のうち 6 Mb しか使用していないことがわかります。この図の最後の列は、「メモリ使用量|最大許容メモリ使用量」です。

4

1 に答える 1

1

これに関する私の経験では、バックグラウンド オーディオの再生に関する制限がなくなる WPA8.1 に移植して作業を開始することをお勧めします。

WP 用の音楽プレーヤー アプリを開発し、使用中に音楽をキャッシュしようとしたmediastreamsourceときに、最終的にそれは不可能かもしれないという結論に達しました。OSが実行中のタスクまたはバックグラウンドタイプの作業を踏みつける前に、一定の時間またはその他の変数があるようです。

MS エバンジェリストのためにこれを書きました: https://drive.google.com/file/d/0By_e5C-QWr9Ka3RmbVBlWVF3R1E/edit?usp=sharing

これを解決しようとするときに私が好んだ他のSOは次のとおりです。

BackgroundAudioPlayer は「再生中」ですが、GetSampleAsync() を呼び出していません

WP7 バックグラウンド オーディオ リソースは利用できなくなりました

AudioPlayerAgent からの HttpWebRequest

AudioPlayerAgent、タイマー、および Web サービス

WP7 Mp3MediaStreamSource デモが機能しない

于 2014-07-02T15:29:03.457 に答える