私は現在、SHOUTcast ストリームを取得する必要がある Windows Phone 7 用のアプリケーションの実装に取り組んでいます (この質問に触発されました)。ストリームの場所は、IP アドレスとポートで表されます。
SHOUTcast ストリーム URL の例を次に示します: http://78.159.104.183:80
ストリームからデータを取得するためにHttpWebRequestを作成しようとしています:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://78.159.104.183:80")
;
リクエストが初期化されたら、非同期コールバック経由でレスポンスを取得しようとしています:
request.BeginGetResponse(new AsyncCallback(GetShoutAsync), request);
GetShoutAsync は次のようになります。
void GetShoutAsync(IAsyncResult res)
{
HttpWebRequest request = (HttpWebRequest)res.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(res);
}
プロジェクトをビルドして実行すると、リクエストが初期化されるポイントに到達しますが、コールバックは呼び出されません。
興味深いことに気付きました - SHOUTcast は、ユーザーがストリーム URL に移動しようとすると、サーバーがユーザー エージェントを検出し、それが Web ブラウザーの場合、アプリケーション/オクテットを渡す代わりに HTML ページを表示するだけの手法を実装しています。 -ストリームコンテンツ。
ストリーム URL の末尾にスラッシュとセミコロンを使用すると、ストリームを直接受信できます: http://78.159.104.183:80/;
ただし、私のアプリケーションでは、応答を取得できません。コールバックに到達しないようです。ユーザー エージェントを HttpWebRequest に直接渡して偽装してみました。
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8";
これは、単純なストリーム URL (末尾にセミコロンがない) で HTML コンテンツを取得するために機能しますが、バイナリ ストリームを取得できません。
このようなことに遭遇したことのある人、または何が原因か知っている人はいますか?