1

私はいくつかの質問を読みましたが、誰も私を解決しませんでした。icecast2 サーバーでサウンドストリームを読み取るシンプルなクライアントを作成しました。私はサウンドサウンドを次のように読みます:

    a = new WMPLib.WindowsMediaPlayer();
    a.URL = "http://radiolink:8000/music";
    a.controls.play();

それは動作し、私は音楽を聴いています。今、私は現在の曲のタイトルを読みたいです。ここで見つけたのは、次のようなリクエストを作成する必要があることです。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://radiolink:8000/music");

            request.Headers.Clear();

            request.Headers.Add("GET", " HTTP/1.0");
            request.UserAgent = "WinampMPEG/5.09";

            request.Headers.Add("Icy-MetaData", "1");
            request.KeepAlive = true;

            WebResponse fifo = request.GetResponse();


            Console.WriteLine(fifo.Headers);

そのコード コンソールは出力のみを書き込みます ( content-type=audio-mpg)。私を助けて、データを正しく読み取るための正しい方法を教えてもらえますか?

// 解決済みの最初の部分。今私はそれを受け取ります:

icy-br: 128,128 ice-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2 icy-description: ラジオ fff icy-genre: 様々な icy-name: RADIO icy-pub: 0​​ icy -url: http://url.com icy-mettaint: 16000 Cache-Control: no-cache Content-Type: audio/mpeg

他のメタデータを読み取るには?

4

1 に答える 1

1

SHOUTcast/Icecast ストリームのメタデータはヘッダーではなく、実際のストリーム自体にあります。

あなたが持っているそのicy-metaint: 16000ヘッダーが鍵です。16,000 バイトごとに、メタデータ ブロックを取得します。そのブロックの最初のバイトは、メタデータの長さを示します。その値に 16 を掛けて、バイト単位の長さを取得します。これを行うと、次のような結果になります。

StreamTitle='Awesome Trance Mix - DI.fm';StreamUrl=''

ブロックの長さに達するまで、最後に null バイトが埋め込まれます。

ここで PHP について同じ質問に答えましたが、概念は言語に関係なく同じです: PHP を使用してオーディオ ストリームからトラック情報をプルする

于 2013-01-26T19:44:00.947 に答える