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 缓存控制:无缓存内容类型:音频/mpeg

如何读取其他元数据?

4

1 回答 1

1

SHOUTcast/Icecast 流的元数据不在标头中,而是在实际流本身中。

icy-metaint: 16000您拥有的标题是关键。每 16,000 个字节,您将获得一个元数据块。该块中的第一个字节表示元数据长度。将其值乘以 16 以获得以字节为单位的长度。一旦你这样做了,你最终会得到这样的东西:

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

它将在最后填充空字节,直到达到块的长度。

我在这里为 PHP 回答了同样的问题,但无论使用什么语言,概念都是一样的: Pulling Track Info From an Audio Stream Using PHP

于 2013-01-26T19:44:00.947 回答