外部 API から収集された曲のプレイリストを使用する Windows Phone 用のオーディオ プレーヤーを作成しました。
このプレイリストはクライアント アプリと backgroundaudioplayer の両方に保存されるため、アプリが実行されていなくても、曲の終了後に次のトラックを再生し続けることができます。
ただし、この API は、ストリーミングされるファイルへの実際のリダイレクトである URL を含むソース トラックを返します。
これらをバックグラウンド オーディオ プレーヤーに直接ロードしようとすると、例外が発生します。
クライアント アプリにリダイレクトを許可し、結果の URL をキャプチャしてからプレーヤーに渡し、クライアントとアプリの両方でプレイリストを更新することで、これを回避しようとしました。
これはかなりうまくいきます。
ただし、アプリから移動すると、バックグラウンド オーディオ エージェントが引き続き再生されます。つまり、クライアントの URL を更新するメカニズムが起動せず、元のリダイレクト URL が読み込まれ、アプリがクラッシュします。
バックグラウンド オーディオ エージェントで同じことを試みました (HEAD 要求を発行し、応答から結果の uri を取得します) が、これを機能させることができません。webrequest から返されることはありません。
これは私が達成しようとしていることの要点です:
try
{
var req = WebRequest.Create(src) as HttpWebRequest;
req.Method = "HEAD";
req.BeginGetResponse(ar =>
{
try
{
var response = req.EndGetResponse(ar);
var uri = response.ResponseUri;
selectedTrack.BeginEdit();
selectedTrack.Source = uri;
selectedTrack.EndEdit();
player.Track = selectedTrack;
player.Play();
}
catch (Exception ex)
{
}
}, req);
}
catch (Exception ex)
{
}
しかし、内部のコールバックは実行されず、プログラムは強制終了するまで停止します。
これを処理するためのより良い方法があるに違いないと確信していますが、この問題に関するドキュメントは見つかりませんでした。他のみんなはこれをどのように処理しますか?
クライアントでタイマーを起動して、リストを解析してリクエストを発行し、その場ですべてを更新することについて考えましたが、これは、アプリが起動するたびに 100 のリクエストが順番に実行されることを意味します (新しいトラックが毎回取得されるため)。時間)、これは実際には有効な解決策とは思えません...
誰かがここに何かアイデアを持っていますか? 彼らは大歓迎です!