カスタムMediaStreamSourceを使用して、バックグラウンドエージェントでWebから音楽をストリーミングしています。良好なネットワーク状態ではこれは正常に機能しますが、ネットワーク接続が不安定な場合は奇妙な問題が発生します。
トラックの再生が開始されると、MediaStreamSource.GetSampleAsync()への最初の呼び出しですべてが順調に進みます。接続が不安定なため、十分なデータが利用できない場合、ソースはReportGetSampleProgress(double)を呼び出し、サンプルを報告せずに戻ります。これは、MSDNのドキュメントとコードサンプルに準拠しています。
不思議なのは、GetSampleAsyncへの呼び出しがこれ以上ないことです。バッファリングが続くと、ソースはサンプルの準備ができるまでReportGetSampleProgressを続行し、サンプルがいっぱいになるとReportGetSampleProgress(1.0)
、バッファがいっぱいであることを示します。
私は次のようないくつかのアプローチを試しました。
ReportGetSampleCompleted
バッファリングが完了したとき。ダウンロードイベントは任意のスレッドで発生し、このメソッドは呼び出し元のスレッドとGetSampleAsyncの呼び出しがスタック上にあるかどうかの両方に明らかに敏感であるため、これは失敗します。無効な呼び出し状況では、COMエラーが発生します。- 正確なエラー状態で、BackgroundAudioPlayerを停止して開始します。これにより、ストリーミングの再開に失敗します。
サンプルの読み取りに最初に失敗したときに問題が発生した場合、どうすればストリーミングを再開できますか?